Do not write old metadata annotations to bytecode

This commit is contained in:
Alexander Udalov
2016-01-26 17:44:37 +03:00
parent ba80e8ba81
commit 5de1cf3bb4
24 changed files with 45 additions and 177 deletions
@@ -63,7 +63,6 @@ import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isBoolean;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isPrimitiveClass;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KOTLIN_SYNTHETIC_CLASS;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
import static org.jetbrains.kotlin.types.TypeUtils.isNullableType;
@@ -781,28 +780,20 @@ public class AsmUtil {
}
}
public static void writeKotlinSyntheticClassAnnotation(@NotNull ClassBuilder v, @NotNull GenerationState state) {
AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(KOTLIN_SYNTHETIC_CLASS), true);
JvmCodegenUtil.writeAbiVersion(av);
av.visitEnd();
}
public static void writeAnnotationData(
@NotNull AnnotationVisitor av,
@NotNull DescriptorSerializer serializer,
@NotNull MessageLite message,
boolean old
@NotNull MessageLite message
) {
byte[] bytes = serializer.serialize(message);
AnnotationVisitor data = av.visitArray(old ? JvmAnnotationNames.DATA_FIELD_NAME : JvmAnnotationNames.METADATA_DATA_FIELD_NAME);
AnnotationVisitor data = av.visitArray(JvmAnnotationNames.METADATA_DATA_FIELD_NAME);
for (String string : BitEncoding.encodeBytes(bytes)) {
data.visit(null, string);
}
data.visitEnd();
AnnotationVisitor strings = av.visitArray(
old ? JvmAnnotationNames.STRINGS_FIELD_NAME : JvmAnnotationNames.METADATA_STRINGS_FIELD_NAME
);
AnnotationVisitor strings = av.visitArray(JvmAnnotationNames.METADATA_STRINGS_FIELD_NAME);
for (String string : ((JvmStringTable) serializer.getStringTable()).getStrings()) {
strings.visit(null, string);
}
@@ -34,7 +34,6 @@ import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader;
import org.jetbrains.kotlin.psi.KtElement;
import org.jetbrains.kotlin.resolve.BindingContext;
@@ -60,7 +59,6 @@ import java.util.List;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.ExpressionCodegen.generateClassLiteralReference;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConst;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.writeAbiVersion;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.CLOSURE;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClass;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
@@ -219,9 +217,7 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
}
@Override
protected void generateKotlinAnnotation() {
writeKotlinSyntheticClassAnnotation(v, state);
protected void generateKotlinMetadataAnnotation() {
final DescriptorSerializer serializer =
DescriptorSerializer.createForLambda(new JvmSerializerExtension(v.getSerializationBindings(), state));
@@ -230,15 +226,10 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.SYNTHETIC_CLASS, new Function1<AnnotationVisitor, Unit>() {
@Override
public Unit invoke(AnnotationVisitor av) {
writeAnnotationData(av, serializer, functionProto, false);
writeAnnotationData(av, serializer, functionProto);
return Unit.INSTANCE;
}
});
AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_FUNCTION), true);
writeAbiVersion(av);
writeAnnotationData(av, serializer, functionProto, true);
av.visitEnd();
}
@Override
@@ -41,7 +41,6 @@ import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor;
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader;
import org.jetbrains.kotlin.name.FqName;
@@ -248,7 +247,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
@Override
protected void generateKotlinAnnotation() {
protected void generateKotlinMetadataAnnotation() {
final DescriptorSerializer serializer =
DescriptorSerializer.create(descriptor, new JvmSerializerExtension(v.getSerializationBindings(), state));
@@ -257,15 +256,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.CLASS, new Function1<AnnotationVisitor, Unit>() {
@Override
public Unit invoke(AnnotationVisitor av) {
writeAnnotationData(av, serializer, classProto, false);
writeAnnotationData(av, serializer, classProto);
return Unit.INSTANCE;
}
});
AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS), true);
writeAbiVersion(av);
writeAnnotationData(av, serializer, classProto, true);
av.visitEnd();
}
private void writeEnclosingMethod() {
@@ -146,11 +146,9 @@ class InterfaceImplBodyCodegen(
})
}
override fun generateKotlinAnnotation() {
override fun generateKotlinMetadataAnnotation() {
(v as InterfaceImplClassBuilder).stopCounting()
AsmUtil.writeKotlinSyntheticClassAnnotation(v, state)
writeSyntheticClassMetadata(v);
}
@@ -30,8 +30,6 @@ import org.jetbrains.kotlin.codegen.context.MethodContext;
import org.jetbrains.kotlin.codegen.context.RootContext;
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion;
import org.jetbrains.kotlin.load.kotlin.ModuleMapping;
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt;
import org.jetbrains.kotlin.psi.KtFile;
@@ -43,7 +41,6 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.inline.InlineUtil;
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor;
import org.jetbrains.kotlin.types.KotlinType;
import org.jetbrains.org.objectweb.asm.AnnotationVisitor;
import java.io.File;
@@ -220,8 +217,4 @@ public class JvmCodegenUtil {
public static String getMappingFileName(@NotNull String moduleName) {
return "META-INF/" + moduleName + "." + ModuleMapping.MAPPING_FILE_EXT;
}
public static void writeAbiVersion(@NotNull AnnotationVisitor av) {
av.visit(JvmAnnotationNames.VERSION_FIELD_NAME, JvmMetadataVersion.INSTANCE.toArray());
}
}
@@ -119,7 +119,7 @@ public abstract class MemberCodegen<T extends KtElement/* TODO: & JetDeclaration
generateSyntheticParts();
if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
generateKotlinAnnotation();
generateKotlinMetadataAnnotation();
}
done();
@@ -132,7 +132,7 @@ public abstract class MemberCodegen<T extends KtElement/* TODO: & JetDeclaration
protected void generateSyntheticParts() {
}
protected abstract void generateKotlinAnnotation();
protected abstract void generateKotlinMetadataAnnotation();
@Nullable
protected ClassDescriptor classForInnerClassRecord() {
@@ -49,7 +49,6 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor
import org.jetbrains.org.objectweb.asm.AnnotationVisitor
import org.jetbrains.org.objectweb.asm.MethodVisitor
import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.Type
@@ -274,31 +273,20 @@ class MultifileClassCodegen(
if (state.classBuilderMode != ClassBuilderMode.FULL) return
if (files.any { it.isScript }) return
val partInternalNames = partFqNames.map(AsmUtil::internalNameByFqNameWithoutInnerClasses).sorted()
fun writePartNames(av: AnnotationVisitor, fieldName: String) {
val arv = av.visitArray(fieldName)
for (internalName in partInternalNames) {
writeKotlinMetadata(classBuilder, KotlinClassHeader.Kind.MULTIFILE_CLASS) { av ->
val arv = av.visitArray(JvmAnnotationNames.METADATA_DATA_FIELD_NAME)
for (internalName in partFqNames.map(AsmUtil::internalNameByFqNameWithoutInnerClasses).sorted()) {
arv.visit(null, internalName)
}
arv.visitEnd()
}
writeKotlinMetadata(classBuilder, KotlinClassHeader.Kind.MULTIFILE_CLASS) { av ->
writePartNames(av, JvmAnnotationNames.METADATA_DATA_FIELD_NAME)
}
val av = classBuilder.newAnnotation(AsmUtil.asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_MULTIFILE_CLASS), true)
JvmCodegenUtil.writeAbiVersion(av)
writePartNames(av, JvmAnnotationNames.FILE_PART_CLASS_NAMES_FIELD_NAME)
av.visitEnd()
}
private fun createCodegenForPartOfMultifileFacade(facadeContext: FieldOwnerContext<*>): MemberCodegen<KtFile> =
object : MemberCodegen<KtFile>(state, null, facadeContext, null, classBuilder) {
override fun generateDeclaration() = throw UnsupportedOperationException()
override fun generateBody() = throw UnsupportedOperationException()
override fun generateKotlinAnnotation() = throw UnsupportedOperationException()
override fun generateKotlinMetadataAnnotation() = throw UnsupportedOperationException()
}
fun done() {
@@ -69,7 +69,7 @@ class MultifileClassPartCodegen(
}
}
override fun generateKotlinAnnotation() {
override fun generateKotlinMetadataAnnotation() {
val members = ArrayList<DeclarationDescriptor>()
for (declaration in element.declarations) {
when (declaration) {
@@ -88,15 +88,9 @@ class MultifileClassPartCodegen(
val packageProto = serializer.packagePartProto(members).build()
writeKotlinMetadata(v, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART) { av ->
AsmUtil.writeAnnotationData(av, serializer, packageProto, false)
AsmUtil.writeAnnotationData(av, serializer, packageProto)
av.visit(JvmAnnotationNames.METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME, multifileClassType.internalName)
}
val av = v.newAnnotation(AsmUtil.asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_MULTIFILE_CLASS_PART), true)
JvmCodegenUtil.writeAbiVersion(av)
AsmUtil.writeAnnotationData(av, serializer, packageProto, true)
av.visit(JvmAnnotationNames.MULTIFILE_CLASS_NAME_FIELD_NAME, multifileClassType.internalName)
av.visitEnd()
}
override fun generateSyntheticParts() {
@@ -31,7 +31,6 @@ import org.jetbrains.kotlin.descriptors.VariableDescriptor;
import org.jetbrains.kotlin.descriptors.annotations.Annotated;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingContext;
@@ -43,9 +42,7 @@ import org.jetbrains.org.objectweb.asm.Type;
import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.kotlin.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses;
import static org.jetbrains.kotlin.codegen.AsmUtil.writeAnnotationData;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.writeAbiVersion;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public class PackagePartCodegen extends MemberCodegen<KtFile> {
@@ -109,7 +106,7 @@ public class PackagePartCodegen extends MemberCodegen<KtFile> {
}
@Override
protected void generateKotlinAnnotation() {
protected void generateKotlinMetadataAnnotation() {
List<DeclarationDescriptor> members = new ArrayList<DeclarationDescriptor>();
for (KtDeclaration declaration : element.getDeclarations()) {
if (declaration instanceof KtNamedFunction) {
@@ -128,15 +125,10 @@ public class PackagePartCodegen extends MemberCodegen<KtFile> {
WriteAnnotationUtilKt.writeKotlinMetadata(v, KotlinClassHeader.Kind.FILE_FACADE, new Function1<AnnotationVisitor, Unit>() {
@Override
public Unit invoke(AnnotationVisitor av) {
writeAnnotationData(av, serializer, packageProto, false);
writeAnnotationData(av, serializer, packageProto);
return Unit.INSTANCE;
}
});
AnnotationVisitor av = v.newAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_FILE_FACADE), true);
writeAbiVersion(av);
writeAnnotationData(av, serializer, packageProto, true);
av.visitEnd();
}
@Override
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.codegen.AsmUtil.method
import org.jetbrains.kotlin.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation
import org.jetbrains.kotlin.codegen.context.ClassContext
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.descriptors.*
@@ -158,9 +157,7 @@ class PropertyReferenceCodegen(
}
}
override fun generateKotlinAnnotation() {
writeKotlinSyntheticClassAnnotation(v, state)
override fun generateKotlinMetadataAnnotation() {
writeSyntheticClassMetadata(v)
}
@@ -39,7 +39,8 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import java.util.Collections;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.AsmUtil.NO_FLAG_PACKAGE_PRIVATE;
import static org.jetbrains.kotlin.codegen.AsmUtil.asmTypeByFqNameWithoutInnerClasses;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
@@ -94,8 +95,6 @@ public class SamWrapperCodegen {
);
cv.visitSource(file.getName(), null);
writeKotlinSyntheticClassAnnotation(cv, state);
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv);
// e.g. ASM type for Function2
@@ -104,7 +104,7 @@ public class ScriptCodegen extends MemberCodegen<KtScript> {
}
@Override
protected void generateKotlinAnnotation() {
protected void generateKotlinMetadataAnnotation() {
// TODO
}
@@ -425,7 +425,7 @@ public class InlineCodegen extends CallGenerator {
}
@Override
protected void generateKotlinAnnotation() {
protected void generateKotlinMetadataAnnotation() {
throw new IllegalStateException();
}
@@ -31,7 +31,6 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import java.util.List;
import java.util.Map;
import static org.jetbrains.kotlin.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
@@ -58,8 +57,6 @@ public class MappingClassesForWhenByEnumCodegen {
generateFields(cb, mappings);
generateInitialization(cb, mappings);
writeKotlinSyntheticClassAnnotation(cb, state);
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb);
cb.done();
@@ -1,5 +1,4 @@
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public final class Example {
private field prop2: int
private synthetic final @org.jetbrains.annotations.NotNull field prop: java.lang.String
@@ -1,5 +1,4 @@
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public final class A {
private final @AnnField @AnnParameterField @AnnTypeField field a: int
private final @AnnField @AnnTypeField field x: int
@@ -14,53 +13,45 @@ public final class A {
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnField
@kotlin.annotation.Target
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnFieldProperty
@kotlin.annotation.Target
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnParameterField
@kotlin.annotation.Target
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnParameterProperty
@kotlin.annotation.Target
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnProperty
@kotlin.annotation.Target
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnTypeField
@kotlin.annotation.Target
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class Anno
@kotlin.Metadata
@kotlin.jvm.internal.KotlinFileFacade
public final class DefaultTargetsKt {
private final static @Anno field p2: int
static method <clinit>(): void
@@ -2,26 +2,21 @@
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class ClsAnn
@kotlin.annotation.Target
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class ExprAnn
@kotlin.annotation.Target
@java.lang.annotation.Retention
@java.lang.annotation.Target
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class FunAnn
@kotlin.jvm.internal.KotlinSyntheticClass
@kotlin.Metadata
@kotlin.jvm.internal.KotlinFunction
final class LiteralsKt$foo$1 {
synthetic final field $arg: int
inner class LiteralsKt$foo$1
@@ -30,9 +25,7 @@ final class LiteralsKt$foo$1 {
public synthetic method invoke(): java.lang.Object
}
@kotlin.jvm.internal.KotlinSyntheticClass
@kotlin.Metadata
@kotlin.jvm.internal.KotlinFunction
final class LiteralsKt$foo$2 {
synthetic final field $arg: int
inner class LiteralsKt$foo$2
@@ -43,15 +36,12 @@ final class LiteralsKt$foo$2 {
@ClsAnn
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public final class LiteralsKt$foo$3 {
inner class LiteralsKt$foo$3
method <init>(): void
}
@kotlin.jvm.internal.KotlinSyntheticClass
@kotlin.Metadata
@kotlin.jvm.internal.KotlinFunction
final class LiteralsKt$foo$x$1 {
synthetic final field $arg: int
inner class LiteralsKt$foo$x$1
@@ -61,7 +51,6 @@ final class LiteralsKt$foo$x$1 {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinFileFacade
public final class LiteralsKt {
inner class LiteralsKt$foo$1
inner class LiteralsKt$foo$2
@@ -72,7 +61,6 @@ public final class LiteralsKt {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public class My {
public method <init>(): void
}
@@ -1,5 +1,4 @@
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public final class A {
private synthetic final static field $$delegatedProperties: kotlin.reflect.KProperty[]
private @AnnField field p: int
@@ -21,41 +20,33 @@ public final class A {
@java.lang.annotation.Retention
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnDelegate
@java.lang.annotation.Retention
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnField
@java.lang.annotation.Retention
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnGetter
@java.lang.annotation.Retention
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnParam
@java.lang.annotation.Retention
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnProp
@java.lang.annotation.Retention
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnProp2
@java.lang.annotation.Retention
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class AnnSetter
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public final class CustomDelegate {
public method <init>(): void
public final @org.jetbrains.annotations.NotNull method getValue(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.reflect.KProperty): java.lang.String
@@ -1,5 +1,4 @@
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public final class A {
public method <init>(): void
public final @org.jetbrains.annotations.NotNull method f(@Ann p0: java.lang.String): java.lang.String
@@ -8,11 +7,9 @@ public final class A {
@java.lang.annotation.Retention
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class Ann
@kotlin.Metadata
@kotlin.jvm.internal.KotlinFileFacade
public final class OnReceiverKt {
public final static @org.jetbrains.annotations.NotNull method getTopLevelP(@Ann p0: java.lang.String): java.lang.String
public final static @org.jetbrains.annotations.NotNull method topLevelF(@Ann p0: java.lang.String): java.lang.String
@@ -1,20 +1,16 @@
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class B {
public abstract method foo(): void
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class C {
public abstract method getBar(): int
}
@kotlin.jvm.internal.KotlinSyntheticClass
@kotlin.Metadata
public final class D$DefaultImpls {
inner class D$DefaultImpls
@@ -22,21 +18,18 @@ public final class D$DefaultImpls {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class D {
inner class D$DefaultImpls
public abstract method baz(): int
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public final class E$InsideE {
inner class E$InsideE
public method <init>(): void
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class E {
inner class E$InsideE
}
@@ -1,5 +1,4 @@
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public final class Foo {
public method <init>(): void
public final method bar(): void
@@ -8,7 +7,6 @@ public final class Foo {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinFileFacade
public final class InlineOnlyKt {
public final static method bar(): void
private final static method baz(): void
@@ -1,5 +1,4 @@
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A1 {
public method <init>(): void
public method contains(p0: java.lang.Object): boolean
@@ -12,7 +11,6 @@ public abstract class A1 {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A2 {
public method <init>(): void
public method contains(@org.jetbrains.annotations.NotNull p0: java.lang.String): boolean
@@ -27,7 +25,6 @@ public abstract class A2 {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A3 {
public method <init>(): void
public method contains(p0: java.lang.Object): boolean
@@ -41,7 +38,6 @@ public abstract class A3 {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A4 {
public method <init>(): void
public method contains(p0: java.lang.Object): boolean
@@ -56,7 +52,6 @@ public abstract class A4 {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A5 {
public method <init>(): void
public final method contains(p0: java.lang.Object): boolean
@@ -74,7 +69,6 @@ public abstract class A5 {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A6 {
public method <init>(): void
public method contains(@org.jetbrains.annotations.NotNull p0: java.lang.String): boolean
@@ -93,7 +87,6 @@ public abstract class A6 {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A7 {
public method <init>(): void
public method contains(p0: int): boolean
@@ -107,7 +100,6 @@ public abstract class A7 {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class A8 {
public method <init>(): void
public method contains(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
@@ -118,7 +110,6 @@ public abstract class A8 {
public method toArray(p0: java.lang.Object[]): java.lang.Object[]
}
@kotlin.jvm.internal.KotlinSyntheticClass
@kotlin.Metadata
public final class I1$DefaultImpls {
inner class I1$DefaultImpls
@@ -127,7 +118,6 @@ public final class I1$DefaultImpls {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class I1 {
inner class I1$DefaultImpls
public abstract method contains(p0: java.lang.Object): boolean
@@ -136,7 +126,6 @@ public abstract class I1 {
public abstract method toArray(p0: java.lang.Object[]): java.lang.Object[]
}
@kotlin.jvm.internal.KotlinSyntheticClass
@kotlin.Metadata
public final class I2$DefaultImpls {
inner class I2$DefaultImpls
@@ -145,7 +134,6 @@ public final class I2$DefaultImpls {
}
@kotlin.Metadata
@kotlin.jvm.internal.KotlinClass
public abstract class I2 {
inner class I2$DefaultImpls
public abstract method contains(@org.jetbrains.annotations.NotNull p0: java.lang.String): boolean
@@ -29,24 +29,12 @@ import java.util.Set;
public final class JvmAnnotationNames {
public static final FqName METADATA = new FqName("kotlin.Metadata");
public static final FqName KOTLIN_CLASS = new FqName("kotlin.jvm.internal.KotlinClass");
public static final FqName KOTLIN_FILE_FACADE = new FqName("kotlin.jvm.internal.KotlinFileFacade");
public static final FqName KOTLIN_MULTIFILE_CLASS = new FqName("kotlin.jvm.internal.KotlinMultifileClass");
public static final FqName KOTLIN_MULTIFILE_CLASS_PART = new FqName("kotlin.jvm.internal.KotlinMultifileClassPart");
public static final FqName KOTLIN_SYNTHETIC_CLASS = new FqName("kotlin.jvm.internal.KotlinSyntheticClass");
public static final FqName KOTLIN_FUNCTION = new FqName("kotlin.jvm.internal.KotlinFunction");
public static final String VERSION_FIELD_NAME = "version";
public static final String METADATA_VERSION_FIELD_NAME = "mv";
public static final String BYTECODE_VERSION_FIELD_NAME = "bv";
public static final String FILE_PART_CLASS_NAMES_FIELD_NAME = "filePartClassNames";
public static final String MULTIFILE_CLASS_NAME_FIELD_NAME = "multifileClassName";
public static final String KIND_FIELD_NAME = "k";
public static final String METADATA_DATA_FIELD_NAME = "d1";
public static final String METADATA_STRINGS_FIELD_NAME = "d2";
public static final String METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME = "xs";
public static final String DATA_FIELD_NAME = "data";
public static final String STRINGS_FIELD_NAME = "strings";
public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value");
public static final Name DEPRECATED_ANNOTATION_MESSAGE = Name.identifier("message");
public static final Name TARGET_ANNOTATION_MEMBER_NAME = Name.identifier("allowedTargets");
@@ -66,14 +54,10 @@ public final class JvmAnnotationNames {
public static final FqName ENHANCED_NULLABILITY_ANNOTATION = new FqName("kotlin.jvm.internal.EnhancedNullability");
public static final FqName ENHANCED_MUTABILITY_ANNOTATION = new FqName("kotlin.jvm.internal.EnhancedMutability");
private static final Set<JvmClassName> SPECIAL_ANNOTATIONS = new HashSet<JvmClassName>();
private static final Set<JvmClassName> NULLABILITY_ANNOTATIONS = new HashSet<JvmClassName>();
private static final Set<JvmClassName> SPECIAL_META_ANNOTATIONS = new HashSet<JvmClassName>();
static {
for (FqName fqName : Arrays.asList(METADATA, KOTLIN_CLASS, KOTLIN_SYNTHETIC_CLASS)) {
SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName));
}
static {
for (FqName fqName : Arrays.asList(JETBRAINS_NOT_NULL_ANNOTATION, JETBRAINS_NULLABLE_ANNOTATION)) {
NULLABILITY_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName));
}
@@ -84,10 +68,14 @@ public final class JvmAnnotationNames {
}
public static boolean isSpecialAnnotation(@NotNull ClassId classId, boolean javaSpecificAnnotationsAreSpecial) {
JvmClassName className = JvmClassName.byClassId(classId);
return (javaSpecificAnnotationsAreSpecial
&& (NULLABILITY_ANNOTATIONS.contains(className) || SPECIAL_META_ANNOTATIONS.contains(className))
) || SPECIAL_ANNOTATIONS.contains(className);
if (classId.asSingleFqName().equals(METADATA)) return true;
if (javaSpecificAnnotationsAreSpecial) {
JvmClassName className = JvmClassName.byClassId(classId);
if (NULLABILITY_ANNOTATIONS.contains(className) || SPECIAL_META_ANNOTATIONS.contains(className)) return true;
}
return false;
}
private JvmAnnotationNames() {
@@ -40,11 +40,12 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
private static final Map<ClassId, KotlinClassHeader.Kind> HEADER_KINDS = new HashMap<ClassId, KotlinClassHeader.Kind>();
static {
HEADER_KINDS.put(ClassId.topLevel(KOTLIN_CLASS), CLASS);
HEADER_KINDS.put(ClassId.topLevel(KOTLIN_FILE_FACADE), FILE_FACADE);
HEADER_KINDS.put(ClassId.topLevel(KOTLIN_MULTIFILE_CLASS), MULTIFILE_CLASS);
HEADER_KINDS.put(ClassId.topLevel(KOTLIN_MULTIFILE_CLASS_PART), MULTIFILE_CLASS_PART);
HEADER_KINDS.put(ClassId.topLevel(KOTLIN_SYNTHETIC_CLASS), SYNTHETIC_CLASS);
// TODO: delete this at some point
HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinClass")), CLASS);
HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinFileFacade")), FILE_FACADE);
HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinMultifileClass")), MULTIFILE_CLASS);
HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinMultifileClassPart")), MULTIFILE_CLASS_PART);
HEADER_KINDS.put(ClassId.topLevel(new FqName("kotlin.jvm.internal.KotlinSyntheticClass")), SYNTHETIC_CLASS);
}
private JvmMetadataVersion metadataVersion = null;
@@ -103,7 +104,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
KotlinClassHeader.Kind newKind = HEADER_KINDS.get(classId);
if (newKind != null) {
headerKind = newKind;
return new HeaderAnnotationArgumentVisitor();
return new OldDeprecatedAnnotationArgumentVisitor();
}
return null;
@@ -191,13 +192,13 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
}
}
private class HeaderAnnotationArgumentVisitor implements AnnotationArgumentVisitor {
private class OldDeprecatedAnnotationArgumentVisitor implements AnnotationArgumentVisitor {
@Override
public void visit(@Nullable Name name, @Nullable Object value) {
if (name == null) return;
String string = name.asString();
if (VERSION_FIELD_NAME.equals(string)) {
if ("version".equals(string)) {
if (value instanceof int[]) {
metadataVersion = new JvmMetadataVersion((int[]) value);
@@ -207,7 +208,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
}
}
}
else if (MULTIFILE_CLASS_NAME_FIELD_NAME.equals(string)) {
else if ("multifileClassName".equals(string)) {
multifileClassName = value instanceof String ? (String) value : null;
}
}
@@ -216,10 +217,10 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
@Nullable
public AnnotationArrayArgumentVisitor visitArray(@NotNull Name name) {
String string = name.asString();
if (DATA_FIELD_NAME.equals(string) || FILE_PART_CLASS_NAMES_FIELD_NAME.equals(string)) {
if ("data".equals(string) || "filePartClassNames".equals(string)) {
return dataArrayVisitor();
}
else if (STRINGS_FIELD_NAME.equals(string)) {
else if ("strings".equals(string)) {
return stringsArrayVisitor();
}
else {