void (String name, String outerName, String innerName, int access) { if (isSet(access, Opcodes.ACC_SYNTHETIC)) return; String jvmClassName = innerName; boolean isAnonymousInner = innerName == null; boolean isLocalClassInner = !isAnonymousInner && outerName == null; if (innerName == null || outerName == null) { int $index; if (myInternalName.equals(name) || ($index = name.lastIndexOf('$')) == -1) { return; } else if (isAnonymousInner) { jvmClassName = name.substring($index + 1); innerName = jvmClassName; outerName = name.substring(0, $index); } else { // isLocalClassInner outerName = name.substring(0, $index); jvmClassName = name.substring($index + 1); } } if (myParent instanceof PsiFileStub && myInternalName.equals(name)) { throw new OutOfOrderInnerClassException(); // our result is inner class } if (myInternalName.equals(outerName)) { T innerClass = myInnersStrategy.findInnerClass(jvmClassName, mySource); if (innerClass != null) { StubBuildingVisitor<T> visitor = new StubBuildingVisitor<>(innerClass, myInnersStrategy, myResult, access, innerName, isAnonymousInner, isLocalClassInner); myInnersStrategy.accept(innerClass, visitor); } } }