From 9d8d934558e89338e4e3b6f4ece0bec9d96657d6 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 9 Oct 2018 14:51:18 +0200 Subject: [PATCH] [java] fixes stub building for Groovy enums and inner classes --- .../impl/compiled/StubBuildingVisitor.java | 5 +- .../AnnotatedEnumConstructor$MyEnum.class | Bin 0 -> 1145 bytes .../AnnotatedEnumConstructor.class | Bin 1303 -> 299 bytes .../stubBuilder/AnnotatedEnumConstructor.java | 6 +++ .../stubBuilder/AnnotatedEnumConstructor.txt | 36 ++++++++------ .../cls/stubBuilder/GroovyStuff$Enum.class | Bin 0 -> 5793 bytes .../cls/stubBuilder/GroovyStuff$Inner.class | Bin 0 -> 4148 bytes .../psi/cls/stubBuilder/GroovyStuff.class | Bin 0 -> 3661 bytes .../psi/cls/stubBuilder/GroovyStuff.groovy | 10 ++++ .../psi/cls/stubBuilder/GroovyStuff.txt | 47 ++++++++++++++++++ .../intellij/java/psi/ClsStubBuilderTest.java | 5 +- 11 files changed, 90 insertions(+), 19 deletions(-) create mode 100644 java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor$MyEnum.class create mode 100644 java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.java create mode 100644 java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff$Enum.class create mode 100644 java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff$Inner.class create mode 100644 java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.class create mode 100644 java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.groovy create mode 100644 java/java-tests/testData/psi/cls/stubBuilder/GroovyStuff.txt 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 0000000000000000000000000000000000000000..c718739e0042f18226f0a84c7506824f92e537c0 GIT binary patch literal 1145 zcma)5YflqF6g{)M?Y7JEs>q{)m0G0_p(yahHlzeGX;Q^lZDRbiUB+g~c51e}B>pRf zM2tqmXMdFO&eA}oZR{pHH*@FAx#vFS_n+^-0BmC?4hy?^@k1?=q~`_Jrv8md}sm`F=-qeJ`;6 zj+eQ-QDV?DMDg~Z&X9gT20VIVxq;-)WOL)-wf)W!XPB-zg1-#fP42z1nl5?tkm&FO z!%nt#Y@Jv|*AlH_-S-^PD&@wJQg(#n?=n0cLQoy#9Q5QG4Dq_t5|$r$q-kvk(ePX8 z*MabzHg7mxhthdvc~+bI-0Ribp-MB%_uYNQKYHAjouHb>%C_6nu4bi(tv;meRQbQ@ z?-Gqs?*yLBpF6UiE2CPyA&YBbR!&sH#3ml=c*2kxh3}1qi3Mz#Si&{~E6~3#H%Swd zm|>W@?%3tzMQpbtNXA??*O$v-^O)N{NnIQj?MC~<(Jl2cT+PG30f};cNVBTBMrD&8 zhe_{AsVqsYz)VsmPaX|%+`=3fZqqJJR({4Q*jFeQP(Ra-cxjD>XA0pLuy}=6La&j~ z^4}1-fHsI%WQm}L{3)^#;?nbl<#R;8+#uI*hdc_Fu|hVkgvWPjjUk15y_h9ZBEQrR zXzvobnusOh=P=GNq5UL}dWwnq8Q3+qL5!flvt-p?gjGsaM!Jt_vIbFWSi@8$`4@W^ B6kPxS literal 0 HcmV?d00001 diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.class index 823dac64c2d5762452f23b52170df63d6a2d9c42..73cd485c41bf030d8060171351d92cab14b7f8e2 100644 GIT binary patch delta 200 zcmbQvwVKKP)W2Q(7#J8#7zDW(m>GE48Ti;4_}Li*7#Y}nD_!$Sa~Tf#Noqd6^}4j10^gnqd=9Nl%Vr(q&_3;9z8sn7C0wjFCYgE3qt5KPNFSUEe<` zD>b=@?^n$1_oBG?F@_?!O~nnk_{*fQp&`@ W4WyYEcz_}d3|v4F79fw+K?(qVfFQE~ literal 1303 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