Loading of annotation class arguments from compiled classes

This commit is contained in:
Valentin Kipyatkov
2015-05-21 20:11:31 +03:00
parent b256329287
commit 281acb860e
4 changed files with 27 additions and 4 deletions
@@ -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
private fun enumEntryValue(enumClassId: ClassId, name: Name): CompileTimeConstant<*> {
val enumClass = resolveClass(enumClassId)
@@ -67,6 +67,9 @@ public interface KotlinJvmBinaryClass {
void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName);
@Nullable
AnnotationArgumentVisitor visitAnnotation(@NotNull Name name, @NotNull ClassId classId);
@Nullable
AnnotationArrayArgumentVisitor visitArray(@NotNull Name name);
@@ -149,6 +149,12 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
return null;
}
@Nullable
@Override
public AnnotationArgumentVisitor visitAnnotation(@NotNull Name name, @NotNull ClassId classId) {
return null;
}
@NotNull
private AnnotationArrayArgumentVisitor stringArrayVisitor() {
final List<String> strings = new ArrayList<String>(1);