[java] inner class detection: optimization

This commit is contained in:
Roman Shevchenko
2016-01-11 13:11:19 +01:00
parent 439a8e0e8c
commit 1bfa1b23ce
@@ -29,10 +29,7 @@ import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.compiled.ClsFileImpl;
import com.intellij.psi.impl.file.PsiBinaryFileImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.org.objectweb.asm.ClassReader;
import org.jetbrains.org.objectweb.asm.ClassVisitor;
import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.Opcodes;
import org.jetbrains.org.objectweb.asm.*;
/**
* @author max
@@ -79,7 +76,7 @@ public class ClassFileViewProvider extends SingleRootFileViewProvider {
final Ref<Boolean> ref = Ref.create(Boolean.FALSE);
try {
new MyClassReader(file.contentsToByteArray(false)).accept(new ClassVisitor(Opcodes.ASM5) {
new ClassReader(file.contentsToByteArray(false)).accept(new ClassVisitor(Opcodes.ASM5) {
@Override
public void visitOuterClass(String owner, String name, String desc) {
ref.set(Boolean.TRUE);
@@ -94,6 +91,11 @@ public class ClassFileViewProvider extends SingleRootFileViewProvider {
throw new ProcessCanceledException();
}
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
throw new ProcessCanceledException();
}
}, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
}
catch (ProcessCanceledException ignored) { }
@@ -111,15 +113,4 @@ public class ClassFileViewProvider extends SingleRootFileViewProvider {
public SingleRootFileViewProvider createCopy(@NotNull VirtualFile copy) {
return new ClassFileViewProvider(getManager(), copy, false);
}
private static class MyClassReader extends ClassReader {
public MyClassReader(byte[] b) {
super(b);
}
@Override
protected Label readLabel(int offset, Label[] labels) {
return null;
}
}
}