From 2ab68d53fae031ce9688faa5d88bf7d085f9b879 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 6 Apr 2016 14:48:31 +0300 Subject: [PATCH] J2K KotlinJvmBinaryClass & AnnotationAndConstantLoader: convert --- .../incremental/LocalFileKotlinClass.kt | 3 +- .../load/kotlin/VirtualFileKotlinClass.kt | 3 +- .../kotlin/codegen/InlineTestUtil.kt | 3 +- ...tBinaryClassAnnotationAndConstantLoader.kt | 18 ++-- .../load/kotlin/KotlinJvmBinaryClass.kt | 61 +++++------- .../load/kotlin/reflect/ReflectKotlinClass.kt | 11 ++- .../AnnotationAndConstantLoader.kt | 98 ++++++++----------- .../AnnotationAndConstantLoaderImpl.kt | 4 +- .../AnnotationLoaderForStubBuilderImpl.kt | 4 +- 9 files changed, 93 insertions(+), 112 deletions(-) diff --git a/build-common/src/org/jetbrains/kotlin/incremental/LocalFileKotlinClass.kt b/build-common/src/org/jetbrains/kotlin/incremental/LocalFileKotlinClass.kt index e94c8a3c101..1c7ecab6ca1 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/LocalFileKotlinClass.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/LocalFileKotlinClass.kt @@ -42,7 +42,8 @@ class LocalFileKotlinClass private constructor( val className: JvmClassName by lazy { JvmClassName.byClassId(classId) } - override fun getLocation(): String = file.absolutePath + override val location: String + get() = file.absolutePath public override fun getFileContents(): ByteArray = fileContents diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClass.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClass.kt index 16fb8de8dfe..31db64c4ed5 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClass.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClass.kt @@ -33,7 +33,8 @@ class VirtualFileKotlinClass private constructor( innerClasses: FileBasedKotlinClass.InnerClassesInfo ) : FileBasedKotlinClass(className, classHeader, innerClasses) { - override fun getLocation() = file.path + override val location: String + get() = file.path override fun getFileContents(): ByteArray { try { diff --git a/compiler/tests-common/org/jetbrains/kotlin/codegen/InlineTestUtil.kt b/compiler/tests-common/org/jetbrains/kotlin/codegen/InlineTestUtil.kt index 07819129d59..ebac772e89a 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/codegen/InlineTestUtil.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/codegen/InlineTestUtil.kt @@ -182,7 +182,8 @@ object InlineTestUtil { val klass = FileBasedKotlinClass.create(file.asByteArray()) { className, classHeader, innerClasses -> object : FileBasedKotlinClass(className, classHeader, innerClasses) { - override fun getLocation(): String = throw UnsupportedOperationException() + override val location: String + get() = throw UnsupportedOperationException() override fun getFileContents(): ByteArray = throw UnsupportedOperationException() override fun hashCode(): Int = throw UnsupportedOperationException() override fun equals(other: Any?): Boolean = throw UnsupportedOperationException() diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt index a0b39a3ea43..d57e177e2f9 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt @@ -146,14 +146,14 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader { - val methodSignature = getCallableSignature(message, container.nameResolver, container.typeTable, kind) + val methodSignature = getCallableSignature(callableProto, container.nameResolver, container.typeTable, kind) if (methodSignature != null) { - val index = parameterIndex + computeJvmParameterIndexShift(container, message) + val index = parameterIndex + computeJvmParameterIndexShift(container, callableProto) val paramSignature = MemberSignature.fromMethodSignatureAndParameterIndex(methodSignature, index) return findClassAndLoadMemberAnnotations(container, paramSignature) } @@ -176,10 +176,10 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader { - val methodSignature = getCallableSignature(message, container.nameResolver, container.typeTable, kind) + val methodSignature = getCallableSignature(proto, container.nameResolver, container.typeTable, kind) if (methodSignature != null) { val paramSignature = MemberSignature.fromMethodSignatureAndParameterIndex(methodSignature, 0) return findClassAndLoadMemberAnnotations(container, paramSignature) @@ -188,12 +188,12 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader { - return type.getExtension(JvmProtoBuf.typeAnnotation).map { loadTypeAnnotation(it, nameResolver) } + override fun loadTypeAnnotations(proto: ProtoBuf.Type, nameResolver: NameResolver): List { + return proto.getExtension(JvmProtoBuf.typeAnnotation).map { loadTypeAnnotation(it, nameResolver) } } - override fun loadTypeParameterAnnotations(typeParameter: ProtoBuf.TypeParameter, nameResolver: NameResolver): List { - return typeParameter.getExtension(JvmProtoBuf.typeParameterAnnotation).map { loadTypeAnnotation(it, nameResolver) } + override fun loadTypeParameterAnnotations(proto: ProtoBuf.TypeParameter, nameResolver: NameResolver): List { + return proto.getExtension(JvmProtoBuf.typeParameterAnnotation).map { loadTypeAnnotation(it, nameResolver) } } override fun loadPropertyConstant(container: ProtoContainer, proto: ProtoBuf.Property, expectedType: KotlinType): C? { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt index bb0ac876152..d5841b7d3ed 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt @@ -14,74 +14,63 @@ * limitations under the License. */ -package org.jetbrains.kotlin.load.kotlin; +package org.jetbrains.kotlin.load.kotlin -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.descriptors.SourceElement; -import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader; -import org.jetbrains.kotlin.name.ClassId; -import org.jetbrains.kotlin.name.Name; +import org.jetbrains.kotlin.descriptors.SourceElement +import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.Name -public interface KotlinJvmBinaryClass { - @NotNull - ClassId getClassId(); +interface KotlinJvmBinaryClass { + val classId: ClassId /** * @return path to the class file (to be reported to the user upon error) */ - @NotNull - String getLocation(); + val location: String - void loadClassAnnotations(@NotNull AnnotationVisitor visitor); + fun loadClassAnnotations(visitor: AnnotationVisitor) - void visitMembers(@NotNull MemberVisitor visitor); + fun visitMembers(visitor: MemberVisitor) - @NotNull - KotlinClassHeader getClassHeader(); + val classHeader: KotlinClassHeader interface MemberVisitor { // TODO: abstract signatures for methods and fields instead of ASM 'desc' strings? - @Nullable - MethodAnnotationVisitor visitMethod(@NotNull Name name, @NotNull String desc); + fun visitMethod(name: Name, desc: String): MethodAnnotationVisitor? - @Nullable - AnnotationVisitor visitField(@NotNull Name name, @NotNull String desc, @Nullable Object initializer); + fun visitField(name: Name, desc: String, initializer: Any?): AnnotationVisitor? } interface AnnotationVisitor { - @Nullable - AnnotationArgumentVisitor visitAnnotation(@NotNull ClassId classId, @NotNull SourceElement source); + fun visitAnnotation(classId: ClassId, source: SourceElement): AnnotationArgumentVisitor? - void visitEnd(); + fun visitEnd() } - interface MethodAnnotationVisitor extends AnnotationVisitor { - @Nullable - AnnotationArgumentVisitor visitParameterAnnotation(int index, @NotNull ClassId classId, @NotNull SourceElement source); + interface MethodAnnotationVisitor : AnnotationVisitor { + fun visitParameterAnnotation(index: Int, classId: ClassId, source: SourceElement): AnnotationArgumentVisitor? } interface AnnotationArgumentVisitor { // TODO: class literals - void visit(@Nullable Name name, @Nullable Object value); + fun visit(name: Name?, value: Any?) - void visitEnum(@NotNull Name name, @NotNull ClassId enumClassId, @NotNull Name enumEntryName); + fun visitEnum(name: Name, enumClassId: ClassId, enumEntryName: Name) - @Nullable - AnnotationArgumentVisitor visitAnnotation(@NotNull Name name, @NotNull ClassId classId); + fun visitAnnotation(name: Name, classId: ClassId): AnnotationArgumentVisitor? - @Nullable - AnnotationArrayArgumentVisitor visitArray(@NotNull Name name); + fun visitArray(name: Name): AnnotationArrayArgumentVisitor? - void visitEnd(); + fun visitEnd() } interface AnnotationArrayArgumentVisitor { - void visit(@Nullable Object value); + fun visit(value: Any?) - void visitEnum(@NotNull ClassId enumClassId, @NotNull Name enumEntryName); + fun visitEnum(enumClassId: ClassId, enumEntryName: Name) - void visitEnd(); + fun visitEnd() } } diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/ReflectKotlinClass.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/ReflectKotlinClass.kt index 38455677731..df71b7e6d3d 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/ReflectKotlinClass.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/ReflectKotlinClass.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.load.java.structure.reflect.isEnumClassOrSpecialized import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.kotlin.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import java.lang.reflect.Constructor import java.lang.reflect.Field @@ -41,7 +42,7 @@ private val TYPES_ELIGIBLE_FOR_SIMPLE_VISIT = setOf>( class ReflectKotlinClass private constructor( val klass: Class<*>, - private val classHeader: KotlinClassHeader + override val classHeader: KotlinClassHeader ) : KotlinJvmBinaryClass { companion object Factory { @@ -53,11 +54,11 @@ class ReflectKotlinClass private constructor( } } - override fun getLocation() = klass.name.replace('.', '/') + ".class" + override val location: String + get() = klass.name.replace('.', '/') + ".class" - override fun getClassId() = klass.classId - - override fun getClassHeader() = classHeader + override val classId: ClassId + get() = klass.classId override fun loadClassAnnotations(visitor: KotlinJvmBinaryClass.AnnotationVisitor) { ReflectClassStructure.loadClassAnnotations(klass, visitor) diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoader.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoader.kt index c8c1f8ca94a..4d1dda930e2 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoader.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoader.kt @@ -14,70 +14,58 @@ * limitations under the License. */ -package org.jetbrains.kotlin.serialization.deserialization; +package org.jetbrains.kotlin.serialization.deserialization -import com.google.protobuf.MessageLite; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.serialization.ProtoBuf; -import org.jetbrains.kotlin.types.KotlinType; - -import java.util.List; +import com.google.protobuf.MessageLite +import org.jetbrains.kotlin.serialization.ProtoBuf +import org.jetbrains.kotlin.types.KotlinType // The MessageLite instance everywhere should be Constructor, Function or Property // TODO: simplify this interface -public interface AnnotationAndConstantLoader { - @NotNull - List loadClassAnnotations( - @NotNull ProtoBuf.Class classProto, - @NotNull NameResolver nameResolver - ); +interface AnnotationAndConstantLoader { + fun loadClassAnnotations( + classProto: ProtoBuf.Class, + nameResolver: NameResolver + ): List - @NotNull - List loadCallableAnnotations( - @NotNull ProtoContainer container, - @NotNull MessageLite message, - @NotNull AnnotatedCallableKind kind - ); + fun loadCallableAnnotations( + container: ProtoContainer, + proto: MessageLite, + kind: AnnotatedCallableKind + ): List - @NotNull - List loadEnumEntryAnnotations( - @NotNull ProtoContainer container, - @NotNull ProtoBuf.EnumEntry proto - ); + fun loadEnumEntryAnnotations( + container: ProtoContainer, + proto: ProtoBuf.EnumEntry + ): List - @NotNull - List loadValueParameterAnnotations( - @NotNull ProtoContainer container, - @NotNull MessageLite message, - @NotNull AnnotatedCallableKind kind, - int parameterIndex, - @NotNull ProtoBuf.ValueParameter proto - ); + fun loadValueParameterAnnotations( + container: ProtoContainer, + callableProto: MessageLite, + kind: AnnotatedCallableKind, + parameterIndex: Int, + proto: ProtoBuf.ValueParameter + ): List - @NotNull - List loadExtensionReceiverParameterAnnotations( - @NotNull ProtoContainer container, - @NotNull MessageLite message, - @NotNull AnnotatedCallableKind kind - ); + fun loadExtensionReceiverParameterAnnotations( + container: ProtoContainer, + proto: MessageLite, + kind: AnnotatedCallableKind + ): List - @NotNull - List loadTypeAnnotations( - @NotNull ProtoBuf.Type type, - @NotNull NameResolver nameResolver - ); + fun loadTypeAnnotations( + proto: ProtoBuf.Type, + nameResolver: NameResolver + ): List - @NotNull - List loadTypeParameterAnnotations( - @NotNull ProtoBuf.TypeParameter typeParameter, - @NotNull NameResolver nameResolver - ); + fun loadTypeParameterAnnotations( + proto: ProtoBuf.TypeParameter, + nameResolver: NameResolver + ): List - @Nullable - C loadPropertyConstant( - @NotNull ProtoContainer container, - @NotNull ProtoBuf.Property proto, - @NotNull KotlinType expectedType - ); + fun loadPropertyConstant( + container: ProtoContainer, + proto: ProtoBuf.Property, + expectedType: KotlinType + ): C? } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoaderImpl.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoaderImpl.kt index a132a26f36f..410f1fa441a 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoaderImpl.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoaderImpl.kt @@ -64,7 +64,7 @@ class AnnotationAndConstantLoaderImpl( override fun loadValueParameterAnnotations( container: ProtoContainer, - message: MessageLite, + callableProto: MessageLite, kind: AnnotatedCallableKind, parameterIndex: Int, proto: ProtoBuf.ValueParameter @@ -75,7 +75,7 @@ class AnnotationAndConstantLoaderImpl( override fun loadExtensionReceiverParameterAnnotations( container: ProtoContainer, - message: MessageLite, + proto: MessageLite, kind: AnnotatedCallableKind ): List = emptyList() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/AnnotationLoaderForStubBuilderImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/AnnotationLoaderForStubBuilderImpl.kt index bdfc015941b..a62d52ce181 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/AnnotationLoaderForStubBuilderImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/AnnotationLoaderForStubBuilderImpl.kt @@ -57,7 +57,7 @@ class AnnotationLoaderForStubBuilderImpl( override fun loadValueParameterAnnotations( container: ProtoContainer, - message: MessageLite, + callableProto: MessageLite, kind: AnnotatedCallableKind, parameterIndex: Int, proto: ProtoBuf.ValueParameter @@ -66,7 +66,7 @@ class AnnotationLoaderForStubBuilderImpl( override fun loadExtensionReceiverParameterAnnotations( container: ProtoContainer, - message: MessageLite, + proto: MessageLite, kind: AnnotatedCallableKind ): List = emptyList()