Optimization: do not read data from input streams, use contents cached in VFS

This commit is contained in:
Andrey Breslav
2013-09-24 17:06:56 -07:00
parent 70740b835c
commit 65b3d5eac5
2 changed files with 7 additions and 13 deletions
@@ -134,7 +134,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
private List<AnnotationDescriptor> loadClassAnnotationsFromFile(@NotNull VirtualFile virtualFile) throws IOException {
final List<AnnotationDescriptor> result = new ArrayList<AnnotationDescriptor>();
new ClassReader(virtualFile.getInputStream()).accept(new ClassVisitor(Opcodes.ASM4) {
new ClassReader(virtualFile.contentsToByteArray()).accept(new ClassVisitor(Opcodes.ASM4) {
@Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
return resolveAnnotation(desc, result);
@@ -298,7 +298,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
final Map<MemberSignature, List<AnnotationDescriptor>> memberAnnotations =
new HashMap<MemberSignature, List<AnnotationDescriptor>>();
new ClassReader(file.getInputStream()).accept(new ClassVisitor(Opcodes.ASM4) {
new ClassReader(file.contentsToByteArray()).accept(new ClassVisitor(Opcodes.ASM4) {
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
final MemberSignature methodSignature = MemberSignature.fromMethodNameAndDesc(name, desc);
@@ -16,7 +16,6 @@ import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
@@ -27,16 +26,11 @@ public final class KotlinClassFileHeader {
@NotNull
public static KotlinClassFileHeader readKotlinHeaderFromClassFile(@NotNull VirtualFile virtualFile) {
try {
InputStream inputStream = virtualFile.getInputStream();
try {
ClassReader reader = new ClassReader(inputStream);
KotlinClassFileHeader classFileData = new KotlinClassFileHeader();
reader.accept(classFileData.new ReadDataFromAnnotationVisitor(), SKIP_CODE | SKIP_FRAMES | SKIP_DEBUG);
return classFileData;
}
finally {
inputStream.close();
}
byte[] bytes = virtualFile.contentsToByteArray();
ClassReader reader = new ClassReader(bytes);
KotlinClassFileHeader classFileData = new KotlinClassFileHeader();
reader.accept(classFileData.new ReadDataFromAnnotationVisitor(), SKIP_CODE | SKIP_FRAMES | SKIP_DEBUG);
return classFileData;
}
catch (IOException e) {
throw new RuntimeException(e);