Don't load Object as a supertype for Java classes

#KT-4890 In Progress
 #KT-5002 Fixed
This commit is contained in:
Alexander Udalov
2014-07-21 17:28:06 +04:00
parent bea740b478
commit a79398fa00
34 changed files with 95 additions and 130 deletions
@@ -1,6 +1,6 @@
public open class Test(): java.util.RandomAccess, Cloneable, java.io.Serializable public open class Test(): java.util.RandomAccess, Cloneable, java.io.Serializable
{ {
public override fun clone(): Test = Test() // Override 'clone()' with more precise type 'Test' public fun clone(): Test = Test() // Override 'clone()' with more precise type 'Test'
public override fun toString() = "OK" public override fun toString() = "OK"
} }
@@ -1,7 +1,7 @@
fun box(): String { fun box(): String {
val f = { } val f = { }
val class1 = Runnable(f).getClass() val class1 = (Runnable(f) as Object).getClass()
val class2 = Runnable(f).getClass() val class2 = (Runnable(f) as Object).getClass()
return if (class1 == class2) "OK" else "$class1 $class2" return if (class1 == class2) "OK" else "$class1 $class2"
} }
@@ -1,7 +1,7 @@
fun box(): String { fun box(): String {
val f = { } val f = { }
val class1 = Runnable(f).getClass() val class1 = Runnable(f).javaClass
val class2 = Custom.Runnable(f).getClass() val class2 = Custom.Runnable(f).javaClass
return if (class1 != class2) "OK" else "Same class: $class1" return if (class1 != class2) "OK" else "Same class: $class1"
} }
@@ -2,7 +2,7 @@ import java.util.Arrays
fun box(): String { fun box(): String {
val r: JavaClass.Computable<String> = JavaClass.Computable { "OK" } val r: JavaClass.Computable<String> = JavaClass.Computable { "OK" }
val supertypes = Arrays.toString(r.getClass().getGenericInterfaces()) val supertypes = Arrays.toString(r.javaClass.getGenericInterfaces())
if (supertypes != "[JavaClass.JavaClass\$Computable<java.lang.String>]") return "Fail: $supertypes" if (supertypes != "[JavaClass.JavaClass\$Computable<java.lang.String>]") return "Fail: $supertypes"
return JavaClass.compute(r)!! return JavaClass.compute(r)!!
} }
@@ -1,6 +1,6 @@
fun box(): String { fun box(): String {
val class1 = getWrapped1().getClass() val class1 = getWrapped1().javaClass
val class2 = getWrapped2().getClass() val class2 = getWrapped2().javaClass
return if (class1 != class2) "OK" else "Same class: $class1" return if (class1 != class2) "OK" else "Same class: $class1"
} }
@@ -0,0 +1,15 @@
import java.io.Serializable
public data class Pair<out A, out B> (
public val first: A,
public val second: B
) : Serializable
fun box(): String {
val p = Pair(42, "OK")
val q = Pair(42, "OK")
if (p != q) return "Fail equals"
if (p.hashCode() != q.hashCode()) return "Fail hashCode"
if (p.toString() != q.toString()) return "Fail toString"
return p.second
}
@@ -15,7 +15,6 @@ public class Y extends X<A> {
// FILE: test.kt // FILE: test.kt
fun main() { fun main() {
Y().foo()<!UNSAFE_CALL!>.<!>wait() Y().foo()<!UNSAFE_CALL!>.<!>hashCode()
Y().bar(null) Y().bar(null)
} }
@@ -1,16 +1,8 @@
package test package test
public final class ClassWithObjectMethod : java.lang.Object { public final class ClassWithObjectMethod {
public constructor ClassWithObjectMethod() public constructor ClassWithObjectMethod()
protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun finalize(): kotlin.Unit
public final override /*1*/ /*fake_override*/ fun getClass(): java.lang.Class<out kotlin.Any?>
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final override /*1*/ /*fake_override*/ fun notify(): kotlin.Unit
public final override /*1*/ /*fake_override*/ fun notifyAll(): kotlin.Unit
public open override /*1*/ fun toString(): kotlin.String public open override /*1*/ fun toString(): kotlin.String
public final override /*1*/ /*fake_override*/ fun wait(): kotlin.Unit
public final override /*1*/ /*fake_override*/ fun wait(/*0*/ p0: kotlin.Long): kotlin.Unit
public final override /*1*/ /*fake_override*/ fun wait(/*0*/ p0: kotlin.Long, /*1*/ p1: kotlin.Int): kotlin.Unit
} }
@@ -1,15 +1,9 @@
package test package test
public trait InterfaceWithObjectMethods : java.lang.Object { public trait InterfaceWithObjectMethods {
public abstract override /*1*/ fun clone(): kotlin.Any public abstract fun clone(): kotlin.Any?
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ fun finalize(): kotlin.Unit public abstract fun finalize(): kotlin.Unit
public final override /*1*/ /*fake_override*/ fun getClass(): java.lang.Class<out kotlin.Any?>
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final override /*1*/ /*fake_override*/ fun notify(): kotlin.Unit
public final override /*1*/ /*fake_override*/ fun notifyAll(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final override /*1*/ /*fake_override*/ fun wait(): kotlin.Unit
public final override /*1*/ /*fake_override*/ fun wait(/*0*/ p0: kotlin.Long): kotlin.Unit
public final override /*1*/ /*fake_override*/ fun wait(/*0*/ p0: kotlin.Long, /*1*/ p1: kotlin.Int): kotlin.Unit
} }
@@ -8,7 +8,7 @@ public final class Sub : test.Super {
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit
} }
public open class Super : java.lang.Object { public open class Super {
public constructor Super() public constructor Super()
public/*package*/ final /*synthesized*/ fun foo(/*0*/ r: (() -> kotlin.Unit)?): kotlin.Unit public/*package*/ final /*synthesized*/ fun foo(/*0*/ r: (() -> kotlin.Unit)?): kotlin.Unit
public/*package*/ final /*synthesized*/ fun foo(/*0*/ r: (() -> kotlin.Unit)?): kotlin.Unit public/*package*/ final /*synthesized*/ fun foo(/*0*/ r: (() -> kotlin.Unit)?): kotlin.Unit
@@ -6,7 +6,7 @@ public final class Sub : test.Super {
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit
} }
public open class Super : java.lang.Object { public open class Super {
public constructor Super() public constructor Super()
public/*package*/ final /*synthesized*/ fun foo(/*0*/ r: (() -> kotlin.Unit)?): kotlin.Unit public/*package*/ final /*synthesized*/ fun foo(/*0*/ r: (() -> kotlin.Unit)?): kotlin.Unit
public/*package*/ open fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit public/*package*/ open fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit
@@ -6,7 +6,7 @@ public final class Sub : test.Super {
public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit
} }
public open class Super : java.lang.Object { public open class Super {
public constructor Super() public constructor Super()
public/*package*/ final /*synthesized*/ fun foo(/*0*/ r: (() -> kotlin.Unit)?): kotlin.Unit public/*package*/ final /*synthesized*/ fun foo(/*0*/ r: (() -> kotlin.Unit)?): kotlin.Unit
public/*package*/ open fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit public/*package*/ open fun foo(/*0*/ r: java.lang.Runnable?): kotlin.Unit
@@ -1,6 +1,6 @@
package test package test
public open class Base : java.lang.Object { public open class Base {
public constructor Base() public constructor Base()
public/*package*/ open fun foo(): kotlin.Unit public/*package*/ open fun foo(): kotlin.Unit
} }
@@ -1,6 +1,6 @@
package test package test
public open class Base : java.lang.Object { public open class Base {
public constructor Base() public constructor Base()
protected/*protected and package*/ open fun foo(): kotlin.Unit protected/*protected and package*/ open fun foo(): kotlin.Unit
} }
@@ -7,7 +7,7 @@ public final class InheritJavaField : test.Super {
public open override /*1*/ /*fake_override*/ fun method(): kotlin.Int public open override /*1*/ /*fake_override*/ fun method(): kotlin.Int
} }
public open class Super : java.lang.Object { public open class Super {
public constructor Super() public constructor Super()
public final var field: kotlin.Int public final var field: kotlin.Int
private final var privateField: kotlin.Int private final var privateField: kotlin.Int
@@ -2,7 +2,7 @@ package test
public /*synthesized*/ fun A(/*0*/ function: (kotlin.Int) -> kotlin.Unit): test.A public /*synthesized*/ fun A(/*0*/ function: (kotlin.Int) -> kotlin.Unit): test.A
public trait A : java.lang.Object { public trait A {
public abstract fun foo(/*0*/ p0: kotlin.Int): kotlin.Unit public abstract fun foo(/*0*/ p0: kotlin.Int): kotlin.Unit
} }
@@ -2,7 +2,7 @@ package test
public /*synthesized*/ fun J(/*0*/ function: (test.K?) -> kotlin.Unit): test.J public /*synthesized*/ fun J(/*0*/ function: (test.K?) -> kotlin.Unit): test.J
public trait J : java.lang.Object { public trait J {
public abstract fun foo(/*0*/ p0: test.K?): kotlin.Unit public abstract fun foo(/*0*/ p0: test.K?): kotlin.Unit
} }
@@ -1,14 +1,14 @@
package test package test
public trait ErrorTypes : java.lang.Object { public trait ErrorTypes {
public trait Sub : test.ErrorTypes.Super { public trait Sub : test.ErrorTypes.Super {
public abstract fun errorTypeInParameter(/*0*/ list: kotlin.List<kotlin.Array<[ERROR : Unresolved java classifier: T]>?>?): kotlin.Unit public abstract fun errorTypeInParameter(/*0*/ list: kotlin.List<kotlin.Array<[ERROR : Unresolved java classifier: T]>?>?): kotlin.Unit
public abstract override /*1*/ /*fake_override*/ fun errorTypeInParameter(/*0*/ list: kotlin.List<kotlin.Array<[ERROR : Unresolved java classifier: T]>?>?): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun errorTypeInParameter(/*0*/ list: kotlin.List<kotlin.Array<[ERROR : Unresolved java classifier: T]>?>?): kotlin.Unit
public abstract override /*1*/ fun returnErrorType(): [ERROR : Unresolved java classifier: T]? public abstract override /*1*/ fun returnErrorType(): [ERROR : Unresolved java classifier: T]?
} }
public trait Super : java.lang.Object { public trait Super {
public abstract fun errorTypeInParameter(/*0*/ list: kotlin.List<kotlin.Array<[ERROR : Unresolved java classifier: T]>?>?): kotlin.Unit public abstract fun errorTypeInParameter(/*0*/ list: kotlin.List<kotlin.Array<[ERROR : Unresolved java classifier: T]>?>?): kotlin.Unit
public abstract fun returnErrorType(): [ERROR : Unresolved java classifier: T]? public abstract fun returnErrorType(): [ERROR : Unresolved java classifier: T]?
} }
@@ -2,9 +2,9 @@ package test
public /*synthesized*/ fun NullInAnnotation(/*0*/ function: () -> kotlin.Unit): test.NullInAnnotation public /*synthesized*/ fun NullInAnnotation(/*0*/ function: () -> kotlin.Unit): test.NullInAnnotation
public trait NullInAnnotation : java.lang.Object { public trait NullInAnnotation {
test.NullInAnnotation.Ann(a = null: kotlin.Nothing?, b = {null}: kotlin.Array<kotlin.String>) public abstract fun foo(): kotlin.Unit test.NullInAnnotation.Ann(a = null: kotlin.Nothing?, b = {null}: kotlin.Array<kotlin.String>) public abstract fun foo(): kotlin.Unit
public final annotation class Ann : kotlin.Annotation { public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ a: kotlin.String, /*1*/ vararg b: kotlin.String /*kotlin.Array<kotlin.String>*/) public constructor Ann(/*0*/ a: kotlin.String, /*1*/ vararg b: kotlin.String /*kotlin.Array<kotlin.String>*/)
public abstract fun a(): kotlin.String public abstract fun a(): kotlin.String
@@ -1,20 +1,20 @@
package test package test
public trait ReturnInnerSubclassOfSupersInner : java.lang.Object { public trait ReturnInnerSubclassOfSupersInner {
public open class Sub</*0*/ B> : test.ReturnInnerSubclassOfSupersInner.Super<B> { public open class Sub</*0*/ B> : test.ReturnInnerSubclassOfSupersInner.Super<B> {
public constructor Sub</*0*/ B>() public constructor Sub</*0*/ B>()
public/*package*/ open inner class Inner : test.ReturnInnerSubclassOfSupersInner.Super.Inner { public/*package*/ open inner class Inner : test.ReturnInnerSubclassOfSupersInner.Super.Inner {
public/*package*/ constructor Inner() public/*package*/ constructor Inner()
public/*package*/ open override /*1*/ fun get(): test.ReturnInnerSubclassOfSupersInner.Sub<B>? public/*package*/ open override /*1*/ fun get(): test.ReturnInnerSubclassOfSupersInner.Sub<B>?
} }
} }
public open class Super</*0*/ A> : java.lang.Object { public open class Super</*0*/ A> {
public constructor Super</*0*/ A>() public constructor Super</*0*/ A>()
public/*package*/ open inner class Inner : java.lang.Object { public/*package*/ open inner class Inner {
public/*package*/ constructor Inner() public/*package*/ constructor Inner()
public/*package*/ open fun get(): test.ReturnInnerSubclassOfSupersInner.Super<A>? public/*package*/ open fun get(): test.ReturnInnerSubclassOfSupersInner.Super<A>?
} }
@@ -1,7 +1,7 @@
package test package test
public trait ReturnNotSubtype : java.lang.Object { public trait ReturnNotSubtype {
public trait Sub : test.ReturnNotSubtype.Super<kotlin.Boolean> { public trait Sub : test.ReturnNotSubtype.Super<kotlin.Boolean> {
public abstract override /*1*/ fun _void(): kotlin.Boolean public abstract override /*1*/ fun _void(): kotlin.Boolean
public abstract override /*1*/ fun array(): kotlin.Array<java.lang.Void>? public abstract override /*1*/ fun array(): kotlin.Array<java.lang.Void>?
@@ -10,8 +10,8 @@ public trait ReturnNotSubtype : java.lang.Object {
public abstract override /*1*/ fun string2(): kotlin.MutableList<kotlin.Boolean>? public abstract override /*1*/ fun string2(): kotlin.MutableList<kotlin.Boolean>?
public abstract override /*1*/ fun t(): java.lang.Void? public abstract override /*1*/ fun t(): java.lang.Void?
} }
public trait Super</*0*/ T> : java.lang.Object { public trait Super</*0*/ T> {
public abstract fun _void(): kotlin.Unit public abstract fun _void(): kotlin.Unit
public abstract fun array(): kotlin.Array<T>? public abstract fun array(): kotlin.Array<T>?
public abstract fun klass(): java.lang.Class<out kotlin.CharSequence?>? public abstract fun klass(): java.lang.Class<out kotlin.CharSequence?>?
@@ -1,17 +1,17 @@
package test package test
public trait WrongNumberOfGenericParameters : java.lang.Object { public trait WrongNumberOfGenericParameters {
public abstract fun o0(): test.WrongNumberOfGenericParameters.One<out kotlin.Any?>? public abstract fun o0(): test.WrongNumberOfGenericParameters.One<out kotlin.Any?>?
public abstract fun o2(): test.WrongNumberOfGenericParameters.One<[ERROR : T]>? public abstract fun o2(): test.WrongNumberOfGenericParameters.One<[ERROR : T]>?
public abstract fun t1(): test.WrongNumberOfGenericParameters.Two<out kotlin.Any?, out kotlin.Any?>? public abstract fun t1(): test.WrongNumberOfGenericParameters.Two<out kotlin.Any?, out kotlin.Any?>?
public abstract fun z(): test.WrongNumberOfGenericParameters.Zero? public abstract fun z(): test.WrongNumberOfGenericParameters.Zero?
public trait One</*0*/ T> : java.lang.Object { public trait One</*0*/ T> {
} }
public trait Two</*0*/ P, /*1*/ Q> : java.lang.Object { public trait Two</*0*/ P, /*1*/ Q> {
} }
public trait Zero : java.lang.Object { public trait Zero {
} }
} }
+1 -1
View File
@@ -2,5 +2,5 @@
null null
>>> val s = ByteArrayOutputStream() >>> val s = ByteArrayOutputStream()
null null
>>> s.getClass()!!.getName() >>> s.javaClass!!.getName()
java.io.ByteArrayOutputStream java.io.ByteArrayOutputStream
@@ -613,6 +613,11 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/dataClasses/genericParam.kt"); doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/dataClasses/genericParam.kt");
} }
@TestMetadata("kt5002.kt")
public void testKt5002() throws Exception {
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/dataClasses/kt5002.kt");
}
@TestMetadata("mixedParams.kt") @TestMetadata("mixedParams.kt")
public void testMixedParams() throws Exception { public void testMixedParams() throws Exception {
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/dataClasses/mixedParams.kt"); doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/dataClasses/mixedParams.kt");
@@ -44,12 +44,9 @@ import org.jetbrains.jet.lang.descriptors.annotations.Annotations
import org.jetbrains.jet.lang.descriptors.ClassKind import org.jetbrains.jet.lang.descriptors.ClassKind
import java.util.ArrayList import java.util.ArrayList
import org.jetbrains.jet.lang.types.checker.JetTypeChecker import org.jetbrains.jet.lang.types.checker.JetTypeChecker
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor
import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor
import org.jetbrains.jet.lang.resolve.java.lazy.resolveTopLevelClassInModule
import org.jetbrains.jet.lang.descriptors.impl.EnumClassObjectDescriptor import org.jetbrains.jet.lang.descriptors.impl.EnumClassObjectDescriptor
import org.jetbrains.jet.lang.descriptors.SourceElement
class LazyJavaClassDescriptor( class LazyJavaClassDescriptor(
private val outerC: LazyJavaResolverContextWithTypes, private val outerC: LazyJavaResolverContextWithTypes,
@@ -174,29 +171,16 @@ class LazyJavaClassDescriptor(
override fun getParameters(): List<TypeParameterDescriptor> = _parameters() override fun getParameters(): List<TypeParameterDescriptor> = _parameters()
private val _supertypes = c.storageManager.createLazyValue<Collection<JetType>> { private val _supertypes = c.storageManager.createLazyValue<Collection<JetType>> {
val supertypes = jClass.getSupertypes() jClass.getSupertypes().stream()
if (supertypes.isEmpty()) { .map {
val objectFqName = DescriptorResolverUtils.OBJECT_FQ_NAME supertype ->
if (jClass.getFqName() == objectFqName) { c.typeResolver.transformJavaType(supertype, TypeUsage.SUPERTYPE.toAttributes())
listOf(KotlinBuiltIns.getInstance().getAnyType()) }
} .filter { supertype -> !supertype.isError() }
else { .toList()
val objectType = c.resolveTopLevelClassInModule(objectFqName)?.getDefaultType() .ifEmpty {
// If java.lang.Object is not found, we simply use Any to recover listOf(KotlinBuiltIns.getInstance().getAnyType())
listOf(objectType ?: KotlinBuiltIns.getInstance().getAnyType()) }
}
}
else
supertypes.stream()
.map {
supertype ->
c.typeResolver.transformJavaType(supertype, TypeUsage.SUPERTYPE.toAttributes())
}
.filter { supertype -> !supertype.isError() }
.toList()
.ifEmpty {
listOf(KotlinBuiltIns.getInstance().getAnyType())
}
} }
override fun getSupertypes(): Collection<JetType> = _supertypes() override fun getSupertypes(): Collection<JetType> = _supertypes()
@@ -37,8 +37,6 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import java.util.*; import java.util.*;
public final class DescriptorResolverUtils { public final class DescriptorResolverUtils {
public static final FqName OBJECT_FQ_NAME = new FqName("java.lang.Object");
private DescriptorResolverUtils() { private DescriptorResolverUtils() {
} }
@@ -331,6 +331,8 @@ public class SingleAbstractMethodUtils {
} }
private static class OnlyAbstractMethodFinder { private static class OnlyAbstractMethodFinder {
private static final FqName OBJECT_FQ_NAME = new FqName("java.lang.Object");
private JavaMethod foundMethod; private JavaMethod foundMethod;
private JavaTypeSubstitutor foundClassSubstitutor; private JavaTypeSubstitutor foundClassSubstitutor;
@@ -342,7 +344,7 @@ public class SingleAbstractMethodUtils {
} }
assert classifier instanceof JavaClass : "Classifier should be a class here: " + classifier; assert classifier instanceof JavaClass : "Classifier should be a class here: " + classifier;
JavaClass javaClass = (JavaClass) classifier; JavaClass javaClass = (JavaClass) classifier;
if (DescriptorResolverUtils.OBJECT_FQ_NAME.equals(javaClass.getFqName())) { if (OBJECT_FQ_NAME.equals(javaClass.getFqName())) {
return true; return true;
} }
for (JavaMethod method : javaClass.getMethods()) { for (JavaMethod method : javaClass.getMethods()) {
@@ -19,5 +19,5 @@ package kotlin.jvm.internal
import java.io.Serializable import java.io.Serializable
public abstract class ExtensionFunctionImpl<in T, out R> : Serializable { public abstract class ExtensionFunctionImpl<in T, out R> : Serializable {
override fun toString() = "${getClass().getGenericInterfaces()[0]}" override fun toString() = "${(this as Object).getClass().getGenericInterfaces()[0]}"
} }
@@ -19,5 +19,5 @@ package kotlin.jvm.internal
import java.io.Serializable import java.io.Serializable
public abstract class FunctionImpl<out R> : Serializable { public abstract class FunctionImpl<out R> : Serializable {
override fun toString() = "${getClass().getGenericInterfaces()[0]}" override fun toString() = "${(this as Object).getClass().getGenericInterfaces()[0]}"
} }
@@ -19,5 +19,5 @@ package kotlin.reflect.jvm.internal
import java.io.Serializable import java.io.Serializable
public abstract class KMemberFunctionImpl<in T, out R> : Serializable { public abstract class KMemberFunctionImpl<in T, out R> : Serializable {
override fun toString() = "${getClass().getGenericInterfaces()[0]}" override fun toString() = "${(this as Object).getClass().getGenericInterfaces()[0]}"
} }
@@ -1,8 +1,6 @@
-CheckMemberLocationForJava.kt -CheckMemberLocationForJava.kt
-Some -Some
clone(): Any location=→Object equals(Any?): Boolean location=→Any
equals(Any?): Boolean location=→Object
finalize(): Unit location=→Object
foo123(): Unit location=→A3 foo123(): Unit location=→A3
foo12_(): Unit location=→A2 foo12_(): Unit location=→A2
foo1_3(): Unit location=→A3 foo1_3(): Unit location=→A3
@@ -11,11 +9,5 @@
foo_2_(): Unit location=→A2 foo_2_(): Unit location=→A2
foo__3(): Unit location=→A3 foo__3(): Unit location=→A3
foo___(): Unit location=→First foo___(): Unit location=→First
getClass(): Class<out Any?> location=→Object hashCode(): Int location=→Any
hashCode(): Int location=→Object toString(): String location=→Any
notify(): Unit location=→Object
notifyAll(): Unit location=→Object
toString(): String location=→Object
wait(): Unit location=→Object
wait(Long): Unit location=→Object
wait(Long, Int): Unit location=→Object
@@ -1,15 +1,7 @@
-InheritedJavaMembers.kt -InheritedJavaMembers.kt
-InheritedJavaMembers -InheritedJavaMembers
call(): String? location=→Callable call(): String? location=→Callable
clone(): Any location=→Object equals(Any?): Boolean location=→Any
equals(Any?): Boolean location=→Object hashCode(): Int location=→Any
finalize(): Unit location=→Object
getClass(): Class<out Any?> location=→Object
hashCode(): Int location=→Object
notify(): Unit location=→Object
notifyAll(): Unit location=→Object
test(): Unit test(): Unit
toString(): String location=→Object toString(): String location=→Any
wait(): Unit location=→Object
wait(Long): Unit location=→Object
wait(Long, Int): Unit location=→Object
@@ -1,14 +1,6 @@
-InheritedSAMConversion.kt -InheritedSAMConversion.kt
-KotlinTest -KotlinTest
clone(): Any location=→Object equals(Any?): Boolean location=→Any
equals(Any?): Boolean location=→Object
finalize(): Unit location=→Object
foo((() -> Unit)?): Unit foo((() -> Unit)?): Unit
getClass(): Class<out Any?> location=→Object hashCode(): Int location=→Any
hashCode(): Int location=→Object toString(): String location=→Any
notify(): Unit location=→Object
notifyAll(): Unit location=→Object
toString(): String location=→Object
wait(): Unit location=→Object
wait(Long): Unit location=→Object
wait(Long, Int): Unit location=→Object
+2 -2
View File
@@ -26,7 +26,7 @@ class PairTest {
assertTrue(p == Pair(1, "a")) assertTrue(p == Pair(1, "a"))
assertTrue(p != Pair(2, "a")) assertTrue(p != Pair(2, "a"))
assertTrue(p != Pair(1, "b")) assertTrue(p != Pair(1, "b"))
assertTrue(!(p : Object).equals(null)) assertTrue(!p.equals(null))
assertTrue((p : Any) != "") assertTrue((p : Any) != "")
} }
@@ -70,7 +70,7 @@ class TripleTest {
assertTrue(t != Triple(2, "a", 0.0)) assertTrue(t != Triple(2, "a", 0.0))
assertTrue(t != Triple(1, "b", 0.0)) assertTrue(t != Triple(1, "b", 0.0))
assertTrue(t != Triple(1, "a", 0.1)) assertTrue(t != Triple(1, "a", 0.1))
assertTrue(!(t : Object).equals(null)) assertTrue(!t.equals(null))
assertTrue((t : Any) != "") assertTrue((t : Any) != "")
} }