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:
Alexander Udalov
2016-01-17 23:10:46 +03:00
parent 7906ac63b5
commit e37bd4eba6
13 changed files with 11 additions and 32 deletions
@@ -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);
@@ -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 {
@@ -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));
} }
@@ -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)
@@ -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;
} }
-1
View File
@@ -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.