Do not write old metadata annotations to bytecode
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
-3
@@ -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
|
||||
|
||||
+9
-21
@@ -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() {
|
||||
|
||||
+12
-11
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user