Loading of annotation class arguments from compiled classes
This commit is contained in:
+7
-4
@@ -26,10 +26,7 @@ import org.jetbrains.kotlin.load.kotlin.header.ReadKotlinClassHeaderAnnotationVi
|
|||||||
import org.jetbrains.kotlin.name.ClassId;
|
import org.jetbrains.kotlin.name.ClassId;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.org.objectweb.asm.ClassReader;
|
import org.jetbrains.org.objectweb.asm.*;
|
||||||
import org.jetbrains.org.objectweb.asm.ClassVisitor;
|
|
||||||
import org.jetbrains.org.objectweb.asm.FieldVisitor;
|
|
||||||
import org.jetbrains.org.objectweb.asm.MethodVisitor;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -187,6 +184,12 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.jetbrains.org.objectweb.asm.AnnotationVisitor visitAnnotation(String name, @NotNull String desc) {
|
||||||
|
AnnotationArgumentVisitor arv = v.visitAnnotation(Name.guess(name), resolveNameByDesc(desc, innerClasses));
|
||||||
|
return arv == null ? null : convertAnnotationVisitor(arv, innerClasses);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitEnum(String name, @NotNull String desc, @NotNull String value) {
|
public void visitEnum(String name, @NotNull String desc, @NotNull String value) {
|
||||||
v.visitEnum(Name.identifier(name), resolveNameByDesc(desc, innerClasses), Name.identifier(value));
|
v.visitEnum(Name.identifier(name), resolveNameByDesc(desc, innerClasses), Name.identifier(value));
|
||||||
|
|||||||
+11
@@ -113,6 +113,17 @@ public class BinaryClassAnnotationAndConstantLoaderImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitAnnotation(name: Name, classId: ClassId): KotlinJvmBinaryClass.AnnotationArgumentVisitor? {
|
||||||
|
val list = ArrayList<AnnotationDescriptor>()
|
||||||
|
val visitor = loadAnnotation(classId, list)!!
|
||||||
|
return object: KotlinJvmBinaryClass.AnnotationArgumentVisitor by visitor {
|
||||||
|
override fun visitEnd() {
|
||||||
|
visitor.visitEnd()
|
||||||
|
setArgumentValueByName(name, AnnotationValue(list.single()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NOTE: see analogous code in AnnotationDeserializer
|
// NOTE: see analogous code in AnnotationDeserializer
|
||||||
private fun enumEntryValue(enumClassId: ClassId, name: Name): CompileTimeConstant<*> {
|
private fun enumEntryValue(enumClassId: ClassId, name: Name): CompileTimeConstant<*> {
|
||||||
val enumClass = resolveClass(enumClassId)
|
val enumClass = resolveClass(enumClassId)
|
||||||
|
|||||||
+3
@@ -67,6 +67,9 @@ public interface KotlinJvmBinaryClass {
|
|||||||
|
|
||||||
void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName);
|
void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName);
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
AnnotationArgumentVisitor visitAnnotation(@NotNull Name name, @NotNull ClassId classId);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
AnnotationArrayArgumentVisitor visitArray(@NotNull Name name);
|
AnnotationArrayArgumentVisitor visitArray(@NotNull Name name);
|
||||||
|
|
||||||
|
|||||||
+6
@@ -149,6 +149,12 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public AnnotationArgumentVisitor visitAnnotation(@NotNull Name name, @NotNull ClassId classId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private AnnotationArrayArgumentVisitor stringArrayVisitor() {
|
private AnnotationArrayArgumentVisitor stringArrayVisitor() {
|
||||||
final List<String> strings = new ArrayList<String>(1);
|
final List<String> strings = new ArrayList<String>(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user