From 24cf5685340238d2ec304aae5e1654690dba0bc3 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 27 Sep 2018 16:52:03 +0200 Subject: [PATCH] [java] makes stub builder compatible with ASM 6.2 (IDEA-191331) --- .../psi/impl/compiled/StubBuildingVisitor.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 a5e9b105effd..56766afa6e24 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 @@ -59,6 +59,7 @@ public class StubBuildingVisitor extends ClassVisitor { private final Function myMapping; private final boolean myAnonymousInner; private final boolean myLocalClassInner; + private boolean myNoAnnotationOffsets; private String myInternalName; private PsiClassStub myResult; private PsiModifierListStub myModList; @@ -78,6 +79,8 @@ public class StubBuildingVisitor extends ClassVisitor { myMapping = createMapping(classSource); myAnonymousInner = anonymousInner; myLocalClassInner = localClassInner; + //noinspection ConstantConditions + myNoAnnotationOffsets = ASM_API > Opcodes.ASM6 && !(classSource == null && innersStrategy.getClass().getName().startsWith("org.jetbrains.kotlin.")); } public PsiClassStub getResult() { @@ -272,8 +275,10 @@ public class StubBuildingVisitor extends ClassVisitor { if (myInternalName.equals(outerName)) { T innerClass = myInnersStrategy.findInnerClass(jvmClassName, mySource); if (innerClass != null) { - myInnersStrategy.accept( - innerClass, new StubBuildingVisitor<>(innerClass, myInnersStrategy, myResult, access, innerName, isAnonymousInner, isLocalClassInner)); + StubBuildingVisitor visitor = + new StubBuildingVisitor<>(innerClass, myInnersStrategy, myResult, access, innerName, isAnonymousInner, isLocalClassInner); + visitor.myNoAnnotationOffsets = myNoAnnotationOffsets; + myInnersStrategy.accept(innerClass, visitor); } } } @@ -388,7 +393,7 @@ public class StubBuildingVisitor extends ClassVisitor { newReferenceList(JavaStubElementTypes.THROWS_LIST, stub, ArrayUtil.toStringArray(info.throwTypes)); int localVarIgnoreCount = isEnumConstructor ? 3 : isStatic ? 0 : 1; - int paramIgnoreCount = isEnumConstructor ? 2 : isInnerClassConstructor ? 1 : 0; + int paramIgnoreCount = myNoAnnotationOffsets ? 0 : isEnumConstructor ? 2 : isInnerClassConstructor ? 1 : 0; return new MethodAnnotationCollectingVisitor(stub, modList, localVarIgnoreCount, paramIgnoreCount, paramCount, paramStubs, myMapping); }