summaryrefslogtreecommitdiff
path: root/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiMethodStubImpl.java
diff options
context:
space:
mode:
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.java50
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);