boolean (VirtualFile file, byte @Nullable [] content) { String name = file.getNameWithoutExtension(); int p = name.lastIndexOf('$', name.length() - 2); if (p <= 0) return false; Boolean isInner = IS_INNER_CLASS.get(file); if (isInner != null) return isInner; if (content == null) { try { content = file.contentsToByteArray(false); } catch (IOException e) { throw new RuntimeException(e); } } ClassReader reader = new ClassReader(content); final Ref<Boolean> ref = Ref.create(Boolean.FALSE); final String className = reader.getClassName(); reader.accept(new ClassVisitor(Opcodes.API_VERSION) { @Override public void visitOuterClass(String owner, String name, String desc) { ref.set(Boolean.TRUE); } @Override public void visitInnerClass(String name, String outer, String inner, int access) { if (className.equals(name)) { ref.set(Boolean.TRUE); } } }, EMPTY_ATTRIBUTES, ClassReader.SKIP_DEBUG | ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES); isInner = ref.get(); IS_INNER_CLASS.set(file, isInner); return isInner; }