From 547aa2cda67a207eaaecb80c7642089d633a826c Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 2 Oct 2015 18:34:19 +0300 Subject: [PATCH] Load special java methods as properites Currently only those that override special builtin properties (e.g. `Collection.size`) Their modality is defined by method's modality --- .../class/ExtendsAbstractListT.txt | 2 +- .../class/ImplementsListString.txt | 2 +- .../ValAndFunOverrideCompatibilityClash.txt | 2 +- .../tests/j+k/GenericsInSupertypes.txt | 2 +- .../tests/j+k/finalCollectionSize.kt | 11 +++ .../tests/j+k/finalCollectionSize.txt | 95 +++++++++++++++++++ .../diagnostics/tests/j+k/specialBridges.kt | 6 ++ .../diagnostics/tests/j+k/specialBridges.txt | 55 +++++++++++ .../listSuperType.txt | 2 +- .../multipleExactBoundsNullable.txt | 2 +- .../nullabilityWarnings/delegation.txt | 6 +- .../platformTypes/supertypeTypeArguments.txt | 4 +- .../diagnostics/tests/scopes/visibility2.txt | 2 +- .../diagnostics/tests/subtyping/kt-1457.txt | 2 +- .../customClassMutableCollection.txt | 2 +- .../customClassMutableList.kt | 2 +- .../customClassMutableList.txt | 2 +- .../invalidFqName.kt | 2 +- .../invalidFqName.txt | 4 +- .../wrongTypeParametersCount.txt | 2 +- .../return/HalfSubstitutedTypeParameters.txt | 2 +- .../return/SubclassOfCollection.txt | 2 +- .../modality/ModalityOfFakeOverrides.txt | 2 +- .../return/HalfSubstitutedTypeParameters.txt | 3 +- .../return/SubclassOfCollection.txt | 3 +- .../modality/ModalityOfFakeOverrides.kt | 2 +- .../modality/ModalityOfFakeOverrides.txt | 3 +- .../platformTypes/notnullTypeArgument.txt | 3 +- .../platformTypes/nullableTypeArgument.txt | 3 +- .../compiledKotlin/prop/CollectionSize.kt | 2 +- .../checkers/JetDiagnosticsTestGenerated.java | 12 +++ .../load/java/builtinsPropertiesUtil.kt | 36 +++++++ .../descriptors/JavaPropertyDescriptor.java | 23 ++++- .../descriptors/LazyJavaClassMemberScope.kt | 63 +++++++++++- .../java/lazy/descriptors/LazyJavaScope.kt | 6 +- .../org/jetbrains/kotlin/utils/addToStdlib.kt | 8 ++ 36 files changed, 341 insertions(+), 39 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/j+k/finalCollectionSize.kt create mode 100644 compiler/testData/diagnostics/tests/j+k/finalCollectionSize.txt create mode 100644 compiler/testData/diagnostics/tests/j+k/specialBridges.kt create mode 100644 compiler/testData/diagnostics/tests/j+k/specialBridges.txt create mode 100644 core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/builtinsPropertiesUtil.kt diff --git a/compiler/testData/compileJavaAgainstKotlin/class/ExtendsAbstractListT.txt b/compiler/testData/compileJavaAgainstKotlin/class/ExtendsAbstractListT.txt index bac0e041978..9f10405ca7f 100644 --- a/compiler/testData/compileJavaAgainstKotlin/class/ExtendsAbstractListT.txt +++ b/compiler/testData/compileJavaAgainstKotlin/class/ExtendsAbstractListT.txt @@ -7,6 +7,7 @@ public/*package*/ open class ExtendsAbstractListT { public abstract class Mine : java.util.AbstractList { public constructor Mine() protected/*protected and package*/ final /*fake_override*/ var modCount: kotlin.Int + public abstract /*fake_override*/ val size: kotlin.Int public open /*fake_override*/ fun add(/*0*/ T!): kotlin.Boolean public open /*fake_override*/ fun add(/*0*/ kotlin.Int, /*1*/ T!): kotlin.Unit public open /*fake_override*/ fun addAll(/*0*/ kotlin.Collection): kotlin.Boolean @@ -29,7 +30,6 @@ public abstract class Mine : java.util.AbstractList { protected/*protected and package*/ open /*fake_override*/ fun removeRange(/*0*/ kotlin.Int, /*1*/ kotlin.Int): kotlin.Unit public open /*fake_override*/ fun retainAll(/*0*/ kotlin.Collection): kotlin.Boolean public open /*fake_override*/ fun set(/*0*/ kotlin.Int, /*1*/ T!): T! - public abstract /*fake_override*/ fun size(): kotlin.Int public open /*fake_override*/ fun subList(/*0*/ kotlin.Int, /*1*/ kotlin.Int): kotlin.MutableList public open /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open /*fake_override*/ fun toArray(/*0*/ kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/compileJavaAgainstKotlin/class/ImplementsListString.txt b/compiler/testData/compileJavaAgainstKotlin/class/ImplementsListString.txt index a38594d5f07..932a9b0fc2d 100644 --- a/compiler/testData/compileJavaAgainstKotlin/class/ImplementsListString.txt +++ b/compiler/testData/compileJavaAgainstKotlin/class/ImplementsListString.txt @@ -2,6 +2,7 @@ package test public abstract class Mine : java.util.List { public constructor Mine() + public abstract /*fake_override*/ val size: kotlin.Int public abstract /*fake_override*/ fun add(/*0*/ kotlin.Int, /*1*/ kotlin.String!): kotlin.Unit public abstract /*fake_override*/ fun add(/*0*/ kotlin.String!): kotlin.Boolean public abstract /*fake_override*/ fun addAll(/*0*/ kotlin.Collection): kotlin.Boolean @@ -21,7 +22,6 @@ public abstract class Mine : java.util.List { public abstract /*fake_override*/ fun removeAll(/*0*/ kotlin.Collection<*>): kotlin.Boolean public abstract /*fake_override*/ fun retainAll(/*0*/ kotlin.Collection<*>): kotlin.Boolean public abstract /*fake_override*/ fun set(/*0*/ kotlin.Int, /*1*/ kotlin.String!): kotlin.String! - public abstract /*fake_override*/ fun size(): kotlin.Int public abstract /*fake_override*/ fun subList(/*0*/ kotlin.Int, /*1*/ kotlin.Int): kotlin.(Mutable)List! public abstract /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public abstract /*fake_override*/ fun toArray(/*0*/ kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/diagnostics/tests/ValAndFunOverrideCompatibilityClash.txt b/compiler/testData/diagnostics/tests/ValAndFunOverrideCompatibilityClash.txt index fdf876b5755..eab1517cd3e 100644 --- a/compiler/testData/diagnostics/tests/ValAndFunOverrideCompatibilityClash.txt +++ b/compiler/testData/diagnostics/tests/ValAndFunOverrideCompatibilityClash.txt @@ -23,6 +23,7 @@ public final class Foo1 : java.util.ArrayList { invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ val size: kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: kotlin.Int): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.Int): kotlin.Unit public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -56,7 +57,6 @@ public final class Foo1 : java.util.ArrayList { 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.Collection<*>): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.Int): kotlin.Int - 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.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/diagnostics/tests/j+k/GenericsInSupertypes.txt b/compiler/testData/diagnostics/tests/j+k/GenericsInSupertypes.txt index 9683b0fce53..eed9a914f61 100644 --- a/compiler/testData/diagnostics/tests/j+k/GenericsInSupertypes.txt +++ b/compiler/testData/diagnostics/tests/j+k/GenericsInSupertypes.txt @@ -5,6 +5,7 @@ public abstract class AL : java.util.ArrayList { invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ val size: kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: p.P): kotlin.Unit public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: p.P): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -38,7 +39,6 @@ public abstract class AL : java.util.ArrayList { 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.Collection<*>): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: p.P): p.P - 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.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/diagnostics/tests/j+k/finalCollectionSize.kt b/compiler/testData/diagnostics/tests/j+k/finalCollectionSize.kt new file mode 100644 index 00000000000..e1596e74991 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/finalCollectionSize.kt @@ -0,0 +1,11 @@ +// FILE: A.java + +abstract public class A extends java.util.ArrayList { + public final int size() { return 0; } +} + +// FILE: main.kt + +class B : A() { + override val size: Int = 1 +} diff --git a/compiler/testData/diagnostics/tests/j+k/finalCollectionSize.txt b/compiler/testData/diagnostics/tests/j+k/finalCollectionSize.txt new file mode 100644 index 00000000000..b0afca73528 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/finalCollectionSize.txt @@ -0,0 +1,95 @@ +package + +public abstract class A : java.util.ArrayList { + public constructor A() + invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! + protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + public final override /*1*/ val size: kotlin.Int + invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String!): kotlin.Unit + 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.Collection): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ index: kotlin.Int, /*1*/ c: kotlin.Collection): 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 + public open override /*1*/ /*fake_override*/ fun containsAll(/*0*/ c: kotlin.Collection): kotlin.Boolean + invisible_fake open override /*1*/ /*fake_override*/ fun elementData(/*0*/ p0: kotlin.Int): kotlin.String! + public open override /*1*/ /*fake_override*/ fun ensureCapacity(/*0*/ p0: kotlin.Int): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun ensureCapacityInternal(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + invisible_fake open override /*1*/ /*fake_override*/ fun fastRemove(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun get(/*0*/ index: kotlin.Int): kotlin.String! + invisible_fake open override /*1*/ /*fake_override*/ fun grow(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun indexOf(/*0*/ o: kotlin.Any?): kotlin.Int + public open override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.MutableIterator + public open override /*1*/ /*fake_override*/ fun lastIndexOf(/*0*/ o: kotlin.Any?): kotlin.Int + public open override /*1*/ /*fake_override*/ fun listIterator(): kotlin.MutableListIterator + public open override /*1*/ /*fake_override*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.MutableListIterator + invisible_fake open override /*1*/ /*fake_override*/ fun outOfBoundsMsg(/*0*/ p0: kotlin.Int): kotlin.String! + invisible_fake open override /*1*/ /*fake_override*/ fun rangeCheck(/*0*/ p0: kotlin.Int): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun rangeCheckForAdd(/*0*/ p0: kotlin.Int): kotlin.Unit + 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.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.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 subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList + public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! + public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public open override /*1*/ /*fake_override*/ fun trimToSize(): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream!): kotlin.Unit +} + +public final class B : A { + public constructor B() + invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! + protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + public open override /*1*/ val size: kotlin.Int = 1 + invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String!): kotlin.Unit + 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.Collection): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ index: kotlin.Int, /*1*/ c: kotlin.Collection): 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 + public open override /*1*/ /*fake_override*/ fun containsAll(/*0*/ c: kotlin.Collection): kotlin.Boolean + invisible_fake open override /*1*/ /*fake_override*/ fun elementData(/*0*/ p0: kotlin.Int): kotlin.String! + public open override /*1*/ /*fake_override*/ fun ensureCapacity(/*0*/ p0: kotlin.Int): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun ensureCapacityInternal(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + invisible_fake open override /*1*/ /*fake_override*/ fun fastRemove(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun get(/*0*/ index: kotlin.Int): kotlin.String! + invisible_fake open override /*1*/ /*fake_override*/ fun grow(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun indexOf(/*0*/ o: kotlin.Any?): kotlin.Int + public open override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.MutableIterator + public open override /*1*/ /*fake_override*/ fun lastIndexOf(/*0*/ o: kotlin.Any?): kotlin.Int + public open override /*1*/ /*fake_override*/ fun listIterator(): kotlin.MutableListIterator + public open override /*1*/ /*fake_override*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.MutableListIterator + invisible_fake open override /*1*/ /*fake_override*/ fun outOfBoundsMsg(/*0*/ p0: kotlin.Int): kotlin.String! + invisible_fake open override /*1*/ /*fake_override*/ fun rangeCheck(/*0*/ p0: kotlin.Int): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun rangeCheckForAdd(/*0*/ p0: kotlin.Int): kotlin.Unit + 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.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.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 subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList + public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! + public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public open override /*1*/ /*fake_override*/ fun trimToSize(): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream!): kotlin.Unit +} diff --git a/compiler/testData/diagnostics/tests/j+k/specialBridges.kt b/compiler/testData/diagnostics/tests/j+k/specialBridges.kt new file mode 100644 index 00000000000..bc8ab570cc0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/specialBridges.kt @@ -0,0 +1,6 @@ +interface I2 { + val size: Int +} + +class B2 : java.util.ArrayList(), I2 + diff --git a/compiler/testData/diagnostics/tests/j+k/specialBridges.txt b/compiler/testData/diagnostics/tests/j+k/specialBridges.txt new file mode 100644 index 00000000000..5f2a1094b38 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/specialBridges.txt @@ -0,0 +1,55 @@ +package + +public final class B2 : java.util.ArrayList, I2 { + public constructor B2() + invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! + protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*2*/ /*fake_override*/ val size: kotlin.Int + public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String): kotlin.Unit + 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.Collection): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ index: kotlin.Int, /*1*/ c: kotlin.Collection): 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 + public open override /*1*/ /*fake_override*/ fun containsAll(/*0*/ c: kotlin.Collection): kotlin.Boolean + invisible_fake open override /*1*/ /*fake_override*/ fun elementData(/*0*/ p0: kotlin.Int): kotlin.String! + public open override /*1*/ /*fake_override*/ fun ensureCapacity(/*0*/ p0: kotlin.Int): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun ensureCapacityInternal(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + invisible_fake open override /*1*/ /*fake_override*/ fun fastRemove(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun get(/*0*/ index: kotlin.Int): kotlin.String + invisible_fake open override /*1*/ /*fake_override*/ fun grow(/*0*/ p0: kotlin.Int): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun indexOf(/*0*/ o: kotlin.Any?): kotlin.Int + public open override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.MutableIterator + public open override /*1*/ /*fake_override*/ fun lastIndexOf(/*0*/ o: kotlin.Any?): kotlin.Int + public open override /*1*/ /*fake_override*/ fun listIterator(): kotlin.MutableListIterator + public open override /*1*/ /*fake_override*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.MutableListIterator + invisible_fake open override /*1*/ /*fake_override*/ fun outOfBoundsMsg(/*0*/ p0: kotlin.Int): kotlin.String! + invisible_fake open override /*1*/ /*fake_override*/ fun rangeCheck(/*0*/ p0: kotlin.Int): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun rangeCheckForAdd(/*0*/ p0: kotlin.Int): kotlin.Unit + 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.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.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 subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList + public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! + public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String + public open override /*1*/ /*fake_override*/ fun trimToSize(): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream!): kotlin.Unit +} + +public interface I2 { + public abstract val size: kotlin.Int + 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/genericVarianceViolation/listSuperType.txt b/compiler/testData/diagnostics/tests/platformTypes/genericVarianceViolation/listSuperType.txt index 3d71b05e320..e4f95a76614 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/genericVarianceViolation/listSuperType.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/genericVarianceViolation/listSuperType.txt @@ -12,6 +12,7 @@ public open class A { public abstract class B : kotlin.MutableList { public constructor B() + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ e: kotlin.String): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -33,7 +34,6 @@ public abstract class B : kotlin.MutableList { public abstract override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String): kotlin.String - public abstract override /*1*/ /*fake_override*/ fun size(): kotlin.Int public abstract override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } diff --git a/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.txt b/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.txt index 871750d241c..322ca44442b 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/methodCall/multipleExactBoundsNullable.txt @@ -5,6 +5,7 @@ public fun foo(/*0*/ delegateResolver: ResolverForProject : java.util.AbstractMap { public/*package*/ constructor MyMap() invisible_fake final override /*1*/ /*fake_override*/ var keySet: kotlin.(Mutable)Set! + public open override /*1*/ /*fake_override*/ val size: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var values: kotlin.(Mutable)Collection! public open override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any! @@ -19,7 +20,6 @@ public/*package*/ open class MyMap public open override /*1*/ /*fake_override*/ fun put(/*0*/ key: K!, /*1*/ value: V!): V? public open override /*1*/ /*fake_override*/ fun putAll(/*0*/ m: kotlin.Map): kotlin.Unit public open override /*1*/ /*fake_override*/ fun remove(/*0*/ key: kotlin.Any?): V? - public open override /*1*/ /*fake_override*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun values(): kotlin.MutableCollection } diff --git a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/delegation.txt b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/delegation.txt index 4b27a19e46f..ebb9861ec9c 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/delegation.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/delegation.txt @@ -2,6 +2,7 @@ package public final class A : kotlin.List { public constructor A() + public open override /*1*/ /*delegation*/ val size: kotlin.Int public open override /*1*/ /*delegation*/ fun contains(/*0*/ o: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*delegation*/ fun containsAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -13,13 +14,13 @@ public final class A : kotlin.List { public open override /*1*/ /*delegation*/ fun lastIndexOf(/*0*/ o: kotlin.Any?): kotlin.Int public open override /*1*/ /*delegation*/ fun listIterator(): kotlin.ListIterator public open override /*1*/ /*delegation*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.ListIterator - public open override /*1*/ /*delegation*/ fun size(): kotlin.Int public open override /*1*/ /*delegation*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.List public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } public final class B : kotlin.List { public constructor B() + public open override /*1*/ /*delegation*/ val size: kotlin.Int public open override /*1*/ /*delegation*/ fun contains(/*0*/ o: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*delegation*/ fun containsAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -31,13 +32,13 @@ public final class B : kotlin.List { public open override /*1*/ /*delegation*/ fun lastIndexOf(/*0*/ o: kotlin.Any?): kotlin.Int public open override /*1*/ /*delegation*/ fun listIterator(): kotlin.ListIterator public open override /*1*/ /*delegation*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.ListIterator - public open override /*1*/ /*delegation*/ fun size(): kotlin.Int public open override /*1*/ /*delegation*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.List public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } public final class C : kotlin.List { public constructor C() + public open override /*1*/ /*delegation*/ val size: kotlin.Int public open override /*1*/ /*delegation*/ fun contains(/*0*/ o: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*delegation*/ fun containsAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -49,7 +50,6 @@ public final class C : kotlin.List { public open override /*1*/ /*delegation*/ fun lastIndexOf(/*0*/ o: kotlin.Any?): kotlin.Int public open override /*1*/ /*delegation*/ fun listIterator(): kotlin.ListIterator public open override /*1*/ /*delegation*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.ListIterator - public open override /*1*/ /*delegation*/ fun size(): kotlin.Int public open override /*1*/ /*delegation*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.List public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } diff --git a/compiler/testData/diagnostics/tests/platformTypes/supertypeTypeArguments.txt b/compiler/testData/diagnostics/tests/platformTypes/supertypeTypeArguments.txt index 944dfc90a40..d4291c92159 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/supertypeTypeArguments.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/supertypeTypeArguments.txt @@ -1,6 +1,7 @@ package public interface ExtMap : kotlin.Map { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.Any?): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.Any?): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun entrySet(): kotlin.Set> @@ -9,7 +10,6 @@ public interface ExtMap : kotlin.Map { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun keySet(): kotlin.Set - public abstract override /*1*/ /*fake_override*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public abstract override /*1*/ /*fake_override*/ fun values(): kotlin.Collection } @@ -22,6 +22,7 @@ public final class HashMapEx : java.util.HashMap, ExtMap invisible_fake final override /*1*/ /*fake_override*/ val loadFactor: kotlin.Float invisible_fake final override /*1*/ /*fake_override*/ var modCount: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*2*/ /*fake_override*/ val size: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var table: kotlin.Array<(out) java.util.HashMap.Entry!>! invisible_fake final override /*1*/ /*fake_override*/ var threshold: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var useAltHashing: kotlin.Boolean @@ -59,7 +60,6 @@ public final class HashMapEx : java.util.HashMap, ExtMap invisible_fake final override /*1*/ /*fake_override*/ fun removeEntryForKey(/*0*/ p0: kotlin.Any!): java.util.HashMap.Entry! invisible_fake final override /*1*/ /*fake_override*/ fun removeMapping(/*0*/ p0: kotlin.Any!): java.util.HashMap.Entry! invisible_fake open override /*1*/ /*fake_override*/ fun resize(/*0*/ p0: kotlin.Int): kotlin.Unit - public open override /*2*/ /*fake_override*/ fun size(): kotlin.Int public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String invisible_fake open override /*1*/ /*fake_override*/ fun transfer(/*0*/ p0: kotlin.Array<(out) java.util.HashMap.Entry<(raw) kotlin.Any!, (raw) kotlin.Any!>!>!, /*1*/ p1: kotlin.Boolean): kotlin.Unit public open override /*2*/ /*fake_override*/ fun values(): kotlin.MutableCollection diff --git a/compiler/testData/diagnostics/tests/scopes/visibility2.txt b/compiler/testData/diagnostics/tests/scopes/visibility2.txt index 3ba2673d110..8278426149d 100644 --- a/compiler/testData/diagnostics/tests/scopes/visibility2.txt +++ b/compiler/testData/diagnostics/tests/scopes/visibility2.txt @@ -36,6 +36,7 @@ package b { invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ val size: kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: java.lang.Integer): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: java.lang.Integer): kotlin.Unit public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -69,7 +70,6 @@ package b { 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.Collection<*>): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: java.lang.Integer): java.lang.Integer - 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.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/diagnostics/tests/subtyping/kt-1457.txt b/compiler/testData/diagnostics/tests/subtyping/kt-1457.txt index 434684d55fb..5d684388cb5 100644 --- a/compiler/testData/diagnostics/tests/subtyping/kt-1457.txt +++ b/compiler/testData/diagnostics/tests/subtyping/kt-1457.txt @@ -7,6 +7,7 @@ public final class MyListOfPairs : java.util.ArrayList> { invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ val size: kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: Pair): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: Pair): kotlin.Unit public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection>): kotlin.Boolean @@ -40,7 +41,6 @@ public final class MyListOfPairs : java.util.ArrayList> { 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.Collection<*>): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: Pair): Pair - 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.MutableList> public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableCollection.txt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableCollection.txt index 2ee4c8a101a..1162033a80d 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableCollection.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableCollection.txt @@ -5,6 +5,7 @@ public fun foo(): kotlin.Unit @kotlin.jvm.PurelyImplements(value = "kotlin.MutableCollection") public/*package*/ open class A : java.util.AbstractCollection, kotlin.MutableCollection { public/*package*/ constructor A() + @java.lang.Override() public open override /*2*/ val size: kotlin.Int public open override /*2*/ /*fake_override*/ fun add(/*0*/ e: T): kotlin.Boolean public open override /*2*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public open override /*2*/ /*fake_override*/ fun clear(): kotlin.Unit @@ -17,7 +18,6 @@ public fun foo(): kotlin.Unit public open override /*2*/ /*fake_override*/ fun remove(/*0*/ o: kotlin.Any?): kotlin.Boolean public open override /*2*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public open override /*2*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.Collection): kotlin.Boolean - @java.lang.Override() public open override /*2*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.kt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.kt index 02e15be9c66..776a7a7a8bc 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.kt @@ -36,4 +36,4 @@ fun foo() { val b4: Collection = x val b6: MutableCollection = x -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.txt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.txt index d575da32f2c..bfc978c179d 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.txt @@ -6,6 +6,7 @@ public fun foo(): kotlin.Unit @kotlin.jvm.PurelyImplements(value = "kotlin.MutableList") public/*package*/ open class A : java.util.AbstractList, kotlin.MutableList { public/*package*/ constructor A() protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + @java.lang.Override() public open override /*2*/ val size: kotlin.Int public open override /*2*/ /*fake_override*/ fun add(/*0*/ e: T): kotlin.Boolean public open override /*2*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: T): kotlin.Unit public open override /*2*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -30,7 +31,6 @@ public fun foo(): kotlin.Unit protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun removeRange(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Unit public open override /*2*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public open override /*2*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: T): T - @java.lang.Override() public open override /*2*/ fun size(): kotlin.Int public open override /*2*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/invalidFqName.kt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/invalidFqName.kt index 034286e962a..a98edb93e9b 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/invalidFqName.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/invalidFqName.kt @@ -24,4 +24,4 @@ public class B extends AbstractList {} // FILE: main.kt val x = A() -val y = B() \ No newline at end of file +val y = B() diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/invalidFqName.txt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/invalidFqName.txt index a58233def44..36f6aacf1e9 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/invalidFqName.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/invalidFqName.txt @@ -6,6 +6,7 @@ public val y: B @kotlin.jvm.PurelyImplements(value = "") public open class A : java.util.AbstractList { public constructor A() protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + @java.lang.Override() public open override /*1*/ val size: kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: T!): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: T!): kotlin.Unit public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -30,7 +31,6 @@ public val y: B 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.Collection): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: T!): T! - @java.lang.Override() public open override /*1*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! @@ -40,6 +40,7 @@ public val y: B @kotlin.jvm.PurelyImplements(value = "[INVALID]") public open class B : java.util.AbstractList { public constructor B() protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: T!): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: T!): kotlin.Unit public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -64,7 +65,6 @@ public val y: B 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.Collection): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: T!): T! - public abstract 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.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/wrongTypeParametersCount.txt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/wrongTypeParametersCount.txt index 6d2059b9542..fb92b3c8a9f 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/wrongTypeParametersCount.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/wrongTypeParametersCount.txt @@ -6,6 +6,7 @@ public fun foo(): kotlin.Unit @kotlin.jvm.PurelyImplements(value = "kotlin.MutableList") public/*package*/ open class A : java.util.AbstractList { public/*package*/ constructor A() protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + @java.lang.Override() public open override /*1*/ val size: kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: T!): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: T!): kotlin.Unit public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -30,7 +31,6 @@ public fun foo(): kotlin.Unit 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.Collection): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: T!): T! - @java.lang.Override() public open override /*1*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt index 741add5b8cb..782dbc06d67 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt @@ -13,6 +13,7 @@ public interface HalfSubstitutedTypeParameters { } public interface TrickyList : kotlin.MutableList { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ e: E!): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: E!): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -32,7 +33,6 @@ public interface HalfSubstitutedTypeParameters { public abstract override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: E!): E! - public abstract override /*1*/ /*fake_override*/ fun size(): kotlin.Int public abstract override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList } } diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/propagation/return/SubclassOfCollection.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/propagation/return/SubclassOfCollection.txt index e1a82e79663..5ca95d8032f 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/propagation/return/SubclassOfCollection.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/propagation/return/SubclassOfCollection.txt @@ -1,6 +1,7 @@ package test public interface SubclassOfCollection : kotlin.MutableCollection { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ e: E!): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit @@ -11,5 +12,4 @@ public interface SubclassOfCollection : kotlin.MutableCol public abstract override /*1*/ /*fake_override*/ fun remove(/*0*/ o: kotlin.Any?): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.Collection): kotlin.Boolean - public abstract override /*1*/ /*fake_override*/ fun size(): kotlin.Int } diff --git a/compiler/testData/loadJava/compiledJava/modality/ModalityOfFakeOverrides.txt b/compiler/testData/loadJava/compiledJava/modality/ModalityOfFakeOverrides.txt index 78015aaeb45..88d514d0773 100644 --- a/compiler/testData/loadJava/compiledJava/modality/ModalityOfFakeOverrides.txt +++ b/compiler/testData/loadJava/compiledJava/modality/ModalityOfFakeOverrides.txt @@ -3,6 +3,7 @@ package test public open class ModalityOfFakeOverrides : java.util.AbstractList { public constructor ModalityOfFakeOverrides() protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + public open override /*1*/ val size: kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String!): kotlin.Unit 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.Collection): kotlin.Boolean @@ -25,7 +26,6 @@ public open class ModalityOfFakeOverrides : java.util.AbstractList): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String!): kotlin.String! - public open override /*1*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt index 49d21a0e829..b4bff6188cf 100644 --- a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt +++ b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt @@ -13,6 +13,8 @@ public interface HalfSubstitutedTypeParameters { } public interface TrickyList : kotlin.MutableList { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun (): kotlin.Int public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ e: E): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: E): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean @@ -32,7 +34,6 @@ public interface HalfSubstitutedTypeParameters { public abstract override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: E): E - public abstract override /*1*/ /*fake_override*/ fun size(): kotlin.Int public abstract override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList } } diff --git a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/propagation/return/SubclassOfCollection.txt b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/propagation/return/SubclassOfCollection.txt index a2c1921bd91..b2d0c516b7f 100644 --- a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/propagation/return/SubclassOfCollection.txt +++ b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/kotlinSignature/propagation/return/SubclassOfCollection.txt @@ -1,6 +1,8 @@ package test public interface SubclassOfCollection : kotlin.MutableCollection { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun (): kotlin.Int public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ e: E): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit @@ -11,5 +13,4 @@ public interface SubclassOfCollection : kotlin.MutableCollection { public abstract override /*1*/ /*fake_override*/ fun remove(/*0*/ o: kotlin.Any?): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.Collection): kotlin.Boolean public abstract override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.Collection): kotlin.Boolean - public abstract override /*1*/ /*fake_override*/ fun size(): kotlin.Int } diff --git a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/modality/ModalityOfFakeOverrides.kt b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/modality/ModalityOfFakeOverrides.kt index 750c321d057..29df4ec2c61 100644 --- a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/modality/ModalityOfFakeOverrides.kt +++ b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/modality/ModalityOfFakeOverrides.kt @@ -8,5 +8,5 @@ public open class ModalityOfFakeOverrides : AbstractList() { return "" } - override fun size(): Int = 0 + override val size: Int get() = 0 } diff --git a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/modality/ModalityOfFakeOverrides.txt b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/modality/ModalityOfFakeOverrides.txt index ec817ce64d8..64475cafbdd 100644 --- a/compiler/testData/loadJava/compiledKotlin/fromLoadJava/modality/ModalityOfFakeOverrides.txt +++ b/compiler/testData/loadJava/compiledKotlin/fromLoadJava/modality/ModalityOfFakeOverrides.txt @@ -3,6 +3,8 @@ package test public open class ModalityOfFakeOverrides : java.util.AbstractList { /*primary*/ public constructor ModalityOfFakeOverrides() protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + public open override /*1*/ val size: kotlin.Int + public open override /*1*/ fun (): kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String!): kotlin.Unit 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.Collection): kotlin.Boolean @@ -25,7 +27,6 @@ public open class ModalityOfFakeOverrides : java.util.AbstractList): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String!): kotlin.String! - public open override /*1*/ fun size(): kotlin.Int public open override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/loadJava/compiledKotlin/platformTypes/notnullTypeArgument.txt b/compiler/testData/loadJava/compiledKotlin/platformTypes/notnullTypeArgument.txt index 354a37876e6..1d7ec5bf730 100644 --- a/compiler/testData/loadJava/compiledKotlin/platformTypes/notnullTypeArgument.txt +++ b/compiler/testData/loadJava/compiledKotlin/platformTypes/notnullTypeArgument.txt @@ -5,6 +5,8 @@ public final class C : java.util.ArrayList { invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ val size: kotlin.Int + public open override /*1*/ /*fake_override*/ fun (): kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String): kotlin.Unit 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.Collection): kotlin.Boolean @@ -36,7 +38,6 @@ public final class C : java.util.ArrayList { 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.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.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/loadJava/compiledKotlin/platformTypes/nullableTypeArgument.txt b/compiler/testData/loadJava/compiledKotlin/platformTypes/nullableTypeArgument.txt index 7fcd0af46e1..1e22cd3d3eb 100644 --- a/compiler/testData/loadJava/compiledKotlin/platformTypes/nullableTypeArgument.txt +++ b/compiler/testData/loadJava/compiledKotlin/platformTypes/nullableTypeArgument.txt @@ -5,6 +5,8 @@ public final class C : java.util.ArrayList { invisible_fake final override /*1*/ /*fake_override*/ var elementData: kotlin.Array<(out) kotlin.Any!>! protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ val size: kotlin.Int + public open override /*1*/ /*fake_override*/ fun (): kotlin.Int public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String?): kotlin.Unit 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.Collection): kotlin.Boolean @@ -36,7 +38,6 @@ public final class C : java.util.ArrayList { 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.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.MutableList public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<(out) kotlin.Any!>! public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: kotlin.Array<(out) T!>!): kotlin.Array<(out) T!>! diff --git a/compiler/testData/loadJava/compiledKotlin/prop/CollectionSize.kt b/compiler/testData/loadJava/compiledKotlin/prop/CollectionSize.kt index 675cb097965..c5b2e088b9c 100644 --- a/compiler/testData/loadJava/compiledKotlin/prop/CollectionSize.kt +++ b/compiler/testData/loadJava/compiledKotlin/prop/CollectionSize.kt @@ -1,4 +1,4 @@ package test val Collection<*>.anotherSize : Int - get() = size() + get() = size diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 849dd09ce02..008e6469dc3 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -8706,6 +8706,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("finalCollectionSize.kt") + public void testFinalCollectionSize() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/j+k/finalCollectionSize.kt"); + doTest(fileName); + } + @TestMetadata("GenericsInSupertypes.kt") public void testGenericsInSupertypes() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/j+k/GenericsInSupertypes.kt"); @@ -8910,6 +8916,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("specialBridges.kt") + public void testSpecialBridges() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/j+k/specialBridges.kt"); + doTest(fileName); + } + @TestMetadata("StaticMembersFromSuperclasses.kt") public void testStaticMembersFromSuperclasses() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/j+k/StaticMembersFromSuperclasses.kt"); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/builtinsPropertiesUtil.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/builtinsPropertiesUtil.kt new file mode 100644 index 00000000000..9a90217dd7d --- /dev/null +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/builtinsPropertiesUtil.kt @@ -0,0 +1,36 @@ +/* + * 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.load.java + +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe +import org.jetbrains.kotlin.utils.addToStdlib.check +import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult + +private val BUILTIN_SPECIAL_PROPERTIES_FQ_NAMES = setOf(FqName("kotlin.Collection.size"), FqName("kotlin.Map.size")) +private val BUILTIN_SPECIAL_PROPERTIES_SHORT_NAMES = BUILTIN_SPECIAL_PROPERTIES_FQ_NAMES.map { it.shortName() }.toSet() + +private fun DeclarationDescriptor.hasBuiltinSpecialPropertyFqName() + = name in BUILTIN_SPECIAL_PROPERTIES_SHORT_NAMES + && fqNameUnsafe.check { it.isSafe }?.toSafe() in BUILTIN_SPECIAL_PROPERTIES_FQ_NAMES + +val Name.isBuiltinSpecialPropertyName: Boolean get() = this in BUILTIN_SPECIAL_PROPERTIES_SHORT_NAMES + +val PropertyDescriptor.builtinSpecialOverridden: PropertyDescriptor? + get() = check { hasBuiltinSpecialPropertyFqName() } ?: overriddenDescriptors.firstNotNullResult { it.builtinSpecialOverridden } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java index 2ca9f3c8141..9e80bb76988 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl; +import org.jetbrains.kotlin.descriptors.impl.PropertyGetterDescriptorImpl; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.types.JetType; @@ -31,6 +32,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja public JavaPropertyDescriptor( @NotNull DeclarationDescriptor containingDeclaration, @NotNull Annotations annotations, + @NotNull Modality modality, @NotNull Visibility visibility, boolean isVar, @NotNull Name name, @@ -38,7 +40,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja @Nullable PropertyDescriptor original, boolean isStaticFinal ) { - super(containingDeclaration, original, annotations, Modality.FINAL, visibility, isVar, name, Kind.DECLARATION, source, + super(containingDeclaration, original, annotations, modality, visibility, isVar, name, Kind.DECLARATION, source, /* lateInit = */ false, /* isConst = */ false); this.isStaticFinal = isStaticFinal; @@ -59,6 +61,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja JavaPropertyDescriptor enhanced = new JavaPropertyDescriptor( getContainingDeclaration(), getAnnotations(), + getModality(), getVisibility(), isVar(), getName(), @@ -66,13 +69,27 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja getOriginal(), isStaticFinal ); - assert getGetter() == null : "Field must not have a getter: " + this; + + PropertyGetterDescriptorImpl newGetter = null; + PropertyGetterDescriptorImpl getter = getGetter(); + if (getter != null) { + newGetter = new PropertyGetterDescriptorImpl( + enhanced, getter.getAnnotations(), getter.getModality(), getter.getVisibility(), + getter.hasBody(), getter.isDefault(), getKind(), getter, SourceElement.NO_SOURCE); + newGetter.initialize(enhancedReturnType); + } + assert getSetter() == null : "Field must not have a setter: " + this; - enhanced.initialize(null, null); + enhanced.initialize(newGetter, null); enhanced.setSetterProjectedOut(isSetterProjectedOut()); if (compileTimeInitializer != null) { enhanced.setCompileTimeInitializer(compileTimeInitializer); } + + for (PropertyDescriptor descriptor : getOverriddenDescriptors()) { + enhanced.addOverriddenDescriptor(descriptor); + } + enhanced.setType( enhancedReturnType, getTypeParameters(), // TODO diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 81ac141feb9..611c740c78e 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -25,10 +25,13 @@ import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.load.java.JavaVisibilities import org.jetbrains.kotlin.load.java.JvmAnnotationNames +import org.jetbrains.kotlin.load.java.builtinSpecialOverridden import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils import org.jetbrains.kotlin.load.java.components.TypeUsage import org.jetbrains.kotlin.load.java.descriptors.JavaConstructorDescriptor +import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor +import org.jetbrains.kotlin.load.java.isBuiltinSpecialPropertyName import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.lazy.child import org.jetbrains.kotlin.load.java.lazy.resolveAnnotations @@ -44,6 +47,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.TypeUtils +import org.jetbrains.kotlin.types.checker.JetTypeChecker import org.jetbrains.kotlin.utils.* import java.util.* @@ -75,6 +79,31 @@ public class LazyJavaClassMemberScope( ).toReadOnlyList() } + override fun JavaMethodDescriptor.isVisibleAsFunction(): Boolean { + if (!canOverrideProperty) return true + return !doesOverrideAnySpecialProperty(getPropertiesFromSupertypes(name)) + } + + private val JavaMethodDescriptor.canOverrideProperty: Boolean + get() = valueParameters.isEmpty() && name.isBuiltinSpecialPropertyName + + private fun JavaMethodDescriptor.doesOverridesSpecialBuiltinProperty(property: PropertyDescriptor): Boolean { + if (valueParameters.isNotEmpty()) return false + + // TODO: is it always false? + if (name != property.name) return false + + return JetTypeChecker.DEFAULT.isSubtypeOf(returnType ?: return false, property.type) + } + + private fun JavaMethodDescriptor.doesOverrideAnySpecialProperty(properties: Collection): Boolean { + return properties.any overridesProperty@{ + property -> + val specialOverridden = property.builtinSpecialOverridden ?: return@overridesProperty false + doesOverridesSpecialBuiltinProperty(specialOverridden) + } + } + override fun computeNonDeclaredFunctions(result: MutableCollection, name: Name) { val functionsFromSupertypes = getFunctionsFromSupertypes(name, getContainingDeclaration()) result.addAll(DescriptorResolverUtils.resolveOverrides(name, functionsFromSupertypes, result, getContainingDeclaration(), c.components.errorReporter)) @@ -93,29 +122,53 @@ public class LazyJavaClassMemberScope( val propertiesFromSupertypes = getPropertiesFromSupertypes(name) + addPropertyOverrideByMethod(name, propertiesFromSupertypes, result) + result.addAll(DescriptorResolverUtils.resolveOverrides(name, propertiesFromSupertypes, result, getContainingDeclaration(), c.components.errorReporter)) } + private fun addPropertyOverrideByMethod( + name: Name, + propertiesFromSupertypes: Set, + result: MutableCollection + ) { + val javaMethod = memberIndex() + .findMethodsByName(name) + .firstOrNull { it.valueParameters.isEmpty() && it.typeParameters.isEmpty() && it.visibility.isPublicAPI } + ?: return + + val methodDescriptor = resolveMethodToFunctionDescriptor(javaMethod) + + if (methodDescriptor.doesOverrideAnySpecialProperty(propertiesFromSupertypes)) { + result.add(createPropertyDescriptorWithDefaultGetter(javaMethod, methodDescriptor.returnType, methodDescriptor.modality)) + } + } + private fun computeAnnotationProperties(name: Name, result: MutableCollection) { val method = memberIndex().findMethodsByName(name).singleOrNull() ?: return + result.add(createPropertyDescriptorWithDefaultGetter(method, modality = Modality.FINAL)) + } + + private fun createPropertyDescriptorWithDefaultGetter( + method: JavaMethod, givenType: JetType? = null, modality: Modality + ): JavaPropertyDescriptor { val annotations = c.resolveAnnotations(method) val propertyDescriptor = JavaPropertyDescriptor( - getContainingDeclaration(), annotations, method.getVisibility(), - /* isVar = */ false, method.getName(), c.components.sourceElementFactory.source(method), /* original */ null, + getContainingDeclaration(), annotations, modality, method.getVisibility(), + /* isVar = */ false, method.name, c.components.sourceElementFactory.source(method), /* original */ null, /* isStaticFinal = */ false ) - // default getter is necessary because there is no real field in annotation val getter = DescriptorFactory.createDefaultGetter(propertyDescriptor, Annotations.EMPTY) propertyDescriptor.initialize(getter, null) - val returnType = computeMethodReturnType(method, annotations, c.child(propertyDescriptor, method)) + val returnType = givenType ?: computeMethodReturnType(method, annotations, c.child(propertyDescriptor, method)) propertyDescriptor.setType(returnType, listOf(), getDispatchReceiverParameter(), null as JetType?) getter.initialize(returnType) - result.add(propertyDescriptor) + return propertyDescriptor } private fun getPropertiesFromSupertypes(name: Name): Set { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt index 0606ebc5e13..b80452adbbd 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt @@ -82,6 +82,8 @@ public abstract class LazyJavaScope( for (method in memberIndex().findMethodsByName(name)) { val descriptor = resolveMethodToFunctionDescriptor(method) + if (!descriptor.isVisibleAsFunction()) continue + c.components.javaResolverCache.recordMethod(method, descriptor) result.add(descriptor) if (method.isStatic) { @@ -94,6 +96,8 @@ public abstract class LazyJavaScope( enhanceSignatures(result).toReadOnlyList() } + open protected fun JavaMethodDescriptor.isVisibleAsFunction() = true + protected data class MethodSignatureData( val effectiveSignature: ExternalSignatureResolver.AlternativeMethodSignature, val errors: List @@ -267,7 +271,7 @@ public abstract class LazyJavaScope( val annotations = c.resolveAnnotations(field) val propertyName = field.getName() - return JavaPropertyDescriptor(containingDeclaration, annotations, visibility, isVar, propertyName, + return JavaPropertyDescriptor(containingDeclaration, annotations, Modality.FINAL, visibility, isVar, propertyName, c.components.sourceElementFactory.source(field), /* original = */ null, /*isConst= */ field.isFinalStatic) } diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt index 911102d84cb..f432df8f067 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt @@ -105,3 +105,11 @@ public fun String.lastIndexOfOrNull(char: Char, startIndex: Int = 0, ignoreCase: val index = lastIndexOf(char, startIndex, ignoreCase) return if (index >= 0) index else null } + +inline fun Iterable.firstNotNullResult(transform: (T) -> R?): R? { + for (element in this) { + val result = transform(element) + if (result != null) return result + } + return null +}