From 0f0f20524882cca7fae56fc9b9bfbf66f1561d8f Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 2 Feb 2015 19:51:44 +0300 Subject: [PATCH] Serializing information about star projections --- .../compiledJava/RawTypeWithUpperBound.txt | 4 +- .../annotations/ClassObjectArrayInParam.txt | 6 +- .../annotations/ClassObjectInParam.txt | 4 +- .../kotlinSignature/StarProjection.txt | 2 +- .../compiledJava/rendering/Rendering.txt | 8 +- .../sam/adapters/NonTrivialFunctionType.txt | 2 +- .../signaturePropagation/RawSuperType.txt | 2 +- .../SubclassWithRawType.txt | 14 +-- .../fromLoadJava/UnboundWildcard.txt | 2 +- .../kotlinSignature/StarProjection.txt | 2 +- .../platformTypes/notnullTypeArgument.txt | 6 +- .../platformTypes/nullableTypeArgument.txt | 6 +- .../compiledKotlin/prop/CollectionSize.txt | 4 +- .../compiledKotlin/type/ListOfStar.txt | 2 +- .../loadJava/sourceJava/ReturnNotSubtype.txt | 2 +- .../WrongNumberOfGenericParameters.txt | 4 +- .../kotlin/serialization/DebugProtoBuf.java | 116 ++++++++++-------- core/serialization/src/descriptors.proto | 1 + .../serialization/DescriptorSerializer.java | 14 ++- .../kotlin/serialization/ProtoBuf.java | 9 ++ .../deserialization/TypeDeserializer.kt | 5 +- .../deserialization/protoEnumMapping.kt | 1 + .../stubBuilder/TypeClsStubBuilder.kt | 9 +- idea/testData/stubs/StarProjection.expected | 8 ++ idea/testData/stubs/StarProjection.kt | 1 + .../idea/stubs/StubBuilderTestGenerated.java | 6 + 26 files changed, 144 insertions(+), 96 deletions(-) create mode 100644 idea/testData/stubs/StarProjection.expected create mode 100644 idea/testData/stubs/StarProjection.kt diff --git a/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt b/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt index 51c84daa8f0..2da9f8050de 100644 --- a/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt +++ b/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt @@ -3,8 +3,8 @@ package test public trait RawTypeWithUpperBound { public trait Bar { - public abstract fun f(/*0*/ p0: test.RawTypeWithUpperBound.Foo!): kotlin.Unit - public abstract fun g(/*0*/ p0: kotlin.(Mutable)List!>!): kotlin.Unit + public abstract fun f(/*0*/ p0: test.RawTypeWithUpperBound.Foo<*>!): kotlin.Unit + public abstract fun g(/*0*/ p0: kotlin.(Mutable)List!>!): kotlin.Unit } public trait Foo { diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.txt index 36c0ff70063..be0fd0de016 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.txt @@ -4,11 +4,11 @@ public open class ClassObjectArrayInParam { public constructor ClassObjectArrayInParam() public final annotation class Anno : kotlin.Annotation { - public constructor Anno(/*0*/ vararg value: java.lang.Class /*kotlin.Array>*/) - public abstract fun value(): kotlin.Array> + public constructor Anno(/*0*/ vararg value: java.lang.Class<*> /*kotlin.Array>*/) + public abstract fun value(): kotlin.Array> } - test.ClassObjectArrayInParam.Anno(value = {test.ClassObjectArrayInParam.class, test.ClassObjectArrayInParam.Nested.class, kotlin.String.class}: kotlin.Array>) public open class Nested { + test.ClassObjectArrayInParam.Anno(value = {test.ClassObjectArrayInParam.class, test.ClassObjectArrayInParam.Nested.class, kotlin.String.class}: kotlin.Array>) public open class Nested { public constructor Nested() } } diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.txt index 49ec309a11b..93e0a77bac8 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.txt @@ -4,8 +4,8 @@ public open class ClassObjectInParam { public constructor ClassObjectInParam() public final annotation class Anno : kotlin.Annotation { - public constructor Anno(/*0*/ value: java.lang.Class) - public abstract fun value(): java.lang.Class + public constructor Anno(/*0*/ value: java.lang.Class<*>) + public abstract fun value(): java.lang.Class<*> } test.ClassObjectInParam.Anno(value = test.ClassObjectInParam.class: java.lang.Class) public open class Nested { diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/StarProjection.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/StarProjection.txt index d072ac17cbb..8beb7b953e9 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/StarProjection.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/StarProjection.txt @@ -2,7 +2,7 @@ package test public final class StarProjection { public constructor StarProjection() - public final fun foo(): test.StarProjection.MyClass! + public final fun foo(): test.StarProjection.MyClass<*>! public trait MyClass { } diff --git a/compiler/testData/loadJava/compiledJava/rendering/Rendering.txt b/compiler/testData/loadJava/compiledJava/rendering/Rendering.txt index d19e9fbc6d8..276ee0b489a 100644 --- a/compiler/testData/loadJava/compiledJava/rendering/Rendering.txt +++ b/compiler/testData/loadJava/compiledJava/rendering/Rendering.txt @@ -42,16 +42,16 @@ public open class Rendering { } public/*package*/ trait H_Raw { - public abstract fun foo1(/*0*/ p0: (kotlin.MutableList..kotlin.List?)): kotlin.Unit - public abstract fun foo2(/*0*/ p0: test.Rendering.D_SuperG!): kotlin.Unit + public abstract fun foo1(/*0*/ p0: kotlin.(Mutable)List<*>!): kotlin.Unit + public abstract fun foo2(/*0*/ p0: test.Rendering.D_SuperG<*>!): kotlin.Unit } public/*package*/ trait I_Wildcard { public abstract fun foo1(/*0*/ p0: (kotlin.MutableList..kotlin.List?)): kotlin.Unit public abstract fun foo2(/*0*/ p0: kotlin.(Mutable)List!): kotlin.Unit - public abstract fun foo3(/*0*/ p0: (kotlin.MutableList..kotlin.List?)): kotlin.Unit + public abstract fun foo3(/*0*/ p0: kotlin.(Mutable)List<*>!): kotlin.Unit public abstract fun foo4(/*0*/ p0: test.Rendering.D_SuperG!): kotlin.Unit public abstract fun foo5(/*0*/ p0: test.Rendering.D_SuperG!): kotlin.Unit - public abstract fun foo6(/*0*/ p0: test.Rendering.D_SuperG!): kotlin.Unit + public abstract fun foo6(/*0*/ p0: test.Rendering.D_SuperG<*>!): kotlin.Unit } } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/NonTrivialFunctionType.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/NonTrivialFunctionType.txt index e8338dfd6b2..4489b184bae 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/NonTrivialFunctionType.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/NonTrivialFunctionType.txt @@ -8,5 +8,5 @@ public open class NonTrivialFunctionType { public open fun foo(/*0*/ p0: java.util.Comparator!): kotlin.Unit public final /*synthesized*/ fun wildcardBound(/*0*/ p0: ((kotlin.CharSequence!, kotlin.CharSequence!) -> kotlin.Int)!): kotlin.Unit public open fun wildcardBound(/*0*/ p0: java.util.Comparator!): kotlin.Unit - public open fun wildcardUnbound(/*0*/ p0: java.util.Comparator!): kotlin.Unit + public open fun wildcardUnbound(/*0*/ p0: java.util.Comparator<*>!): kotlin.Unit } diff --git a/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperType.txt b/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperType.txt index 0f754af9ee5..35efb4e9903 100644 --- a/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperType.txt +++ b/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperType.txt @@ -3,7 +3,7 @@ package test public open class RawSuperType { public constructor RawSuperType() - public open inner class Derived : test.RawSuperType.Super { + public open inner class Derived : test.RawSuperType.Super<*> { public constructor Derived() public open override /*1*/ fun dummy(): kotlin.Unit public open override /*1*/ fun foo(/*0*/ p0: kotlin.Any!): kotlin.Unit diff --git a/compiler/testData/loadJava/compiledJava/signaturePropagation/SubclassWithRawType.txt b/compiler/testData/loadJava/compiledJava/signaturePropagation/SubclassWithRawType.txt index d5ab48bfac4..ec0833f87c1 100644 --- a/compiler/testData/loadJava/compiledJava/signaturePropagation/SubclassWithRawType.txt +++ b/compiler/testData/loadJava/compiledJava/signaturePropagation/SubclassWithRawType.txt @@ -4,23 +4,23 @@ public trait SubclassWithRawType { public trait 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<*>!>! 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 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<*>! + public abstract override /*1*/ fun wildcard(): kotlin.(Mutable)List<*>! } public trait Super { - public abstract fun array1(): kotlin.Array<(out) (kotlin.MutableList..kotlin.List?)>! + public abstract fun array1(): kotlin.Array<(out) kotlin.(Mutable)List<*>!>! 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 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<*>! + public abstract fun simple2(): kotlin.(Mutable)List<*>! public abstract fun simple3(): kotlin.(Mutable)List! - public abstract fun wildcard(): (kotlin.MutableList..kotlin.List?) + public abstract fun wildcard(): kotlin.(Mutable)List<*>! } } diff --git a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/UnboundWildcard.txt b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/UnboundWildcard.txt index eea5cf0d9bc..5231fc80e8a 100644 --- a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/UnboundWildcard.txt +++ b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/UnboundWildcard.txt @@ -2,7 +2,7 @@ package test public final class UnboundWildcard { /*primary*/ public constructor UnboundWildcard() - public final fun foo(): test.UnboundWildcard.MyClass? + public final fun foo(): test.UnboundWildcard.MyClass<*>? public trait MyClass { } diff --git a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/StarProjection.txt b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/StarProjection.txt index baec7c8ceec..2e42a18a3da 100644 --- a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/StarProjection.txt +++ b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/StarProjection.txt @@ -2,7 +2,7 @@ package test public final class StarProjection { /*primary*/ public constructor StarProjection() - public final fun foo(): test.StarProjection.MyClass + public final fun foo(): test.StarProjection.MyClass<*> public trait MyClass { } diff --git a/compiler/testData/loadJava/compiledKotlin/platformTypes/notnullTypeArgument.txt b/compiler/testData/loadJava/compiledKotlin/platformTypes/notnullTypeArgument.txt index 4d5b117755b..f17b790ad94 100644 --- a/compiler/testData/loadJava/compiledKotlin/platformTypes/notnullTypeArgument.txt +++ b/compiler/testData/loadJava/compiledKotlin/platformTypes/notnullTypeArgument.txt @@ -9,7 +9,7 @@ internal final class C : java.util.ArrayList { public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: kotlin.String!): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: (kotlin.MutableCollection..kotlin.Collection?)): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ index: kotlin.Int, /*1*/ c: (kotlin.MutableCollection..kotlin.Collection?)): kotlin.Boolean - invisible_fake open override /*1*/ /*fake_override*/ fun batchRemove(/*0*/ p0: (kotlin.MutableCollection..kotlin.Collection?), /*1*/ p1: kotlin.Boolean): kotlin.Boolean + invisible_fake open override /*1*/ /*fake_override*/ fun batchRemove(/*0*/ p0: kotlin.(Mutable)Collection<*>!, /*1*/ p1: kotlin.Boolean): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any! public open override /*1*/ /*fake_override*/ fun contains(/*0*/ o: kotlin.Any!): kotlin.Boolean @@ -32,9 +32,9 @@ internal final class C : java.util.ArrayList { invisible_fake open override /*1*/ /*fake_override*/ fun readObject(/*0*/ p0: java.io.ObjectInputStream!): kotlin.Unit public open override /*1*/ /*fake_override*/ fun remove(/*0*/ o: kotlin.Any!): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun remove(/*0*/ index: kotlin.Int): kotlin.String! - public open override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: (kotlin.MutableCollection..kotlin.Collection?)): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.(Mutable)Collection<*>!): kotlin.Boolean protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun removeRange(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: (kotlin.MutableCollection..kotlin.Collection?)): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.(Mutable)Collection<*>!): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String!): kotlin.String! public open override /*1*/ /*fake_override*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.(Mutable)List! diff --git a/compiler/testData/loadJava/compiledKotlin/platformTypes/nullableTypeArgument.txt b/compiler/testData/loadJava/compiledKotlin/platformTypes/nullableTypeArgument.txt index efd1363eeff..715a6f09375 100644 --- a/compiler/testData/loadJava/compiledKotlin/platformTypes/nullableTypeArgument.txt +++ b/compiler/testData/loadJava/compiledKotlin/platformTypes/nullableTypeArgument.txt @@ -9,7 +9,7 @@ internal final class C : java.util.ArrayList { public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: kotlin.String?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: (kotlin.MutableCollection..kotlin.Collection?)): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ index: kotlin.Int, /*1*/ c: (kotlin.MutableCollection..kotlin.Collection?)): kotlin.Boolean - invisible_fake open override /*1*/ /*fake_override*/ fun batchRemove(/*0*/ p0: (kotlin.MutableCollection..kotlin.Collection?), /*1*/ p1: kotlin.Boolean): kotlin.Boolean + invisible_fake open override /*1*/ /*fake_override*/ fun batchRemove(/*0*/ p0: kotlin.(Mutable)Collection<*>!, /*1*/ p1: kotlin.Boolean): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any! public open override /*1*/ /*fake_override*/ fun contains(/*0*/ o: kotlin.Any!): kotlin.Boolean @@ -32,9 +32,9 @@ internal final class C : java.util.ArrayList { invisible_fake open override /*1*/ /*fake_override*/ fun readObject(/*0*/ p0: java.io.ObjectInputStream!): kotlin.Unit public open override /*1*/ /*fake_override*/ fun remove(/*0*/ o: kotlin.Any!): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun remove(/*0*/ index: kotlin.Int): kotlin.String? - public open override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: (kotlin.MutableCollection..kotlin.Collection?)): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.(Mutable)Collection<*>!): kotlin.Boolean protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun removeRange(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: (kotlin.MutableCollection..kotlin.Collection?)): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.(Mutable)Collection<*>!): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String?): kotlin.String? public open override /*1*/ /*fake_override*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.(Mutable)List! diff --git a/compiler/testData/loadJava/compiledKotlin/prop/CollectionSize.txt b/compiler/testData/loadJava/compiledKotlin/prop/CollectionSize.txt index c6545452b46..93815bd2265 100644 --- a/compiler/testData/loadJava/compiledKotlin/prop/CollectionSize.txt +++ b/compiler/testData/loadJava/compiledKotlin/prop/CollectionSize.txt @@ -1,4 +1,4 @@ package test -internal val kotlin.Collection.anotherSize: kotlin.Int - internal fun kotlin.Collection.(): kotlin.Int +internal val kotlin.Collection<*>.anotherSize: kotlin.Int + internal fun kotlin.Collection<*>.(): kotlin.Int diff --git a/compiler/testData/loadJava/compiledKotlin/type/ListOfStar.txt b/compiler/testData/loadJava/compiledKotlin/type/ListOfStar.txt index 180c4781cb9..8bd3db80736 100644 --- a/compiler/testData/loadJava/compiledKotlin/type/ListOfStar.txt +++ b/compiler/testData/loadJava/compiledKotlin/type/ListOfStar.txt @@ -1,3 +1,3 @@ package test -internal fun listOfStar(): kotlin.List +internal fun listOfStar(): kotlin.List<*> diff --git a/compiler/testData/loadJava/sourceJava/ReturnNotSubtype.txt b/compiler/testData/loadJava/sourceJava/ReturnNotSubtype.txt index f1ea009fb47..0a1a3786015 100644 --- a/compiler/testData/loadJava/sourceJava/ReturnNotSubtype.txt +++ b/compiler/testData/loadJava/sourceJava/ReturnNotSubtype.txt @@ -5,7 +5,7 @@ public trait ReturnNotSubtype { public trait Sub : test.ReturnNotSubtype.Super { public abstract override /*1*/ fun _void(): kotlin.Boolean public abstract override /*1*/ fun array(): kotlin.Array<(out) java.lang.Void!>! - public abstract override /*1*/ fun klass(): java.lang.Class! + public abstract override /*1*/ fun klass(): java.lang.Class<*>! public abstract override /*1*/ fun string1(): kotlin.Unit public abstract override /*1*/ fun string2(): kotlin.(Mutable)List! public abstract override /*1*/ fun t(): java.lang.Void! diff --git a/compiler/testData/loadJava/sourceJava/WrongNumberOfGenericParameters.txt b/compiler/testData/loadJava/sourceJava/WrongNumberOfGenericParameters.txt index 573f78e5212..81a5ab3c736 100644 --- a/compiler/testData/loadJava/sourceJava/WrongNumberOfGenericParameters.txt +++ b/compiler/testData/loadJava/sourceJava/WrongNumberOfGenericParameters.txt @@ -1,9 +1,9 @@ package test public trait WrongNumberOfGenericParameters { - public abstract fun o0(): test.WrongNumberOfGenericParameters.One! + public abstract fun o0(): test.WrongNumberOfGenericParameters.One<*>! public abstract fun o2(): test.WrongNumberOfGenericParameters.One<[ERROR : T]>! - public abstract fun t1(): test.WrongNumberOfGenericParameters.Two! + public abstract fun t1(): test.WrongNumberOfGenericParameters.Two<*, *>! public abstract fun z(): test.WrongNumberOfGenericParameters.Zero! public trait One { diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java b/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java index 3bd963ecd0f..41d8b2eb709 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java @@ -6370,6 +6370,10 @@ public final class DebugProtoBuf { * INV = 2; */ INV(2, 2), + /** + * STAR = 3; + */ + STAR(3, 3), ; /** @@ -6384,6 +6388,10 @@ public final class DebugProtoBuf { * INV = 2; */ public static final int INV_VALUE = 2; + /** + * STAR = 3; + */ + public static final int STAR_VALUE = 3; public final int getNumber() { return value; } @@ -6393,6 +6401,7 @@ public final class DebugProtoBuf { case 0: return IN; case 1: return OUT; case 2: return INV; + case 3: return STAR; default: return null; } } @@ -17720,7 +17729,7 @@ public final class DebugProtoBuf { "HAR\020\001\022\t\n\005SHORT\020\002\022\007\n\003INT\020\003\022\010\n\004LONG\020\004\022\t\n\005F" + "LOAT\020\005\022\n\n\006DOUBLE\020\006\022\013\n\007BOOLEAN\020\007\022\n\n\006STRIN" + "G\020\010\022\t\n\005CLASS\020\t\022\010\n\004ENUM\020\n\022\016\n\nANNOTATION\020\013" + - "\022\t\n\005ARRAY\020\014\"\365\004\n\004Type\022I\n\013constructor\030\001 \002(", + "\022\t\n\005ARRAY\020\014\"\377\004\n\004Type\022I\n\013constructor\030\001 \002(", "\01324.org.jetbrains.kotlin.serialization.T" + "ype.Constructor\022C\n\010argument\030\002 \003(\01321.org." + "jetbrains.kotlin.serialization.Type.Argu" + @@ -17731,61 +17740,62 @@ public final class DebugProtoBuf { "kind\030\001 \001(\01629.org.jetbrains.kotlin.serial" + "ization.Type.Constructor.Kind:\005CLASS\022\n\n\002" + "id\030\002 \002(\005\"%\n\004Kind\022\t\n\005CLASS\020\000\022\022\n\016TYPE_PARA", - "METER\020\001\032\301\001\n\010Argument\022U\n\nprojection\030\001 \001(\016" + + "METER\020\001\032\313\001\n\010Argument\022U\n\nprojection\030\001 \001(\016" + "2<.org.jetbrains.kotlin.serialization.Ty" + "pe.Argument.Projection:\003INV\0226\n\004type\030\002 \002(" + "\0132(.org.jetbrains.kotlin.serialization.T" + - "ype\"&\n\nProjection\022\006\n\002IN\020\000\022\007\n\003OUT\020\001\022\007\n\003IN" + - "V\020\002\"\371\001\n\rTypeParameter\022\n\n\002id\030\001 \002(\005\022\014\n\004nam" + - "e\030\002 \002(\005\022\026\n\007reified\030\003 \001(\010:\005false\022Q\n\010varia" + - "nce\030\004 \001(\0162:.org.jetbrains.kotlin.seriali" + - "zation.TypeParameter.Variance:\003INV\022=\n\013up" + - "per_bound\030\005 \003(\0132(.org.jetbrains.kotlin.s", - "erialization.Type\"$\n\010Variance\022\006\n\002IN\020\000\022\007\n" + - "\003OUT\020\001\022\007\n\003INV\020\002\"\364\005\n\005Class\022\020\n\005flags\030\001 \001(\005" + - ":\0010\022\030\n\020extra_visibility\030\002 \001(\t\022\017\n\007fq_name" + - "\030\003 \002(\005\022K\n\014class_object\030\004 \001(\01325.org.jetbr" + - "ains.kotlin.serialization.Class.ClassObj" + - "ect\022I\n\016type_parameter\030\005 \003(\01321.org.jetbra" + - "ins.kotlin.serialization.TypeParameter\022;" + - "\n\tsupertype\030\006 \003(\0132(.org.jetbrains.kotlin" + - ".serialization.Type\022\031\n\021nested_class_name" + - "\030\007 \003(\005\022<\n\006member\030\013 \003(\0132,.org.jetbrains.k", - "otlin.serialization.Callable\022\022\n\nenum_ent" + - "ry\030\014 \003(\005\022Y\n\023primary_constructor\030\r \001(\0132<." + - "org.jetbrains.kotlin.serialization.Class" + - ".PrimaryConstructor\032F\n\013ClassObject\0227\n\004da" + - "ta\030\001 \001(\0132).org.jetbrains.kotlin.serializ" + - "ation.Class\032P\n\022PrimaryConstructor\022:\n\004dat" + - "a\030\001 \001(\0132,.org.jetbrains.kotlin.serializa" + - "tion.Callable\"p\n\004Kind\022\t\n\005CLASS\020\000\022\t\n\005TRAI" + - "T\020\001\022\016\n\nENUM_CLASS\020\002\022\016\n\nENUM_ENTRY\020\003\022\024\n\020A" + - "NNOTATION_CLASS\020\004\022\n\n\006OBJECT\020\005\022\020\n\014CLASS_O", - "BJECT\020\006*\005\010d\020\310\001\"N\n\007Package\022<\n\006member\030\001 \003(" + - "\0132,.org.jetbrains.kotlin.serialization.C" + - "allable*\005\010d\020\310\001\"\332\005\n\010Callable\022\r\n\005flags\030\001 \001" + - "(\005\022\030\n\020extra_visibility\030\002 \001(\t\022\024\n\014getter_f" + - "lags\030\t \001(\005\022\024\n\014setter_flags\030\n \001(\005\022I\n\016type" + - "_parameter\030\004 \003(\01321.org.jetbrains.kotlin." + - "serialization.TypeParameter\022?\n\rreceiver_" + - "type\030\005 \001(\0132(.org.jetbrains.kotlin.serial" + - "ization.Type\022\014\n\004name\030\006 \002(\005\022T\n\017value_para" + - "meter\030\007 \003(\0132;.org.jetbrains.kotlin.seria", - "lization.Callable.ValueParameter\022=\n\013retu" + - "rn_type\030\010 \002(\0132(.org.jetbrains.kotlin.ser" + - "ialization.Type\032\263\001\n\016ValueParameter\022\r\n\005fl" + - "ags\030\001 \001(\005\022\014\n\004name\030\002 \002(\005\0226\n\004type\030\003 \002(\0132(." + - "org.jetbrains.kotlin.serialization.Type\022" + - "E\n\023vararg_element_type\030\004 \001(\0132(.org.jetbr" + - "ains.kotlin.serialization.Type*\005\010d\020\310\001\"Q\n" + - "\nMemberKind\022\017\n\013DECLARATION\020\000\022\021\n\rFAKE_OVE" + - "RRIDE\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYNTHESIZED\020\003" + - "\":\n\014CallableKind\022\007\n\003FUN\020\000\022\007\n\003VAL\020\001\022\007\n\003VA", - "R\020\002\022\017\n\013CONSTRUCTOR\020\003*\005\010d\020\310\001*-\n\010Modality\022" + - "\t\n\005FINAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRACT\020\002*b\n\nVi" + - "sibility\022\014\n\010INTERNAL\020\000\022\013\n\007PRIVATE\020\001\022\r\n\tP" + - "ROTECTED\020\002\022\n\n\006PUBLIC\020\003\022\023\n\017PRIVATE_TO_THI" + - "S\020\004\022\t\n\005EXTRA\020\005B\022B\rDebugProtoBuf\210\001\000" + "ype\"0\n\nProjection\022\006\n\002IN\020\000\022\007\n\003OUT\020\001\022\007\n\003IN" + + "V\020\002\022\010\n\004STAR\020\003\"\371\001\n\rTypeParameter\022\n\n\002id\030\001 " + + "\002(\005\022\014\n\004name\030\002 \002(\005\022\026\n\007reified\030\003 \001(\010:\005fals" + + "e\022Q\n\010variance\030\004 \001(\0162:.org.jetbrains.kotl" + + "in.serialization.TypeParameter.Variance:" + + "\003INV\022=\n\013upper_bound\030\005 \003(\0132(.org.jetbrain", + "s.kotlin.serialization.Type\"$\n\010Variance\022" + + "\006\n\002IN\020\000\022\007\n\003OUT\020\001\022\007\n\003INV\020\002\"\364\005\n\005Class\022\020\n\005f" + + "lags\030\001 \001(\005:\0010\022\030\n\020extra_visibility\030\002 \001(\t\022" + + "\017\n\007fq_name\030\003 \002(\005\022K\n\014class_object\030\004 \001(\01325" + + ".org.jetbrains.kotlin.serialization.Clas" + + "s.ClassObject\022I\n\016type_parameter\030\005 \003(\01321." + + "org.jetbrains.kotlin.serialization.TypeP" + + "arameter\022;\n\tsupertype\030\006 \003(\0132(.org.jetbra" + + "ins.kotlin.serialization.Type\022\031\n\021nested_" + + "class_name\030\007 \003(\005\022<\n\006member\030\013 \003(\0132,.org.j", + "etbrains.kotlin.serialization.Callable\022\022" + + "\n\nenum_entry\030\014 \003(\005\022Y\n\023primary_constructo" + + "r\030\r \001(\0132<.org.jetbrains.kotlin.serializa" + + "tion.Class.PrimaryConstructor\032F\n\013ClassOb" + + "ject\0227\n\004data\030\001 \001(\0132).org.jetbrains.kotli" + + "n.serialization.Class\032P\n\022PrimaryConstruc" + + "tor\022:\n\004data\030\001 \001(\0132,.org.jetbrains.kotlin" + + ".serialization.Callable\"p\n\004Kind\022\t\n\005CLASS" + + "\020\000\022\t\n\005TRAIT\020\001\022\016\n\nENUM_CLASS\020\002\022\016\n\nENUM_EN" + + "TRY\020\003\022\024\n\020ANNOTATION_CLASS\020\004\022\n\n\006OBJECT\020\005\022", + "\020\n\014CLASS_OBJECT\020\006*\005\010d\020\310\001\"N\n\007Package\022<\n\006m" + + "ember\030\001 \003(\0132,.org.jetbrains.kotlin.seria" + + "lization.Callable*\005\010d\020\310\001\"\332\005\n\010Callable\022\r\n" + + "\005flags\030\001 \001(\005\022\030\n\020extra_visibility\030\002 \001(\t\022\024" + + "\n\014getter_flags\030\t \001(\005\022\024\n\014setter_flags\030\n \001" + + "(\005\022I\n\016type_parameter\030\004 \003(\01321.org.jetbrai" + + "ns.kotlin.serialization.TypeParameter\022?\n" + + "\rreceiver_type\030\005 \001(\0132(.org.jetbrains.kot" + + "lin.serialization.Type\022\014\n\004name\030\006 \002(\005\022T\n\017" + + "value_parameter\030\007 \003(\0132;.org.jetbrains.ko", + "tlin.serialization.Callable.ValueParamet" + + "er\022=\n\013return_type\030\010 \002(\0132(.org.jetbrains." + + "kotlin.serialization.Type\032\263\001\n\016ValueParam" + + "eter\022\r\n\005flags\030\001 \001(\005\022\014\n\004name\030\002 \002(\005\0226\n\004typ" + + "e\030\003 \002(\0132(.org.jetbrains.kotlin.serializa" + + "tion.Type\022E\n\023vararg_element_type\030\004 \001(\0132(" + + ".org.jetbrains.kotlin.serialization.Type" + + "*\005\010d\020\310\001\"Q\n\nMemberKind\022\017\n\013DECLARATION\020\000\022\021" + + "\n\rFAKE_OVERRIDE\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYN" + + "THESIZED\020\003\":\n\014CallableKind\022\007\n\003FUN\020\000\022\007\n\003V", + "AL\020\001\022\007\n\003VAR\020\002\022\017\n\013CONSTRUCTOR\020\003*\005\010d\020\310\001*-\n" + + "\010Modality\022\t\n\005FINAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRA" + + "CT\020\002*b\n\nVisibility\022\014\n\010INTERNAL\020\000\022\013\n\007PRIV" + + "ATE\020\001\022\r\n\tPROTECTED\020\002\022\n\n\006PUBLIC\020\003\022\023\n\017PRIV" + + "ATE_TO_THIS\020\004\022\t\n\005EXTRA\020\005B\022B\rDebugProtoBu" + + "f\210\001\000" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { diff --git a/core/serialization/src/descriptors.proto b/core/serialization/src/descriptors.proto index fedf79dc364..3c2737ae276 100644 --- a/core/serialization/src/descriptors.proto +++ b/core/serialization/src/descriptors.proto @@ -116,6 +116,7 @@ message Type { IN = 0; OUT = 1; INV = 2; + STAR = 3; } optional Projection projection = 1 [default = INV]; diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java b/core/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java index 23785fc847c..d6e9c71e29f 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java @@ -373,11 +373,17 @@ public class DescriptorSerializer { @NotNull private ProtoBuf.Type.Argument.Builder typeArgument(@NotNull TypeProjection typeProjection) { ProtoBuf.Type.Argument.Builder builder = ProtoBuf.Type.Argument.newBuilder(); - ProtoBuf.Type.Argument.Projection projection = projection(typeProjection.getProjectionKind()); - // to avoid storing a default - if (projection != ProtoBuf.Type.Argument.Projection.INV) { - builder.setProjection(projection); + if (typeProjection.isStarProjection()) { + builder.setProjection(ProtoBuf.Type.Argument.Projection.STAR); + } + else { + ProtoBuf.Type.Argument.Projection projection = projection(typeProjection.getProjectionKind()); + + // to avoid storing a default + if (projection != ProtoBuf.Type.Argument.Projection.INV) { + builder.setProjection(projection); + } } builder.setType(type(typeProjection.getType())); diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java b/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java index e3dad06ab2f..c5f583b4489 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java @@ -5121,6 +5121,10 @@ public final class ProtoBuf { * INV = 2; */ INV(2, 2), + /** + * STAR = 3; + */ + STAR(3, 3), ; /** @@ -5135,6 +5139,10 @@ public final class ProtoBuf { * INV = 2; */ public static final int INV_VALUE = 2; + /** + * STAR = 3; + */ + public static final int STAR_VALUE = 3; public final int getNumber() { return value; } @@ -5144,6 +5152,7 @@ public final class ProtoBuf { case 0: return IN; case 1: return OUT; case 2: return INV; + case 3: return STAR; default: return null; } } diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt index eb5dcfdcbcb..0ffab2cd46e 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt @@ -95,7 +95,10 @@ public class TypeDeserializer( fun typeArguments(protos: List): List = protos.map { proto -> - TypeProjectionImpl(variance(proto.getProjection()), type(proto.getType())) + val type = type(proto.getType()) + if (proto.getProjection() == ProtoBuf.Type.Argument.Projection.STAR) + StarProjectionImpl(type) + else TypeProjectionImpl(variance(proto.getProjection()), type) }.toReadOnlyList() override fun toString() = debugName + (if (parent == null) "" else ". Child of ${parent.debugName}") diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/protoEnumMapping.kt b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/protoEnumMapping.kt index 13c1624ea7b..64d17b4df98 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/protoEnumMapping.kt +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/protoEnumMapping.kt @@ -66,4 +66,5 @@ fun variance(variance: ProtoBuf.Type.Argument.Projection) = when (variance) { ProtoBuf.Type.Argument.Projection.IN -> Variance.IN_VARIANCE ProtoBuf.Type.Argument.Projection.OUT -> Variance.OUT_VARIANCE ProtoBuf.Type.Argument.Projection.INV -> Variance.INVARIANT + else -> throw IllegalArgumentException("Only IN, OUT and INV are supported. Actual argument: $variance") } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt index 6ef988205d7..3fbf636c889 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt @@ -97,9 +97,11 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { typeArgumentProtoList.forEach { typeArgumentProto -> val projectionKind = typeArgumentProto.getProjection().toProjectionKind() val typeProjection = KotlinTypeProjectionStubImpl(typeArgumentsListStub, projectionKind.ordinal()) - val modifierKeywordToken = projectionKind.getToken() as? JetModifierKeywordToken - createModifierListStub(typeProjection, modifierKeywordToken.singletonOrEmptyList()) - createTypeReferenceStub(typeProjection, typeArgumentProto.getType()) + if (projectionKind != JetProjectionKind.STAR) { + val modifierKeywordToken = projectionKind.getToken() as? JetModifierKeywordToken + createModifierListStub(typeProjection, modifierKeywordToken.singletonOrEmptyList()) + createTypeReferenceStub(typeProjection, typeArgumentProto.getType()) + } } } @@ -107,6 +109,7 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { Projection.IN -> JetProjectionKind.IN Projection.OUT -> JetProjectionKind.OUT Projection.INV -> JetProjectionKind.NONE + Projection.STAR -> JetProjectionKind.STAR } private fun createFunctionTypeStub(parent: StubElement, type: Type, isExtensionFunctionType: Boolean) { diff --git a/idea/testData/stubs/StarProjection.expected b/idea/testData/stubs/StarProjection.expected new file mode 100644 index 00000000000..824b28dc9e5 --- /dev/null +++ b/idea/testData/stubs/StarProjection.expected @@ -0,0 +1,8 @@ +PsiJetFileStubImpl[package=] + PACKAGE_DIRECTIVE: + PROPERTY:[fqName=v, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=true, isVar=false, name=v] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=Foo] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=STAR] diff --git a/idea/testData/stubs/StarProjection.kt b/idea/testData/stubs/StarProjection.kt new file mode 100644 index 00000000000..0eb9a68e9e1 --- /dev/null +++ b/idea/testData/stubs/StarProjection.kt @@ -0,0 +1 @@ +val v: Foo<*> \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/StubBuilderTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/stubs/StubBuilderTestGenerated.java index 0d2485b227e..e1193b8e53d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/StubBuilderTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/StubBuilderTestGenerated.java @@ -221,4 +221,10 @@ public class StubBuilderTestGenerated extends AbstractStubBuilderTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/stubs/SimpleEnumBuild.kt"); doTest(fileName); } + + @TestMetadata("StarProjection.kt") + public void testStarProjection() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/stubs/StarProjection.kt"); + doTest(fileName); + } }