diff options
Diffstat (limited to 'java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiMethodStubImpl.java')
-rw-r--r-- | java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiMethodStubImpl.java | 50 |
1 files changed, 39 insertions, 11 deletions
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiMethodStubImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiMethodStubImpl.java index 1463355455c2..13487c5514d0 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiMethodStubImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiMethodStubImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,19 +21,23 @@ package com.intellij.psi.impl.java.stubs.impl; import com.intellij.psi.PsiMethod; import com.intellij.psi.impl.cache.TypeInfo; +import com.intellij.psi.impl.compiled.StubBuildingVisitor; import com.intellij.psi.impl.java.stubs.JavaStubElementTypes; import com.intellij.psi.impl.java.stubs.PsiMethodStub; import com.intellij.psi.impl.java.stubs.PsiParameterListStub; import com.intellij.psi.impl.java.stubs.PsiParameterStub; import com.intellij.psi.stubs.StubBase; import com.intellij.psi.stubs.StubElement; +import com.intellij.util.BitUtil; +import com.intellij.util.cls.ClsFormatException; import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; public class PsiMethodStubImpl extends StubBase<PsiMethod> implements PsiMethodStub { - private TypeInfo myReturnType; + private final TypeInfo myReturnType; private final byte myFlags; private final StringRef myName; private StringRef myDefaultValueText; @@ -43,15 +47,40 @@ public class PsiMethodStubImpl extends StubBase<PsiMethod> implements PsiMethodS private static final int ANNOTATION = 0x04; private static final int DEPRECATED = 0x08; private static final int DEPRECATED_ANNOTATION = 0x10; - - public PsiMethodStubImpl(StubElement parent, StringRef name, byte flags, StringRef defaultValueText) { + private static final int PARSED_VIA_GENERIC_SIGNATURE = 0x20; + + public PsiMethodStubImpl(StubElement parent, + StringRef name, + byte flags, + String signature, + @NotNull List<String> args, + @Nullable List<String> throwables, + String desc, + int modifiersMask) { super(parent, isAnnotationMethod(flags) ? JavaStubElementTypes.ANNOTATION_METHOD : JavaStubElementTypes.METHOD); - myFlags = flags; myName = name; - myDefaultValueText = defaultValueText; + myDefaultValueText = null; + + new PsiModifierListStubImpl(this, modifiersMask); + + String returnType = null; + boolean parsedViaGenericSignature = false; + if (signature != null) { + try { + returnType = StubBuildingVisitor.parseMethodViaGenericSignature(signature, this, args, throwables); + parsedViaGenericSignature = true; + } + catch (ClsFormatException ignored) { } + } + if (returnType == null) { + returnType = StubBuildingVisitor.parseMethodViaDescription(desc, this, args); + } + + myReturnType = TypeInfo.fromString(returnType); + myFlags = (byte)(flags | (parsedViaGenericSignature ? PARSED_VIA_GENERIC_SIGNATURE : 0)); } - public PsiMethodStubImpl(StubElement parent, StringRef name, TypeInfo returnType, byte flags, StringRef defaultValueText) { + public PsiMethodStubImpl(StubElement parent, StringRef name, @NotNull TypeInfo returnType, byte flags, StringRef defaultValueText) { super(parent, isAnnotationMethod(flags) ? JavaStubElementTypes.ANNOTATION_METHOD : JavaStubElementTypes.METHOD); myReturnType = returnType; myFlags = flags; @@ -59,10 +88,6 @@ public class PsiMethodStubImpl extends StubBase<PsiMethod> implements PsiMethodS myDefaultValueText = defaultValueText; } - public void setReturnType(TypeInfo returnType) { - myReturnType = returnType; - } - @Override public boolean isConstructor() { return (myFlags & CONSTRUCTOR) != 0; @@ -73,6 +98,9 @@ public class PsiMethodStubImpl extends StubBase<PsiMethod> implements PsiMethodS return (myFlags & VARARGS) != 0; } + public boolean isParsedViaGenericSignature() { + return BitUtil.isSet(myFlags, PARSED_VIA_GENERIC_SIGNATURE); + } @Override public boolean isAnnotationMethod() { return isAnnotationMethod(myFlags); |