From 9648c50ac99407a7b3c7622af4d0bad44b9517fe Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 12 Sep 2014 21:15:47 +0400 Subject: [PATCH] Minor, refactor FileBasedKotlinClass factory method --- .../lang/resolve/kotlin/FileBasedKotlinClass.java | 9 ++++++--- .../resolve/kotlin/VirtualFileKotlinClass.java | 15 ++++++++------- .../jet/jps/incremental/LocalFileKotlinClass.kt | 8 ++++---- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/FileBasedKotlinClass.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/FileBasedKotlinClass.java index 6023256d467..574825ab3a0 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/FileBasedKotlinClass.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/FileBasedKotlinClass.java @@ -16,8 +16,8 @@ package org.jetbrains.jet.lang.resolve.kotlin; -import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Ref; +import kotlin.Function2; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.java.JvmClassName; @@ -45,7 +45,10 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass { protected abstract byte[] getFileContents(); @Nullable - public static Pair readClassNameAndHeader(@NotNull byte[] fileContents) { + protected static T create( + @NotNull byte[] fileContents, + @NotNull Function2 factory + ) { final ReadKotlinClassHeaderAnnotationVisitor readHeaderVisitor = new ReadKotlinClassHeaderAnnotationVisitor(); final Ref classNameRef = Ref.create(); new ClassReader(fileContents).accept(new ClassVisitor(ASM5) { @@ -71,7 +74,7 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass { KotlinClassHeader header = readHeaderVisitor.createHeader(); if (header == null) return null; - return Pair.create(className, header); + return factory.invoke(className, header); } @NotNull diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileKotlinClass.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileKotlinClass.java index 755f762bc75..a4f4ed0c460 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileKotlinClass.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileKotlinClass.java @@ -18,8 +18,8 @@ package org.jetbrains.jet.lang.resolve.kotlin; import com.intellij.ide.highlighter.JavaClassFileType; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; +import kotlin.Function2; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.java.JvmClassName; @@ -39,14 +39,15 @@ public final class VirtualFileKotlinClass extends FileBasedKotlinClass { } @Nullable - /* package */ static VirtualFileKotlinClass create(@NotNull VirtualFile file) { + /* package */ static VirtualFileKotlinClass create(@NotNull final VirtualFile file) { assert file.getFileType() == JavaClassFileType.INSTANCE : "Trying to read binary data from a non-class file " + file; try { - byte[] fileContents = file.contentsToByteArray(); - Pair nameAndHeader = readClassNameAndHeader(fileContents); - if (nameAndHeader == null) return null; - - return new VirtualFileKotlinClass(file, nameAndHeader.first, nameAndHeader.second); + return create(file.contentsToByteArray(), new Function2() { + @Override + public VirtualFileKotlinClass invoke(JvmClassName name, KotlinClassHeader header) { + return new VirtualFileKotlinClass(file, name, header); + } + }); } catch (Throwable e) { LOG.warn(renderFileReadingErrorMessage(file)); diff --git a/jps-plugin/src/org/jetbrains/jet/jps/incremental/LocalFileKotlinClass.kt b/jps-plugin/src/org/jetbrains/jet/jps/incremental/LocalFileKotlinClass.kt index a5d69cd4f64..dd55ccff47a 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/incremental/LocalFileKotlinClass.kt +++ b/jps-plugin/src/org/jetbrains/jet/jps/incremental/LocalFileKotlinClass.kt @@ -31,10 +31,10 @@ class LocalFileKotlinClass private( class object { fun create(file: File): LocalFileKotlinClass? { val fileContents = file.readBytes() - val nameAndHeader = FileBasedKotlinClass.readClassNameAndHeader(fileContents) - if (nameAndHeader == null) return null - - return LocalFileKotlinClass(file, fileContents, nameAndHeader.first!!, nameAndHeader.second!!) + return FileBasedKotlinClass.create(fileContents) { + className, classHeader -> + LocalFileKotlinClass(file, fileContents, className, classHeader) + } } }