mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] fixes stub building for Groovy enums and inner classes
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -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:]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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"); }
|
||||
|
||||
Reference in New Issue
Block a user