diff --git a/compiler/testData/diagnostics/tests/generics/PseudoRawTypes.txt b/compiler/testData/diagnostics/tests/generics/PseudoRawTypes.txt index 7d4a2f3af53..63f85ea2df7 100644 --- a/compiler/testData/diagnostics/tests/generics/PseudoRawTypes.txt +++ b/compiler/testData/diagnostics/tests/generics/PseudoRawTypes.txt @@ -6,7 +6,7 @@ package test { public open class Usage { public constructor Usage() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public/*package*/ open fun foo(/*0*/ c: (kotlin.MutableCollection..kotlin.Collection<*>?)): kotlin.Unit + public/*package*/ open fun foo(/*0*/ c: kotlin.(Mutable)Collection<(raw) kotlin.Any?>!): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } diff --git a/compiler/testData/diagnostics/tests/j+k/overrideRawType.txt b/compiler/testData/diagnostics/tests/j+k/overrideRawType.txt index 61ceeb7aa21..aed2207e1b2 100644 --- a/compiler/testData/diagnostics/tests/j+k/overrideRawType.txt +++ b/compiler/testData/diagnostics/tests/j+k/overrideRawType.txt @@ -1,10 +1,10 @@ package -public /*synthesized*/ fun Bar(/*0*/ function: ((Foo..Foo<*>?)) -> kotlin.Unit): Bar +public /*synthesized*/ fun Bar(/*0*/ function: (Foo<(raw) kotlin.CharSequence!>!) -> kotlin.Unit): Bar public interface Bar { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public abstract fun f(/*0*/ f: (Foo..Foo<*>?)): kotlin.Unit + public abstract fun f(/*0*/ f: Foo<(raw) kotlin.CharSequence!>!): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } diff --git a/compiler/testData/diagnostics/tests/j+k/recursiveRawUpperBound.txt b/compiler/testData/diagnostics/tests/j+k/recursiveRawUpperBound.txt index 4952e3db58d..5b20574478b 100644 --- a/compiler/testData/diagnostics/tests/j+k/recursiveRawUpperBound.txt +++ b/compiler/testData/diagnostics/tests/j+k/recursiveRawUpperBound.txt @@ -1,9 +1,9 @@ package -internal fun foo(/*0*/ p: X): (Bad!>..Bad!>?) +internal fun foo(/*0*/ p: X): Bad<(raw) Bad<*>!>! -public/*package*/ open class Bad>..Bad>?)> { - public/*package*/ constructor Bad>..Bad>?)>() +public/*package*/ open class Bad>!> { + public/*package*/ constructor Bad>!>() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String @@ -12,7 +12,7 @@ public/*package*/ open class Bad>..Bad>?)> { public/*package*/ open class X { public/*package*/ constructor X() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public/*package*/ open fun foo(): (Bad!>..Bad!>?) + public/*package*/ open fun foo(): Bad<(raw) Bad<*>!>! public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/arrays.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/arrays.txt index 9716b5f35a4..a97c2b9392a 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/arrays.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/arrays.txt @@ -23,16 +23,16 @@ public/*package*/ open class Test { public/*package*/ open class RawADerived : A { public/*package*/ constructor RawADerived() - public/*package*/ final override /*1*/ /*fake_override*/ var arraysOfAny: kotlin.Array<(out) kotlin.Array<(out) kotlin.Any!>!>! - public/*package*/ final override /*1*/ /*fake_override*/ var arraysOfLists: kotlin.Array<(out) kotlin.Array<(out) (kotlin.MutableList..kotlin.List<*>?)>!>! - public/*package*/ final override /*1*/ /*fake_override*/ var charSequences: kotlin.Array<(out) kotlin.CharSequence!>! - public/*package*/ final override /*1*/ /*fake_override*/ var erasedLists: kotlin.Array<(out) (kotlin.MutableList..kotlin.List<*>?)>! - public/*package*/ final override /*1*/ /*fake_override*/ var maps: kotlin.Array<(out) (kotlin.MutableMap..kotlin.Map<*, *>?)>! - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public/*package*/ final override /*1*/ /*fake_override*/ var arraysOfAny: kotlin.Array<(out) kotlin.Array<(out) kotlin.Any(raw)!>!>! + public/*package*/ final override /*1*/ /*fake_override*/ var arraysOfLists: kotlin.Array<(out) kotlin.Array<(out) kotlin.(Mutable)List<(raw) kotlin.Any?>!>!>! + public/*package*/ final override /*1*/ /*fake_override*/ var charSequences: kotlin.Array<(out) kotlin.CharSequence(raw)!>! + public/*package*/ final override /*1*/ /*fake_override*/ var erasedLists: kotlin.Array<(out) kotlin.(Mutable)List<(raw) kotlin.Any?>!>! + public/*package*/ final override /*1*/ /*fake_override*/ var maps: kotlin.Array<(out) kotlin.(Mutable)Map<(raw) kotlin.Any?, (raw) kotlin.Any?>!>! + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } // Static members - public/*package*/ final var rawAField: (A..A<*, *>?) + public/*package*/ final var rawAField: A<(raw) kotlin.CharSequence!, (raw) kotlin.Any!>! } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/genericInnerClass.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/genericInnerClass.txt index d7821979dcb..45c8e67814e 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/genericInnerClass.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/genericInnerClass.txt @@ -27,5 +27,5 @@ public/*package*/ open class Test { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String // Static members - public/*package*/ final var rawAField: (A..A<*>?) + public/*package*/ final var rawAField: A<(raw) kotlin.Any!>! } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonGenericRawMember.kt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonGenericRawMember.kt index d4ab71e0501..1291ca7195c 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonGenericRawMember.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonGenericRawMember.kt @@ -18,6 +18,7 @@ class B { // FILE: Test.java class Test { + static class RawADerived extends A {} static A rawAField = null; } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonGenericRawMember.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonGenericRawMember.txt index 0bc70cf0f40..3a1f3ff0f3b 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonGenericRawMember.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonGenericRawMember.txt @@ -25,6 +25,14 @@ public/*package*/ open class Test { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public/*package*/ open class RawADerived : A { + public/*package*/ constructor RawADerived() + public/*package*/ final override /*1*/ /*fake_override*/ var b: B(raw)! + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) + } + // Static members - public/*package*/ final var rawAField: (A..A<*>?) + public/*package*/ final var rawAField: A<(raw) kotlin.Any!>! } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonTrivialErasure.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonTrivialErasure.txt index b1711738ef0..8ba9c76af3d 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonTrivialErasure.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/nonTrivialErasure.txt @@ -3,8 +3,8 @@ package internal val strList: kotlin.List internal fun main(): kotlin.Unit -public/*package*/ open class A, A<*, *, *>, kotlin.(Mutable)List<*>!>..A, out A<*, *, *>, out kotlin.(Mutable)List<*>!>?), /*1*/ E : T!, /*2*/ F : (kotlin.MutableList..kotlin.List?)> { - public/*package*/ constructor A, A<*, *, *>, kotlin.(Mutable)List<*>!>..A, out A<*, *, *>, out kotlin.(Mutable)List<*>!>?), /*1*/ E : T!, /*2*/ F : (kotlin.MutableList..kotlin.List?)>() +public/*package*/ open class A, (raw) A<*, *, *>, (raw) kotlin.(Mutable)List<*>!>!, /*1*/ E : T!, /*2*/ F : (kotlin.MutableList..kotlin.List?)> { + public/*package*/ constructor A, (raw) A<*, *, *>, (raw) kotlin.(Mutable)List<*>!>!, /*1*/ E : T!, /*2*/ F : (kotlin.MutableList..kotlin.List?)>() public/*package*/ final var first: T! public/*package*/ final var listOfDoubles: F! public/*package*/ final var second: E! @@ -21,14 +21,14 @@ public/*package*/ open class Test { public/*package*/ open class DerivedRawA : A!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!> { public/*package*/ constructor DerivedRawA() - public/*package*/ final override /*1*/ /*fake_override*/ var first: (A!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?) - public/*package*/ final override /*1*/ /*fake_override*/ var listOfDoubles: (kotlin.MutableList..kotlin.List<*>?) - public/*package*/ final override /*1*/ /*fake_override*/ var second: (A!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?) - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public/*package*/ final override /*1*/ /*fake_override*/ var first: A<(raw) A<*, *, *>!, (raw) A<*, *, *>!, (raw) kotlin.(Mutable)List<*>!>! + public/*package*/ final override /*1*/ /*fake_override*/ var listOfDoubles: kotlin.(Mutable)List<(raw) kotlin.Any?>! + public/*package*/ final override /*1*/ /*fake_override*/ var second: A<(raw) A<*, *, *>!, (raw) A<*, *, *>!, (raw) kotlin.(Mutable)List<*>!>! + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } // Static members - public/*package*/ final var rawAField: (A!, A<*, *, *>!, kotlin.(Mutable)List<*>!>..A!, out A<*, *, *>!, out kotlin.(Mutable)List<*>!>?) + public/*package*/ final var rawAField: A<(raw) A<*, *, *>!, (raw) A<*, *, *>!, (raw) kotlin.(Mutable)List<*>!>! } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawSupertype.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawSupertype.txt index 84558052bc8..592228e6f7b 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawSupertype.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawSupertype.txt @@ -22,11 +22,11 @@ public/*package*/ open class Test { public/*package*/ open class RawADerived : A { public/*package*/ constructor RawADerived() - public/*package*/ final override /*1*/ /*fake_override*/ var x: (kotlin.MutableList..kotlin.List<*>?) - public/*package*/ open override /*1*/ /*fake_override*/ fun bar(): (A..A<*>?) - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.Any!, /*1*/ y: (kotlin.MutableList..kotlin.List<*>?)): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public/*package*/ final override /*1*/ /*fake_override*/ var x: kotlin.(Mutable)List<(raw) kotlin.Any?>! + public/*package*/ open override /*1*/ /*fake_override*/ fun bar(): A<(raw) kotlin.Any!>! + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) + public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.Any(raw)!, /*1*/ y: kotlin.(Mutable)List<(raw) kotlin.Any?>!): kotlin.Unit(raw) + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawSupertypeOverride.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawSupertypeOverride.txt index 958f39c540e..06944d836ad 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawSupertypeOverride.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawSupertypeOverride.txt @@ -12,46 +12,46 @@ public/*package*/ open class A { internal final class B1 : RawADerived { public constructor B1() internal open override /*1*/ fun bar(/*0*/ d: kotlin.Array>>): kotlin.Unit - 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(raw)?): kotlin.Boolean(raw) internal open override /*1*/ fun foo(/*0*/ x: kotlin.CharSequence, /*1*/ y: kotlin.Map, /*2*/ z: java.util.HashMap): A<*> - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } internal final class B2 : RawADerived { public constructor B2() internal open override /*1*/ fun bar(/*0*/ d: kotlin.Array>>): kotlin.Unit - 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(raw)?): kotlin.Boolean(raw) internal open override /*1*/ fun foo(/*0*/ x: kotlin.CharSequence?, /*1*/ y: kotlin.MutableMap, /*2*/ z: java.util.HashMap): A - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } internal final class B3 : RawADerived { public constructor B3() - public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) (kotlin.MutableList..kotlin.List<*>?)>!>!): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) kotlin.(Mutable)List<(raw) kotlin.Any?>!>!>!): kotlin.Unit(raw) + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) internal open fun foo(/*0*/ x: kotlin.CharSequence, /*1*/ y: kotlin.Map, /*2*/ z: java.util.HashMap): A<*> - public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence!, /*1*/ y: (kotlin.MutableMap..kotlin.Map<*, *>?), /*2*/ z: (java.util.HashMap..java.util.HashMap<*, *>?)): (A..A<*>?) - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence(raw)!, /*1*/ y: kotlin.(Mutable)Map<(raw) kotlin.Any?, (raw) kotlin.Any?>!, /*2*/ z: java.util.HashMap<(raw) kotlin.Any!, (raw) kotlin.Any!>!): A<(raw) kotlin.CharSequence!>! + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } internal final class B4 : RawADerived { public constructor B4() - public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) (kotlin.MutableList..kotlin.List<*>?)>!>!): kotlin.Unit + public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) kotlin.(Mutable)List<(raw) kotlin.Any?>!>!>!): kotlin.Unit(raw) internal open fun bar(/*0*/ d: kotlin.Array>>>): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence!, /*1*/ y: (kotlin.MutableMap..kotlin.Map<*, *>?), /*2*/ z: (java.util.HashMap..java.util.HashMap<*, *>?)): (A..A<*>?) - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) + public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence(raw)!, /*1*/ y: kotlin.(Mutable)Map<(raw) kotlin.Any?, (raw) kotlin.Any?>!, /*2*/ z: java.util.HashMap<(raw) kotlin.Any!, (raw) kotlin.Any!>!): A<(raw) kotlin.CharSequence!>! + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } public/*package*/ open class RawADerived : A { public/*package*/ constructor RawADerived() - public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) (kotlin.MutableList..kotlin.List<*>?)>!>!): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence!, /*1*/ y: (kotlin.MutableMap..kotlin.Map<*, *>?), /*2*/ z: (java.util.HashMap..java.util.HashMap<*, *>?)): (A..A<*>?) - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public/*package*/ open override /*1*/ /*fake_override*/ fun bar(/*0*/ d: kotlin.Array<(out) kotlin.Array<(out) kotlin.(Mutable)List<(raw) kotlin.Any?>!>!>!): kotlin.Unit(raw) + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) + public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.CharSequence(raw)!, /*1*/ y: kotlin.(Mutable)Map<(raw) kotlin.Any?, (raw) kotlin.Any?>!, /*2*/ z: java.util.HashMap<(raw) kotlin.Any!, (raw) kotlin.Any!>!): A<(raw) kotlin.CharSequence!>! + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawTypeInUpperBound.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawTypeInUpperBound.txt index dfe8381d5df..287087995ad 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawTypeInUpperBound.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawTypeInUpperBound.txt @@ -12,8 +12,8 @@ public open class A { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -public open class B..A<*>?)> { - public constructor B..A<*>?)>() +public open class B!> { + public constructor B!>() public/*package*/ final var field: E! public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open fun foo(): E! @@ -28,5 +28,5 @@ public open class Test { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String // Static members - public/*package*/ final var rawB: (B!>..B!>?) + public/*package*/ final var rawB: B<(raw) A<*>!>! } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawWithInProjection.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawWithInProjection.txt index 514ffc5d1b0..9c49fc52556 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawWithInProjection.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/rawWithInProjection.txt @@ -9,5 +9,5 @@ public/*package*/ open class Test { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String // Static members - public/*package*/ open fun foo(/*0*/ x: (kotlin.Comparable..kotlin.Comparable?)): kotlin.Unit + public/*package*/ open fun foo(/*0*/ x: (kotlin.Comparable<(raw) kotlin.Any?>..kotlin.Comparable?)): kotlin.Unit } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/recursiveBound.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/recursiveBound.txt index 9a799bd6f04..828a5286f50 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/recursiveBound.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/recursiveBound.txt @@ -2,7 +2,7 @@ package internal fun main(/*0*/ x: A<*>): kotlin.Unit -public interface A>..A>?)> { +public interface A>!> { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/samRaw.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/samRaw.txt index b4481eb75d6..5876f11eabd 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/samRaw.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/samRaw.txt @@ -13,10 +13,10 @@ public interface A { public/*package*/ open class B { public/*package*/ constructor B() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public/*package*/ open fun foo(/*0*/ runnable: java.lang.Runnable!, /*1*/ x: (A..A<*>?)): kotlin.Unit + public/*package*/ open fun foo(/*0*/ runnable: java.lang.Runnable!, /*1*/ x: A<(raw) kotlin.Any!>!): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String // Static members - public/*package*/ open fun bar(): (A..A<*>?) + public/*package*/ open fun bar(): A<(raw) kotlin.Any!>! } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/simple.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/simple.txt index 771688563c3..3adf34a2181 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/simple.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/simple.txt @@ -23,5 +23,5 @@ public/*package*/ open class Test { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String // Static members - public/*package*/ final var rawAField: (A..A<*>?) + public/*package*/ final var rawAField: A<(raw) kotlin.Any!>! } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/starProjectionToRaw.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/starProjectionToRaw.txt index 5e8cf3df940..9427b30134f 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/starProjectionToRaw.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/starProjectionToRaw.txt @@ -9,8 +9,8 @@ public/*package*/ open class A { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -public/*package*/ open class B..A<*>?)> { - public/*package*/ constructor B..A<*>?)>() +public/*package*/ open class B!> { + public/*package*/ constructor B!>() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String @@ -23,5 +23,5 @@ public/*package*/ open class Test { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String // Static members - public/*package*/ open fun foo(/*0*/ x: (B!>..B!>?)): kotlin.Unit + public/*package*/ open fun foo(/*0*/ x: B<(raw) A<*>!>!): kotlin.Unit } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/typeEnhancement.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/typeEnhancement.txt index 9c0fc5e2893..307e901315b 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/typeEnhancement.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/typeEnhancement.txt @@ -19,12 +19,12 @@ public/*package*/ open class Test { public/*package*/ open class DerivedRawA : A { public/*package*/ constructor DerivedRawA() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - org.jetbrains.annotations.NotNull() public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ org.jetbrains.annotations.NotNull() x: kotlin.Any, /*1*/ org.jetbrains.annotations.Nullable() y: (kotlin.MutableList?..kotlin.List<*>?)): (kotlin.MutableList..kotlin.List<*>) - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) + org.jetbrains.annotations.NotNull() public/*package*/ open override /*1*/ /*fake_override*/ fun foo(/*0*/ org.jetbrains.annotations.NotNull() x: kotlin.Any(raw), /*1*/ org.jetbrains.annotations.Nullable() y: kotlin.(Mutable)List<(raw) kotlin.Any?>?): kotlin.(Mutable)List<(raw) kotlin.Any?> + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) } // Static members - public/*package*/ final var rawField: (A..A<*>?) + public/*package*/ final var rawField: A<(raw) kotlin.Any!>! } diff --git a/compiler/testData/diagnostics/tests/regressions/kt1639-JFrame.txt b/compiler/testData/diagnostics/tests/regressions/kt1639-JFrame.txt index 9434cf345b1..a6fae8c90e1 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt1639-JFrame.txt +++ b/compiler/testData/diagnostics/tests/regressions/kt1639-JFrame.txt @@ -37,7 +37,7 @@ package test { invisible_fake final override /*1*/ /*fake_override*/ var focusCycleRoot: kotlin.Boolean invisible_fake final override /*1*/ /*fake_override*/ var focusListener: [ERROR : Unresolved java classifier: FocusListener]! invisible_fake final override /*1*/ /*fake_override*/ var focusMgr: [ERROR : Unresolved java classifier: FocusManager]! - invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalKeys: kotlin.Array<(out) (kotlin.MutableSet..kotlin.Set<*>?)>! + invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalKeys: kotlin.Array<(out) kotlin.(Mutable)Set<(raw) kotlin.Any?>!>! invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalKeysEnabled: kotlin.Boolean invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalPolicy: [ERROR : Unresolved java classifier: FocusTraversalPolicy]! invisible_fake final override /*1*/ /*fake_override*/ var focusTraversalPolicyProvider: kotlin.Boolean @@ -98,7 +98,7 @@ package test { invisible_fake final override /*1*/ /*fake_override*/ var prefSizeSet: kotlin.Boolean invisible_fake final override /*1*/ /*fake_override*/ var preserveBackgroundColor: [ERROR : Unresolved java classifier: Color]! invisible_fake final override /*1*/ /*fake_override*/ var printing: kotlin.Boolean - invisible_fake final override /*1*/ /*fake_override*/ var printingThreads: (kotlin.MutableSet..kotlin.Set<*>?) + invisible_fake final override /*1*/ /*fake_override*/ var printingThreads: kotlin.(Mutable)Set<(raw) kotlin.Any?>! invisible_fake final override /*1*/ /*fake_override*/ var resizable: kotlin.Boolean protected/*protected and package*/ final override /*1*/ /*fake_override*/ var rootPane: [ERROR : Unresolved java classifier: JRootPane]! protected/*protected and package*/ final override /*1*/ /*fake_override*/ var rootPaneCheckingEnabled: kotlin.Boolean @@ -290,7 +290,7 @@ package test { public open override /*1*/ /*fake_override*/ fun getFocusOwner(): java.awt.Component! public open override /*1*/ /*fake_override*/ fun getFocusTraversalKeys(/*0*/ p0: kotlin.Int): kotlin.(Mutable)Set! public open override /*1*/ /*fake_override*/ fun getFocusTraversalKeysEnabled(): kotlin.Boolean - invisible_fake final override /*1*/ /*fake_override*/ fun getFocusTraversalKeys_NoIDCheck(/*0*/ p0: kotlin.Int): (kotlin.MutableSet..kotlin.Set<*>?) + invisible_fake final override /*1*/ /*fake_override*/ fun getFocusTraversalKeys_NoIDCheck(/*0*/ p0: kotlin.Int): kotlin.(Mutable)Set<(raw) kotlin.Any?>! public open override /*1*/ /*fake_override*/ fun getFocusTraversalPolicy(): [ERROR : Unresolved java classifier: FocusTraversalPolicy]! public open override /*1*/ /*fake_override*/ fun getFocusableWindowState(): kotlin.Boolean [ERROR : java.beans.Transient]() public open override /*1*/ /*fake_override*/ fun getFont(): [ERROR : Unresolved java classifier: Font]! diff --git a/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt b/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt index e5c622d6968..73cf12bb01a 100644 --- a/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt +++ b/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt @@ -3,8 +3,8 @@ package test public interface RawTypeWithUpperBound { public interface Bar { - public abstract fun f(/*0*/ p0: (test.RawTypeWithUpperBound.Foo..test.RawTypeWithUpperBound.Foo<*>?)): kotlin.Unit - public abstract fun g(/*0*/ p0: kotlin.(Mutable)List<(test.RawTypeWithUpperBound.Foo..test.RawTypeWithUpperBound.Foo<*>?)>!): kotlin.Unit + public abstract fun f(/*0*/ p0: test.RawTypeWithUpperBound.Foo<(raw) kotlin.CharSequence!>!): kotlin.Unit + public abstract fun g(/*0*/ p0: kotlin.(Mutable)List!>!): kotlin.Unit } public interface Foo { diff --git a/compiler/testData/loadJava/compiledJava/RawUpperBound.txt b/compiler/testData/loadJava/compiledJava/RawUpperBound.txt index 8f78dcda07d..24aee62bd08 100644 --- a/compiler/testData/loadJava/compiledJava/RawUpperBound.txt +++ b/compiler/testData/loadJava/compiledJava/RawUpperBound.txt @@ -1,4 +1,4 @@ package test -public interface RawUpperBound>..test.RawUpperBound>?)> { +public interface RawUpperBound>!> { } diff --git a/compiler/testData/loadJava/compiledJava/RecursiveRawUpperBound.txt b/compiler/testData/loadJava/compiledJava/RecursiveRawUpperBound.txt index 18ebd33c64f..60f00553373 100644 --- a/compiler/testData/loadJava/compiledJava/RecursiveRawUpperBound.txt +++ b/compiler/testData/loadJava/compiledJava/RecursiveRawUpperBound.txt @@ -1,4 +1,4 @@ package test -public interface RecursiveRawUpperBound>..test.RecursiveRawUpperBound>?)> { +public interface RecursiveRawUpperBound>!> { } diff --git a/compiler/testData/loadJava/compiledJava/RecursiveWildcardUpperBound.txt b/compiler/testData/loadJava/compiledJava/RecursiveWildcardUpperBound.txt index 5f298bdd53e..b9db7266f24 100644 --- a/compiler/testData/loadJava/compiledJava/RecursiveWildcardUpperBound.txt +++ b/compiler/testData/loadJava/compiledJava/RecursiveWildcardUpperBound.txt @@ -1,4 +1,4 @@ package test -public interface RecursiveWildcardUpperBound>..test.RecursiveWildcardUpperBound>?)> { +public interface RecursiveWildcardUpperBound>!> { } diff --git a/compiler/testData/loadJava/compiledJava/rendering/Rendering.txt b/compiler/testData/loadJava/compiledJava/rendering/Rendering.txt index 95e545a5bd7..62ef3aff68f 100644 --- a/compiler/testData/loadJava/compiledJava/rendering/Rendering.txt +++ b/compiler/testData/loadJava/compiledJava/rendering/Rendering.txt @@ -42,8 +42,8 @@ public open class Rendering { } public/*package*/ interface H_Raw { - public abstract fun foo1(/*0*/ p0: (kotlin.MutableList..kotlin.List<*>?)): kotlin.Unit - public abstract fun foo2(/*0*/ p0: (test.Rendering.D_SuperG..test.Rendering.D_SuperG<*>?)): kotlin.Unit + public abstract fun foo1(/*0*/ p0: kotlin.(Mutable)List<(raw) kotlin.Any?>!): kotlin.Unit + public abstract fun foo2(/*0*/ p0: test.Rendering.D_SuperG<(raw) kotlin.Any!>!): kotlin.Unit } public/*package*/ interface I_Wildcard { diff --git a/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperTypeWithRecursiveBound.txt b/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperTypeWithRecursiveBound.txt index ec049a63a2a..eacb121b698 100644 --- a/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperTypeWithRecursiveBound.txt +++ b/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperTypeWithRecursiveBound.txt @@ -6,8 +6,8 @@ public open class RawSuperTypeWithRecursiveBound { public open inner class Derived : test.RawSuperTypeWithRecursiveBound.Super!> { public constructor Derived() public open override /*1*/ fun dummy(): kotlin.Unit - public open override /*1*/ fun foo(/*0*/ p0: (test.RawSuperTypeWithRecursiveBound.Super!>..test.RawSuperTypeWithRecursiveBound.Super!>?)): kotlin.Unit public open fun foo(/*0*/ p0: kotlin.Any!): kotlin.Unit + public open override /*1*/ fun foo(/*0*/ p0: test.RawSuperTypeWithRecursiveBound.Super<(raw) test.RawSuperTypeWithRecursiveBound.Super<*>!>!): kotlin.Unit } public interface Super!> { diff --git a/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperTypeWithRecursiveBoundMultipleParameters.txt b/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperTypeWithRecursiveBoundMultipleParameters.txt index 6abec577b92..eb531f53423 100644 --- a/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperTypeWithRecursiveBoundMultipleParameters.txt +++ b/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperTypeWithRecursiveBoundMultipleParameters.txt @@ -6,8 +6,8 @@ public open class RawSuperTypeWithRecursiveBoundMultipleParameters { public open inner class Derived : test.RawSuperTypeWithRecursiveBoundMultipleParameters.Super!> { public constructor Derived() public open override /*1*/ fun dummy(): kotlin.Unit - public open override /*1*/ fun foo(/*0*/ p0: kotlin.Any!, /*1*/ p1: (test.RawSuperTypeWithRecursiveBoundMultipleParameters.Super!>..test.RawSuperTypeWithRecursiveBoundMultipleParameters.Super<*, out test.RawSuperTypeWithRecursiveBoundMultipleParameters.Super<*, *>!>?)): kotlin.Unit public open fun foo(/*0*/ p0: kotlin.Any!, /*1*/ p1: kotlin.Any!): kotlin.Unit + public open override /*1*/ fun foo(/*0*/ p0: kotlin.Any!, /*1*/ p1: test.RawSuperTypeWithRecursiveBoundMultipleParameters.Super<(raw) kotlin.Any!, (raw) test.RawSuperTypeWithRecursiveBoundMultipleParameters.Super<*, *>!>!): kotlin.Unit } public interface Super!> { diff --git a/compiler/testData/loadJava/compiledJava/signaturePropagation/SubclassWithRawType.txt b/compiler/testData/loadJava/compiledJava/signaturePropagation/SubclassWithRawType.txt index ffa40ef64c4..40b22b7afd5 100644 --- a/compiler/testData/loadJava/compiledJava/signaturePropagation/SubclassWithRawType.txt +++ b/compiler/testData/loadJava/compiledJava/signaturePropagation/SubclassWithRawType.txt @@ -4,22 +4,22 @@ public interface SubclassWithRawType { public interface Sub : test.SubclassWithRawType.Super { public abstract override /*1*/ fun array1(): kotlin.Array<(out) kotlin.(Mutable)List!>! - public abstract override /*1*/ fun array2(): kotlin.Array<(out) (kotlin.MutableList..kotlin.List<*>?)>! + public abstract override /*1*/ fun array2(): kotlin.Array<(out) kotlin.(Mutable)List<(raw) kotlin.Any?>!>! public abstract override /*1*/ fun boundWildcard1(): (kotlin.MutableList!>..kotlin.List!>?) - public abstract override /*1*/ fun boundWildcard2(): kotlin.(Mutable)List..kotlin.List<*>?)>! + public abstract override /*1*/ fun boundWildcard2(): kotlin.(Mutable)List!>! public abstract override /*1*/ fun simple1(): kotlin.(Mutable)List! public abstract override /*1*/ fun simple2(): kotlin.(Mutable)List!>! - public abstract override /*1*/ fun simple3(): (kotlin.MutableList..kotlin.List<*>?) - public abstract override /*1*/ fun wildcard(): (kotlin.MutableList..kotlin.List<*>?) + public abstract override /*1*/ fun simple3(): kotlin.(Mutable)List<(raw) kotlin.Any?>! + public abstract override /*1*/ fun wildcard(): kotlin.(Mutable)List<(raw) kotlin.Any?>! } public interface Super { - public abstract fun array1(): kotlin.Array<(out) (kotlin.MutableList..kotlin.List<*>?)>! + public abstract fun array1(): kotlin.Array<(out) kotlin.(Mutable)List<(raw) kotlin.Any?>!>! public abstract fun array2(): kotlin.Array<(out) kotlin.(Mutable)List!>! - public abstract fun boundWildcard1(): (kotlin.MutableList..kotlin.List<*>?)>..kotlin.List<(kotlin.MutableList..kotlin.List<*>?)>?) + public abstract fun boundWildcard1(): (kotlin.MutableList!>..kotlin.List!>?) public abstract fun boundWildcard2(): kotlin.(Mutable)List!>! - public abstract fun simple1(): (kotlin.MutableList..kotlin.List<*>?) - public abstract fun simple2(): (kotlin.MutableList..kotlin.List<*>?) + public abstract fun simple1(): kotlin.(Mutable)List<(raw) kotlin.Any?>! + public abstract fun simple2(): kotlin.(Mutable)List<(raw) kotlin.Any?>! public abstract fun simple3(): kotlin.(Mutable)List! public abstract fun wildcard(): kotlin.(Mutable)List<*>! } diff --git a/compiler/testData/loadJava/sourceJava/WrongNumberOfGenericParameters.txt b/compiler/testData/loadJava/sourceJava/WrongNumberOfGenericParameters.txt index da2a5d30a53..bd79cc1c916 100644 --- a/compiler/testData/loadJava/sourceJava/WrongNumberOfGenericParameters.txt +++ b/compiler/testData/loadJava/sourceJava/WrongNumberOfGenericParameters.txt @@ -1,9 +1,9 @@ package test public interface WrongNumberOfGenericParameters { - public abstract fun o0(): (test.WrongNumberOfGenericParameters.One..test.WrongNumberOfGenericParameters.One<*>?) + public abstract fun o0(): test.WrongNumberOfGenericParameters.One<(raw) kotlin.Any!>! public abstract fun o2(): test.WrongNumberOfGenericParameters.One<[ERROR : T]>! - public abstract fun t1(): (test.WrongNumberOfGenericParameters.Two..test.WrongNumberOfGenericParameters.Two<*, *>?) + public abstract fun t1(): test.WrongNumberOfGenericParameters.Two<(raw) kotlin.Any!, (raw) kotlin.Any!>! public abstract fun z(): test.WrongNumberOfGenericParameters.Zero! public interface One { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt index eff04735a2a..5d344bcf58f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt @@ -20,6 +20,8 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.load.java.components.TypeUsage +import org.jetbrains.kotlin.renderer.CustomFlexibleRendering +import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.types.* public object RawTypeCapabilities : TypeCapabilities { @@ -27,10 +29,49 @@ public object RawTypeCapabilities : TypeCapabilities { override val substitution = RawSubstitution } + private object RawFlexibleRendering : CustomFlexibleRendering { + private fun DescriptorRenderer.renderArguments(jetType: JetType) = jetType.arguments.map { renderTypeProjection(it) } + + private fun String.replaceArgs(newArgs: String): String { + if (!contains('<')) return this + return "${substringBefore('<')}<$newArgs>${substringAfterLast('>')}" + } + + override fun renderInflexible(type: JetType, renderer: DescriptorRenderer): String? { + if (type.arguments.isNotEmpty()) return null + + return StringBuilder { + append(renderer.renderTypeConstructor(type.constructor)) + append("(raw)") + if (type.isMarkedNullable) append('?') + }.toString() + } + + override fun renderBounds(flexibility: Flexibility, renderer: DescriptorRenderer): Pair? { + val lowerArgs = renderer.renderArguments(flexibility.lowerBound) + val upperArgs = renderer.renderArguments(flexibility.upperBound) + + val lowerRendered = renderer.renderType(flexibility.lowerBound) + val upperRendered = renderer.renderType(flexibility.upperBound) + + if (!upperArgs.isNotEmpty()) return null + + val newArgs = lowerArgs.map { "(raw) $it" }.join(", ") + val newUpper = + if (lowerArgs.zip(upperArgs).all { onlyOutDiffers(it.first, it.second) }) + upperRendered.replaceArgs(newArgs) + else upperRendered + return Pair(lowerRendered.replaceArgs(newArgs), newUpper) + } + + private fun onlyOutDiffers(first: String, second: String) = first == second.removePrefix("out ") || second == "*" + } + override fun getCapability(capabilityClass: Class): T? { @suppress("UNCHECKED_CAST") return when(capabilityClass) { javaClass() -> RawSubstitutionCapability as T + javaClass() -> RawFlexibleRendering as T else -> null } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/CustomRendering.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/CustomRendering.kt new file mode 100644 index 00000000000..5533f03cd76 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/CustomRendering.kt @@ -0,0 +1,26 @@ +/* + * 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 org.jetbrains.kotlin.renderer + +import org.jetbrains.kotlin.types.Flexibility +import org.jetbrains.kotlin.types.JetType +import org.jetbrains.kotlin.types.TypeCapability + +public interface CustomFlexibleRendering : TypeCapability { + public fun renderInflexible(type: JetType, renderer: DescriptorRenderer): String? + public fun renderBounds(flexibility: Flexibility, renderer: DescriptorRenderer): Pair? +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index f5cf848e27a..f7c2a847ed7 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqNameBase import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.JetType +import org.jetbrains.kotlin.types.TypeConstructor import org.jetbrains.kotlin.types.TypeProjection public interface DescriptorRenderer : Renderer { @@ -36,6 +37,10 @@ public interface DescriptorRenderer : Renderer { public fun renderTypeArguments(typeArguments: List): String + public fun renderTypeProjection(typeProjection: TypeProjection): String + + public fun renderTypeConstructor(typeConstructor: TypeConstructor): String + public fun renderClassifierName(klass: ClassifierDescriptor): String public fun renderAnnotation(annotation: AnnotationDescriptor): String diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index d32eb48eb93..d70d427b0d6 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -171,12 +171,17 @@ internal class DescriptorRendererImpl( } private fun renderFlexibleTypeWithBothBounds(lower: JetType, upper: JetType): String { - return "(" + renderNormalizedType(lower) + ".." + renderNormalizedType(upper) + ")" + return renderFlexibleTypeWithBothBounds(renderNormalizedType(lower), renderNormalizedType(upper)) } + private fun renderFlexibleTypeWithBothBounds(lower: String, upper: String) = "($lower..$upper)" + private fun renderInflexibleType(type: JetType): String { assert(!type.isFlexible()) { "Flexible types not allowed here: " + renderNormalizedType(type) } + val customResult = type.getCapability()?.renderInflexible(type, this) + if (customResult != null) return customResult + if (type == CANT_INFER_FUNCTION_PARAM_TYPE || TypeUtils.isDontCarePlaceholder(type)) { return "???" } @@ -204,8 +209,8 @@ internal class DescriptorRendererImpl( val lower = type.flexibility().lowerBound val upper = type.flexibility().upperBound - val lowerRendered = renderInflexibleType(lower) - val upperRendered = renderInflexibleType(upper) + val (lowerRendered, upperRendered) = type.getCapability()?.renderBounds(type.flexibility(), this) + ?: Pair(renderInflexibleType(lower), renderInflexibleType(upper)) if (differsOnlyInNullability(lowerRendered, upperRendered)) { if (upperRendered.startsWith("(")) { @@ -227,7 +232,7 @@ internal class DescriptorRendererImpl( // Foo[] -> Array<(out) Foo!>! val array = replacePrefixes(lowerRendered, kotlinPrefix + escape("Array<"), upperRendered, kotlinPrefix + escape("Array): String { @@ -248,7 +253,7 @@ internal class DescriptorRendererImpl( sb.append(type.getConstructor().toString()) // Debug name of an error type is more informative } else { - sb.append(renderTypeName(type.getConstructor())) + sb.append(renderTypeConstructor(type.getConstructor())) } sb.append(renderTypeArguments(type.getArguments())) if (type.isMarkedNullable()) { @@ -257,7 +262,7 @@ internal class DescriptorRendererImpl( return sb.toString() } - private fun renderTypeName(typeConstructor: TypeConstructor): String { + override fun renderTypeConstructor(typeConstructor: TypeConstructor): String { val cd = typeConstructor.getDeclarationDescriptor() return when (cd) { is TypeParameterDescriptor -> renderName(cd.getName()) @@ -267,6 +272,10 @@ internal class DescriptorRendererImpl( } } + override fun renderTypeProjection(typeProjection: TypeProjection) = StringBuilder { + appendTypeProjections(listOf(typeProjection), this) + }.toString() + private fun appendTypeProjections(typeProjections: List, builder: StringBuilder) { typeProjections.map { if (it.isStarProjection()) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt b/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt index 32f1d30662b..def12b533bc 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.types import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.types.checker.JetTypeChecker import kotlin.platform.platformStatic diff --git a/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/A.java b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/A.java new file mode 100644 index 00000000000..bf7d9e79c33 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/A.java @@ -0,0 +1,5 @@ +package foo; + +public abstract class A implements B { + +} diff --git a/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/B.java b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/B.java new file mode 100644 index 00000000000..4998d0e63ae --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/B.java @@ -0,0 +1,6 @@ +package foo; +import java.util.*; + +public interface B { + B foo(List x, String y); +} diff --git a/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt new file mode 100644 index 00000000000..9c69e549ef2 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt @@ -0,0 +1,5 @@ +import foo.A + +class C : A() { + +} diff --git a/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt.after new file mode 100644 index 00000000000..85dc686f676 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt.after @@ -0,0 +1,8 @@ +import foo.A +import foo.B + +class C : A() { + override fun foo(x: MutableList?, y: String?): B<*>? { + throw UnsupportedOperationException() + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.java index d1646a1ec8e..fbf38290579 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.java @@ -63,6 +63,10 @@ public final class OverrideImplementTest extends AbstractOverrideImplementTest { doImplementFileTest(); } + public void testImplementJavaRawSubclass() { + doImplementDirectoryTest(); + } + public void testProperty() { doImplementFileTest(); } diff --git a/spec-docs/flexible-java-types.md b/spec-docs/flexible-java-types.md index d8a4cc1bdf0..9fde075f640 100644 --- a/spec-docs/flexible-java-types.md +++ b/spec-docs/flexible-java-types.md @@ -69,11 +69,17 @@ k(int[]) = IntArray Raw Java types (see https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.8 for clarification) are loaded as usual flexible types with special arguments projections. ``` -Raw(G..F) = (G..F) // T1 and T2 have invariant or `out` variance -Raw(G..F) = (G..F) // T1 and T2 have `in` variance -``` +Raw(G) = (G..G?) // T is a generic parameter of G and it's invariant or has `out` variance. + // notation: G<(raw) ErasedUpperBound(T)>! -where `G..F` is initially loaded flexible type with yet unsubstituted type parameters. +Raw(G) = (G..G?) // T is a generic parameter of G and it has `in` variance. + +Raw(java.util.Collection) = (MutableCollection..Collection) + // notation: (Mutable)Collection<(raw) ErasedUpperBound(T)>! + +Raw(A) = (A..A?) // A has no generic parameter + // notation: A(raw)! +``` `ErasedUpperBound` defined as follows: @@ -90,22 +96,24 @@ that should be handled properly, e.g. by loading such ErasedUpperBound as Error Examples: ``` -Raw(java.util.concurrent.Future) = (Future..Future?) -Raw(java.util.Collection) = (MutableCollection..Collection?) +Raw(java.util.concurrent.Future) = (Future..Future?) // notation: Future<(raw) Any!>! class A {} -Raw(A) = (A..A) +Raw(A) = (A..A?) // notation: A<(raw) CharSequence!>! -Raw(java.lang.Enum) = (Enum>..Enum>?) +Raw(java.lang.Enum) = (Enum!>..Enum!>?) // notation: Enum<(raw) Enum<*>!>! ``` Also raw types have special types of contained members, each of them is replaced with it's JVM erasure representation: ``` Erase(T) = Erase(UpperBound(T)) // T is a type variable -Erase(Array) = Array -Erase(G) = Raw(G) // G is a type constructed with argument t mapped onto parameter T -Erase(A) = A // A is a type constructor without parameters +Erase(Array) = Array +Erase(G) = Raw(G) +Erase(A) = Raw(A) // `A` is a type constructor without parameters + // NOTE: The latter rule needed for proper erasure inside member scope of A + // E.g. if A has property with type `Foo`` + // then it becomes `Foo<(raw) Any!>` inside Erase(A) ``` ## Overriding