Delete kotlin.jvm.internal.KObject
It was supposed to be used in reflection but the benefits do not outweigh the cost of KT-6951 #KT-3223 Fixed #KT-6951 Fixed
This commit is contained in:
@@ -23,13 +23,13 @@ import com.intellij.util.ArrayUtil;
|
||||
import kotlin.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension;
|
||||
import org.jetbrains.kotlin.backend.common.CodegenUtil;
|
||||
import org.jetbrains.kotlin.backend.common.CodegenUtilKt;
|
||||
import org.jetbrains.kotlin.backend.common.DataClassMethodGenerator;
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||
import org.jetbrains.kotlin.codegen.binding.MutableClosure;
|
||||
import org.jetbrains.kotlin.codegen.context.*;
|
||||
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension;
|
||||
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter;
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||
@@ -282,34 +282,16 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
sw.writeSuperclassEnd();
|
||||
|
||||
List<JetType> interfaceSupertypes = Lists.newArrayList();
|
||||
boolean explicitKObject = false;
|
||||
|
||||
for (JetDelegationSpecifier specifier : myClass.getDelegationSpecifiers()) {
|
||||
JetType superType = bindingContext.get(BindingContext.TYPE, specifier.getTypeReference());
|
||||
assert superType != null : "No supertype for class: " + myClass.getText();
|
||||
ClassifierDescriptor classifierDescriptor = superType.getConstructor().getDeclarationDescriptor();
|
||||
if (classifierDescriptor instanceof ClassDescriptor) {
|
||||
ClassDescriptor superClassDescriptor = (ClassDescriptor) classifierDescriptor;
|
||||
if (isInterface(superClassDescriptor)) {
|
||||
interfaceSupertypes.add(superType);
|
||||
|
||||
if (JvmAbi.K_OBJECT.equalsTo(DescriptorUtils.getFqName(superClassDescriptor))) {
|
||||
explicitKObject = true;
|
||||
}
|
||||
}
|
||||
if (isInterface(superType.getConstructor().getDeclarationDescriptor())) {
|
||||
interfaceSupertypes.add(superType);
|
||||
}
|
||||
}
|
||||
|
||||
LinkedHashSet<String> superInterfaces = new LinkedHashSet<String>();
|
||||
if (!explicitKObject && !isInterface(descriptor)) {
|
||||
Type kObject = asmTypeByFqNameWithoutInnerClasses(JvmAbi.K_OBJECT);
|
||||
sw.writeInterface();
|
||||
sw.writeClassBegin(kObject);
|
||||
sw.writeClassEnd();
|
||||
sw.writeInterfaceEnd();
|
||||
superInterfaces.add(kObject.getInternalName());
|
||||
}
|
||||
|
||||
for (JetType supertype : interfaceSupertypes) {
|
||||
sw.writeInterface();
|
||||
Type jvmName = typeMapper.mapSupertype(supertype, sw);
|
||||
@@ -318,8 +300,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
}
|
||||
|
||||
return new JvmClassSignature(classAsmType.getInternalName(), superClassAsmType.getInternalName(),
|
||||
new ArrayList<String>(superInterfaces),
|
||||
sw.makeJavaGenericSignature());
|
||||
new ArrayList<String>(superInterfaces), sw.makeJavaGenericSignature());
|
||||
}
|
||||
|
||||
protected void getSuperClass() {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class WithPlatformTypes implements kotlin.jvm.internal.KObject, java.lang.Iterable<java.lang.String> {
|
||||
public final class WithPlatformTypes implements java.lang.Iterable<java.lang.String> {
|
||||
public WithPlatformTypes(@org.jetbrains.annotations.NotNull java.lang.Iterable<java.lang.String> i) { /* compiled code */ }
|
||||
|
||||
@org.jetbrains.annotations.NotNull
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class Derived implements kotlin.jvm.internal.KObject, Base {
|
||||
public final class Derived implements Base {
|
||||
public Derived(@org.jetbrains.annotations.NotNull Base x) { /* compiled code */ }
|
||||
|
||||
@org.jetbrains.annotations.NotNull
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class Derived implements kotlin.jvm.internal.KObject, Base {
|
||||
public final class Derived implements Base {
|
||||
public Derived(@org.jetbrains.annotations.NotNull Base x) { /* compiled code */ }
|
||||
|
||||
@org.jetbrains.annotations.NotNull
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class WithPlatformTypes implements kotlin.jvm.internal.KObject, p.J {
|
||||
public final class WithPlatformTypes implements p.J {
|
||||
public WithPlatformTypes(@org.jetbrains.annotations.NotNull p.J j) { /* compiled code */ }
|
||||
|
||||
@org.jetbrains.annotations.NotNull
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class Class implements kotlin.jvm.internal.KObject {
|
||||
public final class Class {
|
||||
@org.jetbrains.annotations.Nullable
|
||||
private final java.lang.String nullableVal = "";
|
||||
@org.jetbrains.annotations.Nullable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class ClassObjectField implements kotlin.jvm.internal.KObject {
|
||||
public final class ClassObjectField {
|
||||
@org.jetbrains.annotations.Nullable
|
||||
public static final java.lang.String x = "";
|
||||
private static final java.lang.String y = "";
|
||||
@@ -11,7 +11,7 @@ public final class ClassObjectField implements kotlin.jvm.internal.KObject {
|
||||
|
||||
public ClassObjectField() { /* compiled code */ }
|
||||
|
||||
public static final class Default implements kotlin.jvm.internal.KObject {
|
||||
public static final class Default {
|
||||
@org.jetbrains.annotations.Nullable
|
||||
public final java.lang.String getX() { /* compiled code */ }
|
||||
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
public final class ClassWithConstructor implements kotlin.jvm.internal.KObject {
|
||||
public final class ClassWithConstructor {
|
||||
public ClassWithConstructor(@org.jetbrains.annotations.Nullable java.lang.String nullable, @org.jetbrains.annotations.NotNull java.lang.String notNull) { /* compiled code */ }
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
public final class ClassWithConstructorAndProperties implements kotlin.jvm.internal.KObject {
|
||||
public final class ClassWithConstructorAndProperties {
|
||||
@org.jetbrains.annotations.Nullable
|
||||
private final java.lang.String nullable;
|
||||
@org.jetbrains.annotations.NotNull
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class C implements kotlin.jvm.internal.KObject, Tr {
|
||||
public final class C implements Tr {
|
||||
private final int v = 1;
|
||||
|
||||
@org.jetbrains.annotations.NotNull
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
public final class C implements kotlin.jvm.internal.KObject, Base {
|
||||
public final class C implements Base {
|
||||
public void foo() { /* compiled code */ }
|
||||
|
||||
public C() { /* compiled code */ }
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class PlatformTypes implements kotlin.jvm.internal.KObject {
|
||||
public final class PlatformTypes {
|
||||
public final java.lang.String simplyPlatform() { /* compiled code */ }
|
||||
|
||||
@org.jetbrains.annotations.Nullable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public final class PrivateInClass implements kotlin.jvm.internal.KObject {
|
||||
public final class PrivateInClass {
|
||||
private final java.lang.String getNn() { /* compiled code */ }
|
||||
|
||||
private final void setNn(java.lang.String value) { /* compiled code */ }
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
public final class Synthetic implements kotlin.jvm.internal.KObject {
|
||||
public final class Synthetic {
|
||||
private final void foo() { /* compiled code */ }
|
||||
|
||||
public Synthetic() { /* compiled code */ }
|
||||
|
||||
public final class Inner implements kotlin.jvm.internal.KObject {
|
||||
public final class Inner {
|
||||
public final void test() { /* compiled code */ }
|
||||
|
||||
public Inner() { /* compiled code */ }
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ public interface TraitClassObjectField {
|
||||
@org.jetbrains.annotations.Nullable
|
||||
java.lang.String x = "";
|
||||
|
||||
static final class Default implements kotlin.jvm.internal.KObject {
|
||||
static final class Default {
|
||||
@org.jetbrains.annotations.Nullable
|
||||
private final java.lang.String x = "";
|
||||
private final java.lang.String y = "";
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
public final class C implements kotlin.jvm.internal.KObject, Base<kotlin.Unit> {
|
||||
public final class C implements Base<kotlin.Unit> {
|
||||
public void foo(@org.jetbrains.annotations.NotNull kotlin.Unit t) { /* compiled code */ }
|
||||
|
||||
public C() { /* compiled code */ }
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package test
|
||||
|
||||
import kotlin.jvm.internal.KObject
|
||||
import kotlin.jvm.internal.Intrinsics
|
||||
import kotlin.jvm.internal.Ref
|
||||
|
||||
fun foo(): String {
|
||||
// This method call should be resolved to kotlin-runtime.jar
|
||||
val r: String = Intrinsics.stringPlus(":", ")")
|
||||
|
||||
// This method call should be resolved to sources
|
||||
return KObject.methodWhichDoesNotExistInKotlinRuntime()
|
||||
return Ref.methodWhichDoesNotExistInKotlinRuntime()
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package kotlin.jvm.internal;
|
||||
|
||||
public class KObject {
|
||||
public class Ref {
|
||||
public static String methodWhichDoesNotExistInKotlinRuntime() {
|
||||
return ":)";
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
// KT-4485 getGenericInterfaces vs getInterfaces for kotlin classes
|
||||
|
||||
import kotlin.jvm.internal.KObject
|
||||
|
||||
class SimpleClass
|
||||
|
||||
class ClassWithNonGenericSuperInterface: Cloneable
|
||||
@@ -10,10 +8,6 @@ class ClassWithGenericSuperInterface: java.util.Comparator<String> {
|
||||
override fun compare(a: String, b: String): Int = 0
|
||||
}
|
||||
|
||||
class ExplicitKObject: java.util.Comparator<String>, KObject {
|
||||
override fun compare(a: String, b: String): Int = 0
|
||||
}
|
||||
|
||||
fun check(klass: Class<*>) {
|
||||
val interfaces = klass.getInterfaces().toList()
|
||||
val genericInterfaces = klass.getGenericInterfaces().toList()
|
||||
@@ -26,6 +20,5 @@ fun box(): String {
|
||||
check(javaClass<SimpleClass>())
|
||||
check(javaClass<ClassWithNonGenericSuperInterface>())
|
||||
check(javaClass<ClassWithGenericSuperInterface>())
|
||||
check(javaClass<ExplicitKObject>())
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
// KT-5609: interfaces should not inherit from KObject, unless explicitly said so
|
||||
|
||||
trait A
|
||||
|
||||
trait B : kotlin.jvm.internal.KObject
|
||||
|
||||
annotation class C
|
||||
|
||||
class D
|
||||
|
||||
class E : kotlin.jvm.internal.KObject
|
||||
|
||||
fun box(): String {
|
||||
val a = javaClass<A>().getGenericInterfaces().toList()
|
||||
if (a.toString() != "[]") return "Fail A: $a"
|
||||
|
||||
val b = javaClass<B>().getGenericInterfaces().toList()
|
||||
if (b.toString() != "[interface kotlin.jvm.internal.KObject]") return "Fail B: $b"
|
||||
|
||||
val c = javaClass<C>().getGenericInterfaces().toList()
|
||||
if (c.toString() != "[interface java.lang.annotation.Annotation]") return "Fail C: $c"
|
||||
|
||||
val d = javaClass<D>().getGenericInterfaces().toList()
|
||||
if (d.toString() != "[interface kotlin.jvm.internal.KObject]") return "Fail D: $d"
|
||||
|
||||
val e = javaClass<E>().getGenericInterfaces().toList()
|
||||
if (e.toString() != "[interface kotlin.jvm.internal.KObject]") return "Fail E: $e"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -8,4 +8,4 @@ class Sub: Super<C<*>>()
|
||||
|
||||
// class: Sub
|
||||
// jvm signature: Sub
|
||||
// generic signature: LSuper<LC<*>;>;Lkotlin/jvm/internal/KObject;
|
||||
// generic signature: LSuper<LC<*>;>;
|
||||
|
||||
@@ -4,4 +4,4 @@ class Derived<A, B, C>: Base<A, B, C>()
|
||||
|
||||
// class: Derived
|
||||
// jvm signature: Derived
|
||||
// generic signature: <A:Ljava/lang/Object;B:Ljava/lang/Object;C:Ljava/lang/Object;>LBase<TA;TB;TC;>;Lkotlin/jvm/internal/KObject;
|
||||
// generic signature: <A:Ljava/lang/Object;B:Ljava/lang/Object;C:Ljava/lang/Object;>LBase<TA;TB;TC;>;
|
||||
|
||||
@@ -4,4 +4,4 @@ class Derived<A, B, C>: Base<A, B, C>
|
||||
|
||||
// class: Derived
|
||||
// jvm signature: Derived
|
||||
// generic signature: <A:Ljava/lang/Object;B:Ljava/lang/Object;C:Ljava/lang/Object;>Ljava/lang/Object;Lkotlin/jvm/internal/KObject;LBase<TA;TB;TC;>;
|
||||
// generic signature: <A:Ljava/lang/Object;B:Ljava/lang/Object;C:Ljava/lang/Object;>Ljava/lang/Object;LBase<TA;TB;TC;>;
|
||||
|
||||
+1
-1
@@ -5,4 +5,4 @@ class Derived<A, B, C>: Intermediate<Base<A, B, C>>
|
||||
|
||||
// class: Derived
|
||||
// jvm signature: Derived
|
||||
// generic signature: <A:Ljava/lang/Object;B:Ljava/lang/Object;C:Ljava/lang/Object;>Ljava/lang/Object;Lkotlin/jvm/internal/KObject;LIntermediate<LBase<TA;-TB;+TC;>;>;
|
||||
// generic signature: <A:Ljava/lang/Object;B:Ljava/lang/Object;C:Ljava/lang/Object;>Ljava/lang/Object;LIntermediate<LBase<TA;-TB;+TC;>;>;
|
||||
|
||||
-6
@@ -3068,12 +3068,6 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
||||
doTestWithStdlib(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kt5609.kt")
|
||||
public void testKt5609() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/regressions/kt5609.kt");
|
||||
doTestWithStdlib(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kt715.kt")
|
||||
public void testKt715() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/regressions/kt715.kt");
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.kotlin.load.java;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
|
||||
public final class JvmAbi {
|
||||
@@ -40,7 +39,6 @@ public final class JvmAbi {
|
||||
|
||||
public static final String INSTANCE_FIELD = "INSTANCE$";
|
||||
|
||||
public static final FqName K_OBJECT = new FqName("kotlin.jvm.internal.KObject");
|
||||
public static final String KOTLIN_CLASS_FIELD_NAME = "$kotlinClass";
|
||||
public static final String KOTLIN_PACKAGE_FIELD_NAME = "$kotlinPackage";
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package kotlin.jvm.internal;
|
||||
|
||||
public interface KObject {
|
||||
}
|
||||
@@ -33,12 +33,11 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.CommonClassNames
|
||||
import com.sun.jdi.ClassType
|
||||
import com.sun.jdi.Value
|
||||
import org.jetbrains.eval4j.jdi.*
|
||||
import org.jetbrains.eval4j.jdi.asValue
|
||||
import org.jetbrains.kotlin.psi.JetExpression
|
||||
import org.jetbrains.kotlin.psi.JetPsiFactory
|
||||
import org.jetbrains.kotlin.types.JetType
|
||||
import org.jetbrains.org.objectweb.asm.Type as AsmType
|
||||
import org.jetbrains.kotlin.psi.JetExpression
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
|
||||
public abstract class KotlinRuntimeTypeEvaluator(
|
||||
editor: Editor?,
|
||||
@@ -99,8 +98,6 @@ public abstract class KotlinRuntimeTypeEvaluator(
|
||||
}
|
||||
|
||||
for (interfaceType in type.interfaces()) {
|
||||
if (JvmAbi.K_OBJECT.asString() == interfaceType.name()) continue
|
||||
|
||||
psiClass = AsmType.getType(interfaceType.signature()).getClassDescriptor(project)
|
||||
if (psiClass != null) {
|
||||
return psiClass!!.getDefaultType()
|
||||
|
||||
@@ -16,18 +16,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.refactoring
|
||||
|
||||
import com.intellij.psi.PsiReferenceList
|
||||
import com.intellij.psi.PsiReferenceList.Role
|
||||
import com.intellij.psi.PsiElementFactory
|
||||
import com.intellij.psi.PsiJavaCodeReferenceElement
|
||||
import org.jetbrains.kotlin.load.java.*
|
||||
import com.intellij.psi.PsiReferenceList
|
||||
import com.intellij.psi.PsiReferenceList.Role
|
||||
|
||||
public fun PsiElementFactory.createReferenceListWithRole(
|
||||
references: Array<PsiJavaCodeReferenceElement>,
|
||||
role: Role
|
||||
): PsiReferenceList? {
|
||||
val filteredRefs = references.map { it.getCanonicalText() }.filter { it != JvmAbi.K_OBJECT.asString() }
|
||||
val refListText = if (filteredRefs.isNotEmpty()) filteredRefs.joinToString() else return null
|
||||
val refsText = references.map { it.getCanonicalText() }
|
||||
val refListText = if (refsText.isNotEmpty()) refsText.joinToString() else return null
|
||||
return when (role) {
|
||||
Role.THROWS_LIST -> createMethodFromText("void foo() throws $refListText {}", null).getThrowsList()
|
||||
Role.EXTENDS_LIST -> createClassFromText("class Foo extends $refListText {}", null).getInnerClasses()[0].getExtendsList()
|
||||
|
||||
Reference in New Issue
Block a user