[java] fixes stub building for Groovy enums and inner classes

This commit is contained in:
Roman Shevchenko
2018-10-09 14:51:42 +02:00
parent a5abd5e510
commit 9d8d934558
11 changed files with 90 additions and 19 deletions
@@ -363,7 +363,7 @@ public class StubBuildingVisitor<T> extends ClassVisitor {
newTypeParameterList(stub, info.typeParameters);
boolean isEnumConstructor = isConstructor && isEnum;
boolean isInnerClassConstructor = isConstructor && isInner() && !isGroovyClosure(canonicalMethodName);
boolean isInnerClassConstructor = isConstructor && !isEnum && isInner() && !isGroovyClosure(canonicalMethodName);
List<String> args = info.argTypes;
if (!hasSignature && isEnumConstructor && args.size() >= 2 && CommonClassNames.JAVA_LANG_STRING.equals(args.get(0)) && "int".equals(args.get(1))) {
@@ -390,7 +390,8 @@ public class StubBuildingVisitor<T> extends ClassVisitor {
newReferenceList(JavaStubElementTypes.THROWS_LIST, stub, ArrayUtil.toStringArray(info.throwTypes));
int paramIgnoreCount = myNoAnnotationOffsets ? 0 : isEnumConstructor ? 2 : isInnerClassConstructor ? 1 : 0;
boolean noSynthetics = isConstructor && hasSignature && Type.getArgumentTypes(desc).length == info.argTypes.size();
int paramIgnoreCount = myNoAnnotationOffsets || noSynthetics ? 0 : isEnumConstructor ? 2 : isInnerClassConstructor ? 1 : 0;
int localVarIgnoreCount = isEnumConstructor ? 3 : isStatic ? 0 : 1;
return new MethodAnnotationCollectingVisitor(stub, modList, paramStubs, paramIgnoreCount, localVarIgnoreCount, myMapping);
}
@@ -0,0 +1,6 @@
public class AnnotatedEnumConstructor {
private enum MyEnum {
VAL("+", "-");
MyEnum(String s1, @Deprecated String s2) { }
}
}
@@ -1,20 +1,28 @@
PsiJavaFileStub []
PsiClassStub[enum name=AnnotatedEnumConstructor fqn=AnnotatedEnumConstructor]
PsiModifierListStub[mask=17]
PsiClassStub[name=AnnotatedEnumConstructor fqn=AnnotatedEnumConstructor]
PsiModifierListStub[mask=1]
PsiTypeParameterListStub
PsiRefListStub[EXTENDS_LIST:]
PsiRefListStub[IMPLEMENTS_LIST:]
PsiFieldStub[enumconst A:AnnotatedEnumConstructor]
PsiModifierListStub[mask=25]
PsiFieldStub[enumconst B:AnnotatedEnumConstructor]
PsiModifierListStub[mask=25]
PsiFieldStub[enumconst C:AnnotatedEnumConstructor]
PsiModifierListStub[mask=25]
PsiMethodStub[cons varargs AnnotatedEnumConstructor:void]
PsiModifierListStub[mask=2]
PsiClassStub[enum name=MyEnum fqn=AnnotatedEnumConstructor.MyEnum]
PsiModifierListStub[mask=26]
PsiTypeParameterListStub
PsiRefListStub[EXTENDS_LIST:]
PsiRefListStub[IMPLEMENTS_LIST:]
PsiFieldStub[enumconst VAL:AnnotatedEnumConstructor.MyEnum]
PsiModifierListStub[mask=25]
PsiMethodStub[cons MyEnum:void]
PsiModifierListStub[mask=2]
PsiTypeParameterListStub
PsiParameterListStub
PsiParameterStub[p1:java.lang.String]
PsiModifierListStub[mask=0]
PsiParameterStub[p2:java.lang.String]
PsiModifierListStub[mask=0]
PsiAnnotationStub[@java.lang.Deprecated]
PsiRefListStub[THROWS_LIST:]
PsiMethodStub[cons AnnotatedEnumConstructor:void]
PsiModifierListStub[mask=1]
PsiTypeParameterListStub
PsiParameterListStub
PsiParameterStub[names:java.lang.String...]
PsiModifierListStub[mask=0]
PsiAnnotationStub[@org.jetbrains.annotations.Nullable]
PsiRefListStub[THROWS_LIST:]
PsiRefListStub[THROWS_LIST:]
@@ -0,0 +1,10 @@
class GroovyStuff {
private enum Enum {
Value("", "");
private Enum(String s1, @Deprecated String s2) { }
}
private class Inner {
Inner(String s1, @Deprecated String s2) { }
}
}
@@ -0,0 +1,47 @@
PsiJavaFileStub []
PsiClassStub[name=GroovyStuff fqn=GroovyStuff]
PsiModifierListStub[mask=1]
PsiTypeParameterListStub
PsiRefListStub[EXTENDS_LIST:]
PsiRefListStub[IMPLEMENTS_LIST:groovy.lang.GroovyObject]
PsiClassStub[enum name=Enum fqn=GroovyStuff.Enum]
PsiModifierListStub[mask=4112]
PsiTypeParameterListStub
PsiRefListStub[EXTENDS_LIST:]
PsiRefListStub[IMPLEMENTS_LIST:groovy.lang.GroovyObject]
PsiFieldStub[enumconst Value:GroovyStuff.Enum]
PsiModifierListStub[mask=25]
PsiFieldStub[MIN_VALUE:GroovyStuff.Enum]
PsiModifierListStub[mask=25]
PsiFieldStub[MAX_VALUE:GroovyStuff.Enum]
PsiModifierListStub[mask=25]
PsiMethodStub[cons Enum:void]
PsiModifierListStub[mask=2]
PsiTypeParameterListStub
PsiParameterListStub
PsiParameterStub[s1:java.lang.String]
PsiModifierListStub[mask=0]
PsiParameterStub[s2:java.lang.String]
PsiModifierListStub[mask=0]
PsiAnnotationStub[@java.lang.Deprecated]
PsiRefListStub[THROWS_LIST:]
PsiClassStub[name=Inner fqn=GroovyStuff.Inner]
PsiModifierListStub[mask=4096]
PsiTypeParameterListStub
PsiRefListStub[EXTENDS_LIST:]
PsiRefListStub[IMPLEMENTS_LIST:groovy.lang.GroovyObject]
PsiMethodStub[cons Inner:void]
PsiModifierListStub[mask=1]
PsiTypeParameterListStub
PsiParameterListStub
PsiParameterStub[s1:java.lang.String]
PsiModifierListStub[mask=0]
PsiParameterStub[s2:java.lang.String]
PsiModifierListStub[mask=0]
PsiAnnotationStub[@java.lang.Deprecated]
PsiRefListStub[THROWS_LIST:]
PsiMethodStub[cons GroovyStuff:void]
PsiModifierListStub[mask=1]
PsiTypeParameterListStub
PsiParameterListStub
PsiRefListStub[THROWS_LIST:]
@@ -1,6 +1,4 @@
/*
* Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
*/
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.psi;
import com.intellij.JavaTestUtil;
@@ -33,6 +31,7 @@ public class ClsStubBuilderTest extends LightIdeaTestCase {
public void testAnnotatedEnumConstructor() { doTest(); }
public void testInterfaceMethodParameters() { doTest(); }
public void testEnumMethodParameters() { doTest(); }
public void testGroovyStuff() { doTest(); }
public void testModifiers() { doTest("../repo/pack/" + getTestName(false)); }
public void testModuleInfo() { doTest("module-info"); }