Added classVersion to KotlinJvmBinaryClass
This commit is contained in:
+12
-3
@@ -17,7 +17,7 @@
|
||||
package org.jetbrains.kotlin.load.kotlin;
|
||||
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import kotlin.jvm.functions.Function3;
|
||||
import kotlin.jvm.functions.Function4;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement;
|
||||
@@ -38,15 +38,18 @@ import static org.jetbrains.org.objectweb.asm.Opcodes.ASM5;
|
||||
|
||||
public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
|
||||
private final ClassId classId;
|
||||
private final int classVersion;
|
||||
private final KotlinClassHeader classHeader;
|
||||
private final InnerClassesInfo innerClasses;
|
||||
|
||||
protected FileBasedKotlinClass(
|
||||
@NotNull ClassId classId,
|
||||
int classVersion,
|
||||
@NotNull KotlinClassHeader classHeader,
|
||||
@NotNull InnerClassesInfo innerClasses
|
||||
) {
|
||||
this.classId = classId;
|
||||
this.classVersion = classVersion;
|
||||
this.classHeader = classHeader;
|
||||
this.innerClasses = innerClasses;
|
||||
}
|
||||
@@ -84,15 +87,17 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
|
||||
@Nullable
|
||||
public static <T extends FileBasedKotlinClass> T create(
|
||||
@NotNull byte[] fileContents,
|
||||
@NotNull Function3<ClassId, KotlinClassHeader, InnerClassesInfo, T> factory
|
||||
@NotNull Function4<ClassId, Integer, KotlinClassHeader, InnerClassesInfo, T> factory
|
||||
) {
|
||||
final ReadKotlinClassHeaderAnnotationVisitor readHeaderVisitor = new ReadKotlinClassHeaderAnnotationVisitor();
|
||||
final Ref<String> classNameRef = Ref.create();
|
||||
final Ref<Integer> classVersion = Ref.create();
|
||||
final InnerClassesInfo innerClasses = new InnerClassesInfo();
|
||||
new ClassReader(fileContents).accept(new ClassVisitor(ASM5) {
|
||||
@Override
|
||||
public void visit(int version, int access, @NotNull String name, String signature, String superName, String[] interfaces) {
|
||||
classNameRef.set(name);
|
||||
classVersion.set(version);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -118,7 +123,7 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
|
||||
if (header == null) return null;
|
||||
|
||||
ClassId id = resolveNameByInternalName(className, innerClasses);
|
||||
return factory.invoke(id, header, innerClasses);
|
||||
return factory.invoke(id, classVersion.get(), header, innerClasses);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -127,6 +132,10 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
|
||||
return classId;
|
||||
}
|
||||
|
||||
public int getClassVersion() {
|
||||
return classVersion;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public KotlinClassHeader getClassHeader() {
|
||||
|
||||
+5
-4
@@ -29,9 +29,10 @@ import java.io.IOException
|
||||
class VirtualFileKotlinClass private constructor(
|
||||
val file: VirtualFile,
|
||||
className: ClassId,
|
||||
classVersion: Int,
|
||||
classHeader: KotlinClassHeader,
|
||||
innerClasses: FileBasedKotlinClass.InnerClassesInfo
|
||||
) : FileBasedKotlinClass(className, classHeader, innerClasses) {
|
||||
innerClasses: InnerClassesInfo
|
||||
) : FileBasedKotlinClass(className, classVersion, classHeader, innerClasses) {
|
||||
|
||||
override val location: String
|
||||
get() = file.path
|
||||
@@ -63,8 +64,8 @@ class VirtualFileKotlinClass private constructor(
|
||||
val byteContent = fileContent ?: file.contentsToByteArray(false)
|
||||
if (!byteContent.isEmpty()) {
|
||||
return@time FileBasedKotlinClass.create(byteContent) {
|
||||
name, header, innerClasses ->
|
||||
VirtualFileKotlinClass(file, name, header, innerClasses)
|
||||
name, classVersion, header, innerClasses ->
|
||||
VirtualFileKotlinClass(file, name, classVersion, header, innerClasses)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user