From 65b3d5eac548befb6735ed68875e76ab1dac4f84 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 24 Sep 2013 17:06:56 -0700 Subject: [PATCH] Optimization: do not read data from input streams, use contents cached in VFS --- .../AnnotationDescriptorDeserializer.java | 4 ++-- .../java/resolver/KotlinClassFileHeader.java | 16 +++++----------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/AnnotationDescriptorDeserializer.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/AnnotationDescriptorDeserializer.java index 192ca24507b..d4116a37095 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/AnnotationDescriptorDeserializer.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/AnnotationDescriptorDeserializer.java @@ -134,7 +134,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer private List loadClassAnnotationsFromFile(@NotNull VirtualFile virtualFile) throws IOException { final List result = new ArrayList(); - 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> memberAnnotations = new HashMap>(); - 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); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/KotlinClassFileHeader.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/KotlinClassFileHeader.java index 77d6121e907..118aa9f0c22 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/KotlinClassFileHeader.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/KotlinClassFileHeader.java @@ -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);