Do not write and read KotlinInterfaceDefaultImpls
This was only used in InlineTestUtil.kt and had no effect in the condition
This commit is contained in:
@@ -24,9 +24,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KOTLIN_INTERFACE_DEFAULT_IMPLS
|
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
|
||||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
@@ -151,10 +149,9 @@ class InterfaceImplBodyCodegen(
|
|||||||
override fun generateKotlinAnnotation() {
|
override fun generateKotlinAnnotation() {
|
||||||
(v as InterfaceImplClassBuilder).stopCounting()
|
(v as InterfaceImplClassBuilder).stopCounting()
|
||||||
|
|
||||||
v.newAnnotation(AsmUtil.asmDescByFqNameWithoutInnerClasses(KOTLIN_INTERFACE_DEFAULT_IMPLS), true).visitEnd()
|
|
||||||
AsmUtil.writeKotlinSyntheticClassAnnotation(v, state)
|
AsmUtil.writeKotlinSyntheticClassAnnotation(v, state)
|
||||||
|
|
||||||
writeSyntheticClassMetadata(v, KotlinClassHeader.SyntheticClassKind.INTERFACE_DEFAULT_IMPLS);
|
writeSyntheticClassMetadata(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun done() {
|
override fun done() {
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ class PropertyReferenceCodegen(
|
|||||||
override fun generateKotlinAnnotation() {
|
override fun generateKotlinAnnotation() {
|
||||||
writeKotlinSyntheticClassAnnotation(v, state)
|
writeKotlinSyntheticClassAnnotation(v, state)
|
||||||
|
|
||||||
writeSyntheticClassMetadata(v, null)
|
writeSyntheticClassMetadata(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun putInstanceOnStack(): StackValue =
|
fun putInstanceOnStack(): StackValue =
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class SamWrapperCodegen {
|
|||||||
|
|
||||||
writeKotlinSyntheticClassAnnotation(cv, state);
|
writeKotlinSyntheticClassAnnotation(cv, state);
|
||||||
|
|
||||||
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv, null);
|
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cv);
|
||||||
|
|
||||||
// e.g. ASM type for Function2
|
// e.g. ASM type for Function2
|
||||||
Type functionAsmType = typeMapper.mapType(functionType);
|
Type functionAsmType = typeMapper.mapType(functionType);
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ public class MappingClassesForWhenByEnumCodegen {
|
|||||||
|
|
||||||
writeKotlinSyntheticClassAnnotation(cb, state);
|
writeKotlinSyntheticClassAnnotation(cb, state);
|
||||||
|
|
||||||
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb, null);
|
WriteAnnotationUtilKt.writeSyntheticClassMetadata(cb);
|
||||||
|
|
||||||
cb.done();
|
cb.done();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,10 +31,8 @@ fun writeKotlinMetadata(cb: ClassBuilder, kind: KotlinClassHeader.Kind, action:
|
|||||||
av.visitEnd()
|
av.visitEnd()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun writeSyntheticClassMetadata(cb: ClassBuilder, kind: KotlinClassHeader.SyntheticClassKind?) {
|
fun writeSyntheticClassMetadata(cb: ClassBuilder) {
|
||||||
writeKotlinMetadata(cb, KotlinClassHeader.Kind.SYNTHETIC_CLASS) { av ->
|
writeKotlinMetadata(cb, KotlinClassHeader.Kind.SYNTHETIC_CLASS) { av ->
|
||||||
if (kind != null) {
|
// Do nothing
|
||||||
av.visit(JvmAnnotationNames.SYNTHETIC_CLASS_KIND_FIELD_NAME, kind.id)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ public abstract class C {
|
|||||||
public abstract method getBar(): int
|
public abstract method getBar(): int
|
||||||
}
|
}
|
||||||
|
|
||||||
@kotlin.jvm.internal.KotlinInterfaceDefaultImpls
|
|
||||||
@kotlin.jvm.internal.KotlinSyntheticClass
|
@kotlin.jvm.internal.KotlinSyntheticClass
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class D$DefaultImpls {
|
public final class D$DefaultImpls {
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ public abstract class A8 {
|
|||||||
public method toArray(p0: java.lang.Object[]): java.lang.Object[]
|
public method toArray(p0: java.lang.Object[]): java.lang.Object[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@kotlin.jvm.internal.KotlinInterfaceDefaultImpls
|
|
||||||
@kotlin.jvm.internal.KotlinSyntheticClass
|
@kotlin.jvm.internal.KotlinSyntheticClass
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class I1$DefaultImpls {
|
public final class I1$DefaultImpls {
|
||||||
@@ -137,7 +136,6 @@ public abstract class I1 {
|
|||||||
public abstract method toArray(p0: java.lang.Object[]): java.lang.Object[]
|
public abstract method toArray(p0: java.lang.Object[]): java.lang.Object[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@kotlin.jvm.internal.KotlinInterfaceDefaultImpls
|
|
||||||
@kotlin.jvm.internal.KotlinSyntheticClass
|
@kotlin.jvm.internal.KotlinSyntheticClass
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class I2$DefaultImpls {
|
public final class I2$DefaultImpls {
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ abstract class AbstractBytecodeListingTest : CodegenTestCase() {
|
|||||||
|
|
||||||
override fun visitAnnotation(desc: String, visible: Boolean): AnnotationVisitor? {
|
override fun visitAnnotation(desc: String, visible: Boolean): AnnotationVisitor? {
|
||||||
val name = Type.getType(desc).className
|
val name = Type.getType(desc).className
|
||||||
classAnnotations.add("@$name ")
|
classAnnotations.add("@$name")
|
||||||
return super.visitAnnotation(desc, visible)
|
return super.visitAnnotation(desc, visible)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ object InlineTestUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isClassOrPackagePartKind(header: KotlinClassHeader): Boolean {
|
private fun isClassOrPackagePartKind(header: KotlinClassHeader): Boolean {
|
||||||
return (header.kind == KotlinClassHeader.Kind.CLASS && !header.isLocalClass) || header.isInterfaceDefaultImpls
|
return header.kind == KotlinClassHeader.Kind.CLASS && !header.isLocalClass
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getClassHeader(file: OutputFile): KotlinClassHeader {
|
private fun getClassHeader(file: OutputFile): KotlinClassHeader {
|
||||||
|
|||||||
+1
-5
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.load.java;
|
package org.jetbrains.kotlin.load.java;
|
||||||
|
|
||||||
import kotlin.collections.SetsKt;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.name.ClassId;
|
import org.jetbrains.kotlin.name.ClassId;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
@@ -36,7 +35,6 @@ public final class JvmAnnotationNames {
|
|||||||
public static final FqName KOTLIN_MULTIFILE_CLASS_PART = new FqName("kotlin.jvm.internal.KotlinMultifileClassPart");
|
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_SYNTHETIC_CLASS = new FqName("kotlin.jvm.internal.KotlinSyntheticClass");
|
||||||
public static final FqName KOTLIN_FUNCTION = new FqName("kotlin.jvm.internal.KotlinFunction");
|
public static final FqName KOTLIN_FUNCTION = new FqName("kotlin.jvm.internal.KotlinFunction");
|
||||||
public static final FqName KOTLIN_INTERFACE_DEFAULT_IMPLS = new FqName("kotlin.jvm.internal.KotlinInterfaceDefaultImpls");
|
|
||||||
public static final FqName KOTLIN_LOCAL_CLASS = new FqName("kotlin.jvm.internal.KotlinLocalClass");
|
public static final FqName KOTLIN_LOCAL_CLASS = new FqName("kotlin.jvm.internal.KotlinLocalClass");
|
||||||
|
|
||||||
public static final String VERSION_FIELD_NAME = "version";
|
public static final String VERSION_FIELD_NAME = "version";
|
||||||
@@ -75,9 +73,7 @@ public final class JvmAnnotationNames {
|
|||||||
private static final Set<JvmClassName> NULLABILITY_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>();
|
private static final Set<JvmClassName> SPECIAL_META_ANNOTATIONS = new HashSet<JvmClassName>();
|
||||||
static {
|
static {
|
||||||
for (FqName fqName : Arrays.asList(
|
for (FqName fqName : Arrays.asList(METADATA, KOTLIN_CLASS, KOTLIN_SYNTHETIC_CLASS, KOTLIN_LOCAL_CLASS)) {
|
||||||
METADATA, KOTLIN_CLASS, KOTLIN_SYNTHETIC_CLASS, KOTLIN_INTERFACE_DEFAULT_IMPLS, KOTLIN_LOCAL_CLASS
|
|
||||||
)) {
|
|
||||||
SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName));
|
SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -26,7 +26,6 @@ class KotlinClassHeader(
|
|||||||
val data: Array<String>?,
|
val data: Array<String>?,
|
||||||
val strings: Array<String>?,
|
val strings: Array<String>?,
|
||||||
val multifileClassName: String?,
|
val multifileClassName: String?,
|
||||||
val isInterfaceDefaultImpls: Boolean,
|
|
||||||
val isLocalClass: Boolean
|
val isLocalClass: Boolean
|
||||||
) {
|
) {
|
||||||
// See kotlin.Metadata
|
// See kotlin.Metadata
|
||||||
@@ -48,8 +47,7 @@ class KotlinClassHeader(
|
|||||||
|
|
||||||
enum class SyntheticClassKind(val id: Int) {
|
enum class SyntheticClassKind(val id: Int) {
|
||||||
FUNCTION(1),
|
FUNCTION(1),
|
||||||
LOCAL_CLASS(2),
|
LOCAL_CLASS(2);
|
||||||
INTERFACE_DEFAULT_IMPLS(3);
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val entryById = values().toMapBy(SyntheticClassKind::id)
|
private val entryById = values().toMapBy(SyntheticClassKind::id)
|
||||||
|
|||||||
+1
-7
@@ -54,7 +54,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
private String[] strings = null;
|
private String[] strings = null;
|
||||||
private KotlinClassHeader.Kind headerKind = null;
|
private KotlinClassHeader.Kind headerKind = null;
|
||||||
private KotlinClassHeader.SyntheticClassKind syntheticClassKind = null;
|
private KotlinClassHeader.SyntheticClassKind syntheticClassKind = null;
|
||||||
private boolean isInterfaceDefaultImpls = false;
|
|
||||||
private boolean isLocalClass = false;
|
private boolean isLocalClass = false;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -79,7 +78,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
data,
|
data,
|
||||||
strings,
|
strings,
|
||||||
multifileClassName,
|
multifileClassName,
|
||||||
isInterfaceDefaultImpls || syntheticClassKind == KotlinClassHeader.SyntheticClassKind.INTERFACE_DEFAULT_IMPLS,
|
|
||||||
isLocalClass || syntheticClassKind == KotlinClassHeader.SyntheticClassKind.LOCAL_CLASS
|
isLocalClass || syntheticClassKind == KotlinClassHeader.SyntheticClassKind.LOCAL_CLASS
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -100,11 +98,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
|
|
||||||
if (IGNORE_OLD_METADATA) return null;
|
if (IGNORE_OLD_METADATA) return null;
|
||||||
|
|
||||||
if (KOTLIN_INTERFACE_DEFAULT_IMPLS.equals(fqName)) {
|
if (KOTLIN_LOCAL_CLASS.equals(fqName)) {
|
||||||
isInterfaceDefaultImpls = true;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else if (KOTLIN_LOCAL_CLASS.equals(fqName)) {
|
|
||||||
isLocalClass = true;
|
isLocalClass = true;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ internal annotation class Metadata(
|
|||||||
*
|
*
|
||||||
* 1 Anonymous class for a lambda or a function reference
|
* 1 Anonymous class for a lambda or a function reference
|
||||||
* 2 Local class or anonymous object literal
|
* 2 Local class or anonymous object literal
|
||||||
* 3 Implicit nested DefaultImpls class for an interface
|
|
||||||
*
|
*
|
||||||
* A value other than this (e.g. 0) or a missing value means this is a synthetic class of some other sort.
|
* A value other than this (e.g. 0) or a missing value means this is a synthetic class of some other sort.
|
||||||
* This kind has no effect on the compiler because it doesn't read synthetic class metadata. It may be used in IDEs and tools.
|
* This kind has no effect on the compiler because it doesn't read synthetic class metadata. It may be used in IDEs and tools.
|
||||||
|
|||||||
Reference in New Issue
Block a user