From b4d9fb75d8d3555d2503bf6f973f70fe25435593 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 19 Sep 2013 18:16:25 +0400 Subject: [PATCH] Minor refactorings in KotlinClassFileHeader --- .../java/resolver/KotlinClassFileHeader.java | 43 ++++++------------- .../caches/JetFromJavaDescriptorHelper.java | 6 ++- .../jet/plugin/libraries/DecompiledUtils.java | 2 +- .../vfilefinder/KotlinClassFileIndex.java | 2 +- 4 files changed, 20 insertions(+), 33 deletions(-) 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 118aa9f0c22..9d7b4b52bbd 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 @@ -1,5 +1,6 @@ package org.jetbrains.jet.lang.resolve.java.resolver; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -7,9 +8,6 @@ import org.jetbrains.asm4.AnnotationVisitor; import org.jetbrains.asm4.ClassReader; import org.jetbrains.asm4.ClassVisitor; import org.jetbrains.asm4.Opcodes; -import org.jetbrains.jet.descriptors.serialization.ClassData; -import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil; -import org.jetbrains.jet.descriptors.serialization.PackageData; import org.jetbrains.jet.lang.resolve.java.AbiVersionUtil; import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; import org.jetbrains.jet.lang.resolve.java.JvmClassName; @@ -23,6 +21,8 @@ import static org.jetbrains.asm4.ClassReader.*; import static org.jetbrains.jet.lang.resolve.java.AbiVersionUtil.isAbiVersionCompatible; public final class KotlinClassFileHeader { + private static final Logger LOG = Logger.getInstance(KotlinClassFileHeader.class); + @NotNull public static KotlinClassFileHeader readKotlinHeaderFromClassFile(@NotNull VirtualFile virtualFile) { try { @@ -48,16 +48,16 @@ public final class KotlinClassFileHeader { @Nullable private final JvmClassName correspondingAnnotation; - HeaderType(@Nullable JvmClassName annotation) { + private HeaderType(@Nullable JvmClassName annotation) { correspondingAnnotation = annotation; } - boolean isValidAnnotation() { + private boolean isValidAnnotation() { return this == CLASS || this == PACKAGE; } @NotNull - public static HeaderType byDescriptor(@NotNull String desc) { + private static HeaderType byDescriptor(@NotNull String desc) { for (HeaderType headerType : HeaderType.values()) { JvmClassName annotation = headerType.correspondingAnnotation; if (annotation == null) { @@ -76,9 +76,9 @@ public final class KotlinClassFileHeader { @Nullable private String[] annotationData = null; @NotNull - HeaderType type = HeaderType.NONE; + private HeaderType type = HeaderType.NONE; @Nullable - JvmClassName jvmClassName = null; + private JvmClassName jvmClassName = null; public int getVersion() { return version; @@ -89,10 +89,10 @@ public final class KotlinClassFileHeader { return type; } - /* - Checks that this is a header for compiled Kotlin file with correct abi version which can be processed by compiler or the IDE. + /** + * @return true if this is a header for compiled Kotlin file with correct abi version which can be processed by compiler or the IDE */ - public boolean isKotlinCompiledFile() { + public boolean isCompatibleKotlinCompiledFile() { return type.isValidAnnotation() && isAbiVersionCompatible(version); } @@ -105,27 +105,12 @@ public final class KotlinClassFileHeader { return jvmClassName.getFqName(); } + @Nullable public String[] getAnnotationData() { - assertDataRead(); - return annotationData; - } - - private void assertDataRead() { if (annotationData == null && type != HeaderType.NONE) { - throw new IllegalStateException("Data for annotations " + type.correspondingAnnotation + " was not read."); + LOG.error("Data for annotations " + type.correspondingAnnotation + " was not read."); } - } - - @NotNull - public ClassData readClassData() { - assert type == HeaderType.CLASS; - return JavaProtoBufUtil.readClassDataFrom(getAnnotationData()); - } - - @NotNull - public PackageData readPackageData() { - assert type == HeaderType.PACKAGE; - return JavaProtoBufUtil.readPackageDataFrom(getAnnotationData()); + return annotationData; } private class ReadDataFromAnnotationVisitor extends ClassVisitor { diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java index fe185cc0b39..dbfc745877e 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java @@ -103,14 +103,16 @@ public class JetFromJavaDescriptorHelper { private static ClassData getClassData(@NotNull PsiClass psiClass) { VirtualFile virtualFile = getVirtualFileForPsiClass(psiClass); if (virtualFile == null) return null; - return KotlinClassFileHeader.readKotlinHeaderFromClassFile(virtualFile).readClassData(); + String[] data = KotlinClassFileHeader.readKotlinHeaderFromClassFile(virtualFile).getAnnotationData(); + return data == null ? null : JavaProtoBufUtil.readClassDataFrom(data); } @Nullable private static PackageData getPackageData(@NotNull PsiClass psiClass) { VirtualFile virtualFile = getVirtualFileForPsiClass(psiClass); if (virtualFile == null) return null; - return KotlinClassFileHeader.readKotlinHeaderFromClassFile(virtualFile).readPackageData(); + String[] data = KotlinClassFileHeader.readKotlinHeaderFromClassFile(virtualFile).getAnnotationData(); + return data == null ? null : JavaProtoBufUtil.readPackageDataFrom(data); } //TODO: common utility diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.java b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.java index 4612b18b4dd..6ee53e6a665 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.java @@ -28,7 +28,7 @@ public final class DecompiledUtils { return false; } //TODO: check index - return KotlinClassFileHeader.readKotlinHeaderFromClassFile(file).isKotlinCompiledFile(); + return KotlinClassFileHeader.readKotlinHeaderFromClassFile(file).isCompatibleKotlinCompiledFile(); } private DecompiledUtils() { diff --git a/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java b/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java index 7bf53f38156..3a4a3aebf79 100644 --- a/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java +++ b/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java @@ -58,7 +58,7 @@ public final class KotlinClassFileIndex extends ScalarIndexExtension { public Map map(FileContent inputData) { try { KotlinClassFileHeader header = KotlinClassFileHeader.readKotlinHeaderFromClassFile(inputData.getFile()); - if (header.isKotlinCompiledFile()) { + if (header.isCompatibleKotlinCompiledFile()) { return Collections.singletonMap(header.getFqName(), null); } }