diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java index f946af9c463a..5031bcddb4bc 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java @@ -363,7 +363,7 @@ public class StubBuildingVisitor extends ClassVisitor { newTypeParameterList(stub, info.typeParameters); boolean isEnumConstructor = isConstructor && isEnum; - boolean isInnerClassConstructor = isConstructor && isInner() && !isGroovyClosure(canonicalMethodName); + boolean isInnerClassConstructor = isConstructor && !isEnum && isInner() && !isGroovyClosure(canonicalMethodName); List 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 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); } diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor$MyEnum.class b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor$MyEnum.class new file mode 100644 index 000000000000..c718739e0042 Binary files /dev/null and b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor$MyEnum.class differ diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class index 823dac64c2d5..73cd485c41bf 100644 Binary files a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class and b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class differ diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.java b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.java new file mode 100644 index 000000000000..ef4b4a19558c --- /dev/null +++ b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.java @@ -0,0 +1,6 @@ +public class AnnotatedEnumConstructor { + private enum MyEnum { + VAL("+", "-"); + MyEnum(String s1, @Deprecated String s2) { } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt index 89cd6e786467..a63c9cc09a1f 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt @@ -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:] \ No newline at end of file diff --git a/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff$Enum.class b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff$Enum.class new file mode 100644 index 000000000000..91a56f9791f5 Binary files /dev/null and b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff$Enum.class differ diff --git a/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff$Inner.class b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff$Inner.class new file mode 100644 index 000000000000..eb00714a8759 Binary files /dev/null and b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff$Inner.class differ diff --git a/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.class b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.class new file mode 100644 index 000000000000..3e8968336ab1 Binary files /dev/null and b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.class differ diff --git a/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.groovy b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.groovy new file mode 100644 index 000000000000..9cbd38314984 --- /dev/null +++ b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.groovy @@ -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) { } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.txt b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.txt new file mode 100644 index 000000000000..c8b7225e2d2d --- /dev/null +++ b/java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.txt @@ -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:] \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/psi/ClsStubBuilderTest.java b/java/java-tests/testSrc/com/intellij/java/psi/ClsStubBuilderTest.java index 6d355e486382..415f94f19fdf 100644 --- a/java/java-tests/testSrc/com/intellij/java/psi/ClsStubBuilderTest.java +++ b/java/java-tests/testSrc/com/intellij/java/psi/ClsStubBuilderTest.java @@ -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"); }