diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/CallableDescriptorCollectors.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/CallableDescriptorCollectors.kt index 7cdc9360ef0..d09e120e4af 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/CallableDescriptorCollectors.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/CallableDescriptorCollectors.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.resolve.calls.tasks.createSynthesizedInvokes import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject import org.jetbrains.kotlin.resolve.descriptorUtil.hasClassObjectType import org.jetbrains.kotlin.resolve.scopes.JetScope +import org.jetbrains.kotlin.resolve.scopes.LexicalChainedScope import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.utils.collectAllFromMeAndParent import org.jetbrains.kotlin.resolve.scopes.utils.getLocalVariable @@ -41,6 +42,9 @@ public interface CallableDescriptorCollector { public fun getNonExtensionsByName(scope: JetScope, name: Name, location: LookupLocation): Collection + // todo this is hack for static members priority + public fun getStaticInheritanceByName(lexicalScope: LexicalScope, name: Name, location: LookupLocation): Collection + public fun getMembersByName(receiver: JetType, name: Name, location: LookupLocation): Collection public fun getStaticMembersByName(receiver: JetType, name: Name, location: LookupLocation): Collection @@ -76,6 +80,17 @@ public fun CallableDescriptorCollectors.filtered(fil CallableDescriptorCollectors(this.collectors.map { it.filtered(filter) }) private object FunctionCollector : CallableDescriptorCollector { + override fun getStaticInheritanceByName(lexicalScope: LexicalScope, name: Name, location: LookupLocation): Collection { + return lexicalScope.collectAllFromMeAndParent { + if (it is LexicalChainedScope && it.isStaticScope) { + it.getDeclaredFunctions(name, location).filter { it.extensionReceiverParameter == null } + } + else { + emptyList() + } + } + } + override fun getLocalNonExtensionsByName(lexicalScope: LexicalScope, name: Name, location: LookupLocation): Collection { return lexicalScope.collectAllFromMeAndParent { if (it.ownerDescriptor is FunctionDescriptor) { @@ -156,6 +171,17 @@ private object VariableCollector : CallableDescriptorCollector { + return lexicalScope.collectAllFromMeAndParent { + if (it is LexicalChainedScope && it.isStaticScope) { + it.getDeclaredVariables(name, location) + } + else { + emptyList() + } + } + } + private fun getFakeDescriptorForObject(scope: JetScope, name: Name, location: LookupLocation): VariableDescriptor? { val classifier = scope.getClassifier(name, location) if (classifier !is ClassDescriptor || !classifier.hasClassObjectType) return null @@ -202,6 +228,10 @@ private object PropertyCollector : CallableDescriptorCollector { + return filterProperties(VARIABLES_COLLECTOR.getStaticInheritanceByName(lexicalScope, name, location)) + } + override fun getNonExtensionsByName(scope: JetScope, name: Name, location: LookupLocation): Collection { return filterProperties(VARIABLES_COLLECTOR.getNonExtensionsByName(scope, name, location)) } @@ -228,6 +258,10 @@ private fun CallableDescriptorCollector.filtered(fil return delegate.getLocalNonExtensionsByName(lexicalScope, name, location).filter(filter) } + override fun getStaticInheritanceByName(lexicalScope: LexicalScope, name: Name, location: LookupLocation): Collection { + return delegate.getStaticInheritanceByName(lexicalScope, name, location) + } + override fun getNonExtensionsByName(scope: JetScope, name: Name, location: LookupLocation): Collection { return delegate.getNonExtensionsByName(scope, name, location).filter(filter) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/TaskPrioritizer.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/TaskPrioritizer.kt index dace6fb013c..9a2bad986b1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/TaskPrioritizer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/TaskPrioritizer.kt @@ -314,6 +314,14 @@ public class TaskPrioritizer( addCandidatesForExplicitReceiver(implicitReceiver, implicitReceivers, c, isExplicit = false) } + // static members hack + c.callableDescriptorCollectors.forEach { + c.result.addCandidates { + val descriptors = it.getStaticInheritanceByName(c.scope, c.name, lookupLocation) + convertWithImpliedThisAndNoReceiver(c.scope, descriptors, c.context.call) + } + } + //nonlocals c.callableDescriptorCollectors.forEach { c.result.addCandidates { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt index 816bcab41fa..75d809e0b3b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt @@ -16,12 +16,18 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors +import com.intellij.util.SmartList import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.psi.JetParameter +import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny +import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.resolve.scopes.LexicalChainedScope import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.LexicalScopeImpl import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.utils.addIfNotNull +import java.util.* class ClassResolutionScopesSupport( private val classDescriptor: ClassDescriptor, @@ -39,23 +45,22 @@ class ClassResolutionScopesSupport( scopeWithGenerics(getOuterScope(), "Scope for class header resolution for ${classDescriptor.name}") } - private val scopeWithStaticMembersAndCompanionObjectReceiver = storageManager.createLazyValue { - val staticScopes = classDescriptor.companionObjectDescriptor?.let { - arrayOf(classDescriptor.staticScope, it.unsubstitutedInnerClassesScope) - } ?: arrayOf(classDescriptor.staticScope) + private val inheritanceScope: () -> LexicalScope = storageManager.createLazyValueWithPostCompute( + { + classDescriptor.getAllSuperclassesAndMeWithoutAny().asReversed().fold(getOuterScope()) { scope, currentClass -> + createInheritanceScope(parent = scope, ownerDescriptor = classDescriptor, classDescriptor = currentClass) + } + }, + { createInheritanceScope(getOuterScope(), classDescriptor, classDescriptor) }, + {} + ) - LexicalChainedScope(getOuterScope(), classDescriptor, false, - classDescriptor.companionObjectDescriptor?.thisAsReceiverParameter, - "Scope with static members and companion object for ${classDescriptor.name}", - memberScopes = *staticScopes) - } public val scopeForMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValue { - val scopeWithGenerics = scopeWithGenerics(scopeWithStaticMembersAndCompanionObjectReceiver(), + val scopeWithGenerics = scopeWithGenerics(inheritanceScope(), "Scope with generics for ${classDescriptor.name}") - LexicalChainedScope(scopeWithGenerics, classDescriptor, true, classDescriptor.thisAsReceiverParameter, - "Scope for member declaration resolution: ${classDescriptor.name}", - classDescriptor.unsubstitutedInnerClassesScope) + LexicalScopeImpl(scopeWithGenerics, classDescriptor, true, classDescriptor.thisAsReceiverParameter, + "Scope for member declaration resolution: ${classDescriptor.name}") } public val scopeForStaticMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValue { @@ -63,9 +68,8 @@ class ClassResolutionScopesSupport( scopeForMemberDeclarationResolution() } else { - LexicalChainedScope(scopeWithStaticMembersAndCompanionObjectReceiver(), classDescriptor, false, null, - "Scope for static member declaration resolution: ${classDescriptor.name}", - classDescriptor.unsubstitutedInnerClassesScope) + LexicalScopeImpl(inheritanceScope(), classDescriptor, false, null, + "Scope for static member declaration resolution: ${classDescriptor.name}") } } @@ -86,4 +90,36 @@ class ClassResolutionScopesSupport( } } + + public fun ClassDescriptor.getAllSuperclassesAndMeWithoutAny(): List { + val superClassesAndMe = SmartList() + var parent: ClassDescriptor? = this + do { + superClassesAndMe.add(parent) + parent = parent!!.getSuperClassNotAny() + } + while(parent != null && parent != this) // possible recursion in inheritance + + return superClassesAndMe + } + + private fun createInheritanceScope( + parent: LexicalScope, + ownerDescriptor: DeclarationDescriptor, + classDescriptor: ClassDescriptor + ): LexicalScope { + val staticScopes = ArrayList(3) + + // todo filter fake overrides + staticScopes.add(classDescriptor.staticScope) + + staticScopes.add(classDescriptor.unsubstitutedInnerClassesScope) + staticScopes.addIfNotNull(classDescriptor.companionObjectDescriptor?.unsubstitutedInnerClassesScope) + + return LexicalChainedScope(parent, ownerDescriptor, false, + classDescriptor.companionObjectDescriptor?.thisAsReceiverParameter, + "Scope with static members, nested classes and companion object for ${classDescriptor.name}", + memberScopes = *staticScopes.toTypedArray(), isStaticScope = true) + } + } \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/LexicalChainedScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/LexicalChainedScope.kt index 4f73900d639..0b84e2f29a5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/LexicalChainedScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/LexicalChainedScope.kt @@ -31,7 +31,9 @@ public class LexicalChainedScope( override val isOwnerDescriptorAccessibleByLabel: Boolean, override val implicitReceiver: ReceiverParameterDescriptor?, private val debugName: String, - vararg memberScopes: JetScope // todo JetScope -> MemberScope + vararg memberScopes: JetScope, // todo JetScope -> MemberScope + @Deprecated("This value is temporary hack for resolve -- don't use it!") + val isStaticScope: Boolean = false ): LexicalScope { override val parent = parent.takeSnapshot() private val scopeChain = memberScopes.clone() diff --git a/compiler/testData/diagnostics/tests/scopes/genericVsNested.kt b/compiler/testData/diagnostics/tests/scopes/genericVsNested.kt new file mode 100644 index 00000000000..36ce44491c8 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/genericVsNested.kt @@ -0,0 +1,57 @@ +class A { + class T + + object E { + init { + T() + } + } + + class F { + init { + T() + } + } + + inner class I { + init { + T() // todo: fix error message + } + } + + init { + T() + } +} + +class B { + companion object { + class T; + + init { + T() + } + } + + object E { + init { + T() + } + } + + class F { + init { + T() + } + } + + inner class I { + init { + T() + } + } + + init { + T() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/genericVsNested.txt b/compiler/testData/diagnostics/tests/scopes/genericVsNested.txt new file mode 100644 index 00000000000..2248d3c89b6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/genericVsNested.txt @@ -0,0 +1,78 @@ +package + +public final class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public object E { + private constructor E() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class F { + public constructor F() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final inner class I { + public constructor I() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class T { + public constructor T() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class B { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class T { + public constructor T() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } + + public object E { + private constructor E() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class F { + public constructor F() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final inner class I { + public constructor I() + 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/scopes/inheritance/companionObject.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObject.kt new file mode 100644 index 00000000000..76543d06ac4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObject.kt @@ -0,0 +1,39 @@ +interface A { + companion object { + fun foo() {} + + class A_ + } +} + +open class B { + companion object { + fun bar() {} + + class B_ + } +} + +class C: B(), A { + init { + foo() + A.foo() + A.Companion.foo() + C.foo() + + A_() + A.A_() + A.Companion.A_() + C.A_() + + bar() + B.bar() + B.Companion.bar() + C.bar() + + B_() + B.B_() + B.Companion.B_() + C.B_() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/companionObject.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObject.txt new file mode 100644 index 00000000000..ead7097a837 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObject.txt @@ -0,0 +1,51 @@ +package + +public interface A { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class A_ { + public constructor A_() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } +} + +public open class B { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final fun bar(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class B_ { + public constructor B_() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } +} + +public final class C : B, A { + public constructor C() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectAfterJava.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectAfterJava.kt new file mode 100644 index 00000000000..49fa3245a60 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectAfterJava.kt @@ -0,0 +1,50 @@ +// FILE: 1.kt +interface A { + companion object { + fun foo() {} + + class A_ + } +} + +open class B { + companion object { + fun bar() {} + + class B_ + } +} + +// FILE: C.java +public class C extends B implements A { + +} + +// FILE: 2.kt +class D: C() { + init { + foo() + A.foo() + A.Companion.foo() + C.foo() + D.foo() + + A_() + A.A_() + A.Companion.A_() + C.A_() + D.A_() + + bar() + B.bar() + B.Companion.bar() + C.bar() + D.bar() + + B_() + B.B_() + B.Companion.B_() + C.B_() + D.B_() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectAfterJava.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectAfterJava.txt new file mode 100644 index 00000000000..a519655c132 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectAfterJava.txt @@ -0,0 +1,58 @@ +package + +public interface A { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class A_ { + public constructor A_() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } +} + +public open class B { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final fun bar(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class B_ { + public constructor B_() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } +} + +public open class C : B, A { + public constructor C() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class D : C { + public constructor D() + 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/scopes/inheritance/companionObjectsOrder.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectsOrder.kt new file mode 100644 index 00000000000..ace81e1a17c --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectsOrder.kt @@ -0,0 +1,37 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +open class A { + companion object { + fun bar() = 1 + } + init { + val a: Int = foo() + val b: Int = bar() + } +} + +open class B: A() { + companion object { + fun bar() = "" + } + init { + val a: String = foo() + val b: String = bar() + } +} + +fun A.Companion.foo() = 1 +fun B.Companion.foo() = "" + +class C: A() { + init { + val a: Int = foo() + val b: Int = bar() + } +} + +class D: B() { + init { + val a: String = foo() + val b: String = bar() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectsOrder.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectsOrder.txt new file mode 100644 index 00000000000..87243b42d03 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectsOrder.txt @@ -0,0 +1,48 @@ +package + +public fun A.Companion.foo(): kotlin.Int +public fun B.Companion.foo(): kotlin.String + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final fun bar(): 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 + } +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final fun bar(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class C : A { + public constructor C() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class D : B { + public constructor D() + 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/scopes/inheritance/innerClasses.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/innerClasses.kt new file mode 100644 index 00000000000..88a3a63a021 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/innerClasses.kt @@ -0,0 +1,64 @@ +open class A { + inner class B { + fun foo() {} + } + + inner class D + + companion object { + class B { + fun bar() {} + } + + class C + } + + init { + B().foo() + B().bar() + + D() + C() + } +} + +class E: A() { + init { + B().foo() + B().bar() + + D() + C() + } + + object Z { + init { + B().foo() // todo: some resolve hacks + B().bar() + + D() + C() + } + } +} + +class F: A() { + class B { + fun fas() {} + } + inner class D { + fun f() {} + } + + init { + B().fas() + D().f() + } + + companion object { + init { + B().fas() + D().f() + } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/innerClasses.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/innerClasses.txt new file mode 100644 index 00000000000..fd94e1e958a --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/innerClasses.txt @@ -0,0 +1,89 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final inner class B { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class B { + public constructor B() + public final fun bar(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class C { + public constructor C() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } + + public final inner class D { + public constructor D() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class E : A { + public constructor E() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public object Z { + private constructor Z() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class F : A { + public constructor F() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class B { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun fas(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final inner class D { + public constructor D() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun f(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/methodsPriority.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/methodsPriority.kt new file mode 100644 index 00000000000..3d7b5aae0f4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/methodsPriority.kt @@ -0,0 +1,33 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +// FILE: A.java +public class A { + int foo() {return 1;} +} + +// FILE: 1.kt + +fun foo() = "" + +open class B: A() { + init { + val a: Int = foo() + } +} + +fun test() { + fun foo() = "" + + class B: A() { + init { + val a: Int = foo() // todo + } + } +} + +class E: A() { + fun foo() = A() + + init { + val a: A = foo() // todo: discuss + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/methodsPriority.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/methodsPriority.txt new file mode 100644 index 00000000000..5ca17688295 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/methodsPriority.txt @@ -0,0 +1,28 @@ +package + +public fun foo(): kotlin.String +public fun test(): kotlin.Unit + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public/*package*/ open fun foo(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public/*package*/ open override /*1*/ /*fake_override*/ fun foo(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class E : A { + public constructor E() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final override /*1*/ fun foo(): A + 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/scopes/inheritance/nestedClassesFromInterface.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.kt new file mode 100644 index 00000000000..57187527e90 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.kt @@ -0,0 +1,27 @@ +// FILE: A.java +public interface A { + public class A_ +} + +// FILE: 1.kt +interface B { + class B_ +} + +class X: A { + val a: A_ = A_() + val b: A.A_ = A.A_() + + companion object { + val a: A_ = A_() + } +} + +class Y: B { + val a: B_ = B_() + val b: B.B_ = B.B_() + + companion object { + val b: B_ = B_() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.txt new file mode 100644 index 00000000000..05e8461bbd7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.txt @@ -0,0 +1,61 @@ +package + +public interface A { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public open class A_ { + public constructor A_() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public interface B { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class B_ { + public constructor B_() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class X : A { + public constructor X() + public final val a: [ERROR : A_] + public final val b: A.A_ + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final val a: [ERROR : A_] + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class Y : B { + public constructor Y() + public final val a: [ERROR : B_] + public final val b: B.B_ + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final val b: [ERROR : B_] + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.kt new file mode 100644 index 00000000000..70ba5ba8899 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.kt @@ -0,0 +1,37 @@ +open class A { + companion object { + class B + } +} + +class C: A() { + val b: B = null!! + + init { + B() + } + + object O { + val b: B = null!! + + init { + B() + } + } + + class K { + val b: B = null!! + + init { + B() + } + } + + inner class I { + val b: B = null!! + + init { + B() + } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.txt new file mode 100644 index 00000000000..73ad7ae1dc2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.txt @@ -0,0 +1,54 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class B { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } +} + +public final class C : A { + public constructor C() + public final val b: A.Companion.B + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final inner class I { + public constructor I() + public final val b: A.Companion.B + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class K { + public constructor K() + public final val b: A.Companion.B + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public object O { + private constructor O() + public final val b: A.Companion.B + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNested.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNested.kt new file mode 100644 index 00000000000..1cd65322253 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNested.kt @@ -0,0 +1,93 @@ +open class A { + class X { + fun A_X() {} + } + + class Y { + fun A_Y() {} + } + + companion object { + class X { + fun A_C_X() {} + } + + class Z { + fun A_C_Z() {} + } + } + + init { + X().A_X() + X().A_C_X() + } +} + +class Simple: A() { + init { + Y().A_Y() + Z().A_C_Z() + } +} + +class B: A() { + class Y { + fun B_Y() {} + } + + class Z { + fun B_Z() {} + } + + init { + X().A_X() + X().A_C_X() + + Y().B_Y() + Y().A_Y() + + Z().B_Z() + Z().A_C_Z() + } + + companion object { + init { + X().A_X() + X().A_C_X() + + Y().B_Y() + Y().A_Y() + + Z().B_Z() + Z().A_C_Z() + } + } +} + +class C: A() { + companion object { + class Y { + fun C_C_Y() {} + } + + class Z { + fun C_C_Z() {} + } + + init { + Y().C_C_Y() + Y().A_Y() + + Z().C_C_Z() + Z().A_C_Z() + } + } + + init { + Y().C_C_Y() + Y().A_Y() + + Z().C_C_Z() + Z().A_C_Z() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNested.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNested.txt new file mode 100644 index 00000000000..d1fd09a4588 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNested.txt @@ -0,0 +1,114 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class X { + public constructor X() + public final fun A_C_X(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class Z { + public constructor Z() + public final fun A_C_Z(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } + + public final class X { + public constructor X() + public final fun A_X(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class Y { + public constructor Y() + public final fun A_Y(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class Y { + public constructor Y() + public final fun B_Y(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class Z { + public constructor Z() + public final fun B_Z(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class C : A { + public constructor C() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class Y { + public constructor Y() + public final fun C_C_Y(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class Z { + public constructor Z() + public final fun C_C_Z(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } +} + +public final class Simple : A { + public constructor Simple() + 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/scopes/inheritance/nestedCompanionClassVsNestedJava.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNestedJava.kt new file mode 100644 index 00000000000..6a7f0386506 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNestedJava.kt @@ -0,0 +1,45 @@ +// FILE: 1.kt +open class A { + class Y { + fun A_Y() {} + } + + companion object { + class Z { + fun A_C_Z() {} + } + } +} + +// FILE: B.java +public class B extends A { + class Y { + void B_Y() {} + } + + class Z { + void B_Z() {} + } +} + +// FILE: C.java +public class C extends A {} + +// FILE: 2.kt +class E: B() { + init { + Y().B_Y() + Y().A_Y() + + Z().B_Z() + Z().A_C_Z() + } +} + +class Y: C() { + init { + Y().A_Y() + + Z().A_C_Z() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNestedJava.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNestedJava.txt new file mode 100644 index 00000000000..172b0e4891b --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNestedJava.txt @@ -0,0 +1,75 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class Z { + public constructor Z() + public final fun A_C_Z(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } + + public final class Y { + public constructor Y() + public final fun A_Y(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public/*package*/ open inner class Y { + public/*package*/ constructor Y() + public/*package*/ open fun B_Y(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public/*package*/ open inner class Z { + public/*package*/ constructor Z() + public/*package*/ open fun B_Z(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class C : A { + public constructor C() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class E : B { + public constructor E() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Y : C { + public constructor Y() + 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/scopes/inheritance/nestedFromJava.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.kt new file mode 100644 index 00000000000..aa769cbc616 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.kt @@ -0,0 +1,90 @@ +// FILE: A.java +public interface A { + public class A_S { // static + + } +} + +// FILE: B.java +public class B { + public static class B_S { + + } + public class B_ { + + } +} + +// FILE: C.java +public class C extends B implements A { + +} + +// FILE: 1.kt + +class X: A { + val a_s: A_S = null!! + + init { + A_S() + A.A_S() + X.A_S() + } + + object xD { + val a_: A_S = null!! + + init { + A_S() + } + } +} + +class Y: B() { + val b_: B_ = null!! + val b_s: B_S = null!! + + init { + B_() + B.B_() + Y.B_() + + B_S() + B.B_S() + Y.B_S() + } + + object X { + val b_: B_ = null!! + val b_s: B_S = null!! + + init { + B_() + B_S() + } + } +} + +class Z: C() { + val a_s: A_S = null!! + val b_: B_ = null!! + val b_s: B_S = null!! + + init { + A_S() + B_() + B_S() + } + + object X { + val a_s: A_S = null!! + val b_: B_ = null!! + val b_s: B_S = null!! + + init { + A_S() + B_() + B_S() + } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.txt new file mode 100644 index 00000000000..7a220a68c43 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.txt @@ -0,0 +1,96 @@ +package + +public interface A { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public open class A_S { + public constructor A_S() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class B { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public open inner class B_ { + public constructor B_() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public open class B_S { + public constructor B_S() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class C : B, A { + public constructor C() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class X : A { + public constructor X() + public final val a_s: [ERROR : A_S] + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public object xD { + private constructor xD() + public final val a_: [ERROR : A_S] + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class Y : B { + public constructor Y() + public final val b_: B.B_ + public final val b_s: B.B_S + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public object X { + private constructor X() + public final val b_: B.B_ + public final val b_s: B.B_S + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class Z : C { + public constructor Z() + public final val a_s: [ERROR : A_S] + public final val b_: B.B_ + public final val b_s: B.B_S + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public object X { + private constructor X() + public final val a_s: [ERROR : A_S] + public final val b_: B.B_ + public final val b_s: B.B_S + 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/scopes/inheritance/nestedFromJavaAfterKotlin.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJavaAfterKotlin.kt new file mode 100644 index 00000000000..643f3673ed2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJavaAfterKotlin.kt @@ -0,0 +1,82 @@ +// FILE: A.java +public interface A { + class A_S { + + } +} + +// FILE: B.java +public class B { + static class B_S { + + } + class B_ { + + } +} + +// FILE: C.java +public class C extends B implements A { + +} + +// FILE: 1.kt +interface E { + class E_S +} + +open class D: C(), E + +// FILE: F.java +public class F extends D { + +} + +// FILE: 2.kt +class X: D() { + init { + B_() + B.B_() + C.B_() + D.B_() + X.B_() + + A_S() + A.A_S() + C.A_S() + D.A_S() + X.A_S() + + B_S() + B.B_S() + C.B_S() + D.B_S() + X.B_S() + + E_S() + E.E_S() + D.E_S() + X.E_S() + } +} + +class Y: F() { + init { + + B_() + F.B_() + Y.B_() + + A_S() + F.A_S() + Y.A_S() + + B_S() + F.B_S() + Y.B_S() + + E_S() + F.E_S() + Y.E_S() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJavaAfterKotlin.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJavaAfterKotlin.txt new file mode 100644 index 00000000000..964e86e0d6b --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJavaAfterKotlin.txt @@ -0,0 +1,83 @@ +package + +public interface A { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public open class A_S { + public constructor A_S() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class B { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public/*package*/ open inner class B_ { + public/*package*/ constructor B_() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public/*package*/ open class B_S { + public/*package*/ constructor B_S() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class C : B, A { + public constructor C() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class D : C, E { + public constructor D() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface E { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class E_S { + public constructor E_S() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class F : D { + public constructor F() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class X : D { + public constructor X() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Y : F { + public constructor Y() + 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/scopes/inheritance/nestedVsToplevelClass.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedVsToplevelClass.kt new file mode 100644 index 00000000000..9ebeaeecf23 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedVsToplevelClass.kt @@ -0,0 +1,36 @@ +class X { + fun T_X() {} +} + +class Y { + fun T_Y() {} +} + +open class A { + class X { + fun A_X() {} + } + companion object { + class Y { + fun A_C_Y() {} + } + } + + init { + X().A_X() + X().T_X() + + Y().A_C_Y() + Y().T_Y() + } +} + +class B: A() { + init { + X().A_X() + X().T_X() + + Y().A_C_Y() + Y().T_Y() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/nestedVsToplevelClass.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedVsToplevelClass.txt new file mode 100644 index 00000000000..39597ff9be7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/nestedVsToplevelClass.txt @@ -0,0 +1,54 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public final class Y { + public constructor Y() + public final fun A_C_Y(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + } + + public final class X { + public constructor X() + public final fun A_X(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class X { + public constructor X() + public final fun T_X(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Y { + public constructor Y() + public final fun T_Y(): kotlin.Unit + 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/scopes/inheritance/severalCompanions.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/severalCompanions.kt new file mode 100644 index 00000000000..875eb4cfbf8 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/severalCompanions.kt @@ -0,0 +1,22 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +open class A { + companion object { + fun foo() = 1 + fun bar(a: String) = a + } +} + +open class B: A() { + companion object { + fun foo() = "" + fun bar(a: Int) = a + } +} + +class C: B() { + init { + val a: String = foo() + val b: Int = bar(1) + val c: String = bar("") + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/severalCompanions.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/severalCompanions.txt new file mode 100644 index 00000000000..160e28f0262 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/severalCompanions.txt @@ -0,0 +1,40 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final fun bar(/*0*/ a: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final fun bar(/*0*/ a: kotlin.Int): kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class C : B { + public constructor C() + 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/scopes/inheritance/statics/localVsStatic.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/localVsStatic.kt new file mode 100644 index 00000000000..b4be8f60f25 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/localVsStatic.kt @@ -0,0 +1,26 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +// FILE: A.java +public class A { + public static int foo() {return 1;} +} + +// FILE: 1.kt + +fun foo() = "" + +class B: A() { + init { + val a: Int = foo() + } +} + +// FILE: 2.kt +fun test() { + fun foo() = "" + + class B: A() { + init { + val a: Int = foo() // todo + } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/localVsStatic.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/localVsStatic.txt new file mode 100644 index 00000000000..4b7dc90111e --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/localVsStatic.txt @@ -0,0 +1,21 @@ +package + +public fun foo(): kotlin.String +public fun test(): kotlin.Unit + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public open fun foo(): kotlin.Int +} + +public final class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/overloadStatic.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/overloadStatic.kt new file mode 100644 index 00000000000..a4111820f3f --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/overloadStatic.kt @@ -0,0 +1,20 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +// FILE: A.java +public class A { + static void foo() {} + static int bar() { return 1; } +} + +// FILE: B.java +public class B extends A { + static void foo() {} + static long bar() { return 1; } +} + +// FILE: 1.kt +class E: B() { + init { + foo() + val a: Long = bar() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/overloadStatic.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/overloadStatic.txt new file mode 100644 index 00000000000..a4acbd15388 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/overloadStatic.txt @@ -0,0 +1,30 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public/*package*/ open fun bar(): kotlin.Int + public/*package*/ open fun foo(): kotlin.Unit +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public/*package*/ open override /*1*/ fun bar(): kotlin.Long + public/*package*/ open override /*1*/ fun foo(): kotlin.Unit +} + +public final class E : B { + public constructor E() + 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/scopes/inheritance/statics/staticFunVsImport.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticFunVsImport.kt new file mode 100644 index 00000000000..39dbe26c492 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticFunVsImport.kt @@ -0,0 +1,50 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +// FILE: A.java +public class A { + static void foo() {} + static int bar() {return 1;} +} + +// FILE: B.java +public class B extends A {} + +// FILE: C.java +public class C { + static void bar() {} +} + +// FILE: 1.kt +import A.foo +import B.bar + +class E: A() { + init { + foo() + bar() + } +} + +class F: B() { + init { + foo() + bar() + } +} + +// FILE: 2.kt +import C.bar + +class Z: A() { + init { + val a: Int = bar() + } +} + +// FILE: 3.kt +import C.* + +class Q: A() { + init { + val a: Int = bar() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticFunVsImport.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticFunVsImport.txt new file mode 100644 index 00000000000..99ad510f84f --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticFunVsImport.txt @@ -0,0 +1,61 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public/*package*/ open fun bar(): kotlin.Int + public/*package*/ open fun foo(): kotlin.Unit +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public/*package*/ open override /*1*/ /*fake_override*/ fun bar(): kotlin.Int + public/*package*/ open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit +} + +public open class C { + public constructor C() + 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 + + // Static members + public/*package*/ open fun bar(): kotlin.Unit +} + +public final class E : A { + public constructor E() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class F : B { + public constructor F() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Q : A { + public constructor Q() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Z : A { + public constructor Z() + 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/scopes/inheritance/statics/staticPropertyVsImport.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticPropertyVsImport.kt new file mode 100644 index 00000000000..f6e807ba3e2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticPropertyVsImport.kt @@ -0,0 +1,59 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +// FILE: A.java +public class A { + static byte foo = 1; + static int bar = 2; +} + +// FILE: B.java +public class B extends A {} + +// FILE: C.java +public class C { + static long bar = 3; +} + +// FILE: 1.kt +import A.foo +import B.bar + +class E: A() { + init { + foo + bar + } +} + +class F: B() { + init { + foo + bar + } +} + +// FILE: 2.kt +import C.bar + +class Z: A() { + init { + val a: Int = bar + } +} + +// FILE: 3.kt +import C.* + +class Q: A() { + init { + val a: Int = bar + } +} + +// FILE: 4.kt +val bar = "" + +class W: A() { + init { + val a: Int = bar + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticPropertyVsImport.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticPropertyVsImport.txt new file mode 100644 index 00000000000..1e7d3f05e82 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticPropertyVsImport.txt @@ -0,0 +1,70 @@ +package + +public val bar: kotlin.String = "" + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public/*package*/ final var bar: kotlin.Int + public/*package*/ final var foo: kotlin.Byte +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public/*package*/ final override /*1*/ /*fake_override*/ var bar: kotlin.Int + public/*package*/ final override /*1*/ /*fake_override*/ var foo: kotlin.Byte +} + +public open class C { + public constructor C() + 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 + + // Static members + public/*package*/ final var bar: kotlin.Long +} + +public final class E : A { + public constructor E() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class F : B { + public constructor F() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Q : A { + public constructor Q() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class W : A { + public constructor W() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Z : A { + public constructor Z() + 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/scopes/inheritance/statics/staticVsCompanion.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsCompanion.kt new file mode 100644 index 00000000000..820f5ca152d --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsCompanion.kt @@ -0,0 +1,36 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +// FILE: A.java +public class A { + static void foo() {} +} + +// FILE: 1.kt +open class B : A() { + companion object { + fun foo() = 1 + } + + init { + val a: Int = foo() + } +} + +class C: B() { + init { + val a: Int = foo() + } +} + +// FILE: X.java +public class X extends B { + static double foo() { + return 1.0 + } +} + +// FILE: 2.kt +class Y: X() { + init { + val a: Double = foo() // todo + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsCompanion.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsCompanion.txt new file mode 100644 index 00000000000..11c8e2510aa --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsCompanion.txt @@ -0,0 +1,50 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public/*package*/ open fun foo(): kotlin.Unit +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class C : B { + public constructor C() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class X : B { + public constructor X() + 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 + + // Static members + public/*package*/ open override /*1*/ fun foo(): kotlin.Double +} + +public final class Y : X { + public constructor Y() + 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/scopes/inheritance/statics/staticVsMember.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsMember.kt new file mode 100644 index 00000000000..434f1c18063 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsMember.kt @@ -0,0 +1,69 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE +// FILE: A.java +public class A { + public static int foo() { return 1; } + public static int bar = 1; +} + +// FILE: 1.kt + +class B: A() { + companion object { + init { + val a: Int = foo() + val b: Int = bar + } + } + + init { + val a: Int = foo() + val b: Int = bar + } +} + +open class C: A() { + val bar = "" + fun foo() = "" + + init { + val a: String = foo() + val b: String = bar + } +} + +class E: C() { + init { + val a: String = foo() + val b: String = bar + } +} + +open class F: A() { + companion object { + val bar = "" + fun foo() = "" + + init { + val a: String = foo() + val b: String = bar + } + } + init { + val a: String = foo() + val b: String = bar + } +} + +class G: F() { + companion object { + init { + val a: String = foo() + val b: String = bar + } + } + + init { + val a: String = foo() + val b: String = bar + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsMember.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsMember.txt new file mode 100644 index 00000000000..d14fb06a126 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsMember.txt @@ -0,0 +1,74 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public final var bar: kotlin.Int + public open fun foo(): kotlin.Int +} + +public final class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public open class C : A { + public constructor C() + public final val bar: kotlin.String = "" + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class E : C { + public constructor E() + public final override /*1*/ /*fake_override*/ val bar: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final override /*1*/ /*fake_override*/ fun foo(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class F : A { + public constructor F() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final val bar: kotlin.String = "" + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +public final class G : F { + public constructor G() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + 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/scopes/inheritance/statics/staticVsOuter.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsOuter.kt new file mode 100644 index 00000000000..33d2f37b2ab --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsOuter.kt @@ -0,0 +1,19 @@ +// FILE: A.java +public class A { + public static int foo() {return 1;} +} + +// FILE: B.java +public class B extends A { + public static int foo() {return 1;} +} + +// FILE: 1.kt + +fun foo() = "" + +class C: B() { + init { + val a: Int = foo() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsOuter.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsOuter.txt new file mode 100644 index 00000000000..854dc61dc78 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsOuter.txt @@ -0,0 +1,30 @@ +package + +public fun foo(): kotlin.String + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public open fun foo(): kotlin.Int +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public open override /*1*/ fun foo(): kotlin.Int +} + +public final class C : B { + public constructor C() + 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/scopes/inheritance/statics/staticsFromjava.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjava.kt new file mode 100644 index 00000000000..a9fe29df952 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjava.kt @@ -0,0 +1,51 @@ +// FILE: A.java +public class A { + public static void foo() {} +} + +// FILE: B.java +public class B extends A { + public static vod bar() {} +} + +// FILE: 1.kt +open class X: A() { + init { + foo() + A.foo() + } +} + +open class Y: B() { + init { + foo() + A.foo() + B.foo() + + bar() + B.bar() + } +} + +class XN: X() { + init { + foo() + A.foo() + X.foo() + XN.foo() + } +} + +class YN: Y() { + init { + foo() + A.foo() + Y.foo() + YN.foo() + + bar() + B.bar() + Y.bar() + YN.bar() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjava.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjava.txt new file mode 100644 index 00000000000..6a62a16ab01 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjava.txt @@ -0,0 +1,50 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public open fun foo(): kotlin.Unit +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public open fun bar(): [ERROR : Unresolved java classifier: vod]! + public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit +} + +public open class X : A { + public constructor X() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class XN : X { + public constructor XN() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class Y : B { + public constructor Y() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class YN : Y { + public constructor YN() + 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/scopes/inheritance/statics/staticsFromjavaAfterKotlin.kt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjavaAfterKotlin.kt new file mode 100644 index 00000000000..b575a2eb14b --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjavaAfterKotlin.kt @@ -0,0 +1,27 @@ +// FILE: A.java +public class A { + public static void foo() {} +} + +// FILE: 1.kt +open class B: A() + +// FILE: C.java +public class C extends B { + public static vod bar() {} +} + +// FILE: 2.kt +class D: C() { + init { + foo() + A.foo() + B.foo() + C.foo() + D.foo() + + bar() + C.bar() + D.bar() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjavaAfterKotlin.txt b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjavaAfterKotlin.txt new file mode 100644 index 00000000000..664f4bc235a --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjavaAfterKotlin.txt @@ -0,0 +1,36 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public open fun foo(): kotlin.Unit +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class C : B { + public constructor C() + 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 + + // Static members + public open fun bar(): [ERROR : Unresolved java classifier: vod]! + public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit +} + +public final class D : C { + public constructor D() + 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/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 32974f44fa2..231d7480ce5 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -13044,6 +13044,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("genericVsNested.kt") + public void testGenericVsNested() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/genericVsNested.kt"); + doTest(fileName); + } + @TestMetadata("initializerScopeOfExtensionProperty.kt") public void testInitializerScopeOfExtensionProperty() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/initializerScopeOfExtensionProperty.kt"); @@ -13250,6 +13256,84 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/scopes/inheritance"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("companionObject.kt") + public void testCompanionObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/companionObject.kt"); + doTest(fileName); + } + + @TestMetadata("companionObjectAfterJava.kt") + public void testCompanionObjectAfterJava() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectAfterJava.kt"); + doTest(fileName); + } + + @TestMetadata("companionObjectsOrder.kt") + public void testCompanionObjectsOrder() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/companionObjectsOrder.kt"); + doTest(fileName); + } + + @TestMetadata("innerClasses.kt") + public void testInnerClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/innerClasses.kt"); + doTest(fileName); + } + + @TestMetadata("methodsPriority.kt") + public void testMethodsPriority() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/methodsPriority.kt"); + doTest(fileName); + } + + @TestMetadata("nestedClassesFromInterface.kt") + public void testNestedClassesFromInterface() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/nestedClassesFromInterface.kt"); + doTest(fileName); + } + + @TestMetadata("nestedCompanionClass.kt") + public void testNestedCompanionClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClass.kt"); + doTest(fileName); + } + + @TestMetadata("nestedCompanionClassVsNested.kt") + public void testNestedCompanionClassVsNested() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNested.kt"); + doTest(fileName); + } + + @TestMetadata("nestedCompanionClassVsNestedJava.kt") + public void testNestedCompanionClassVsNestedJava() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/nestedCompanionClassVsNestedJava.kt"); + doTest(fileName); + } + + @TestMetadata("nestedFromJava.kt") + public void testNestedFromJava() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJava.kt"); + doTest(fileName); + } + + @TestMetadata("nestedFromJavaAfterKotlin.kt") + public void testNestedFromJavaAfterKotlin() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/nestedFromJavaAfterKotlin.kt"); + doTest(fileName); + } + + @TestMetadata("nestedVsToplevelClass.kt") + public void testNestedVsToplevelClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/nestedVsToplevelClass.kt"); + doTest(fileName); + } + + @TestMetadata("severalCompanions.kt") + public void testSeveralCompanions() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/severalCompanions.kt"); + doTest(fileName); + } + @TestMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) @@ -13276,6 +13360,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("localVsStatic.kt") + public void testLocalVsStatic() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/localVsStatic.kt"); + doTest(fileName); + } + @TestMetadata("nameClash0.kt") public void testNameClash0() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/nameClash0.kt"); @@ -13299,6 +13389,54 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/oneInterfaceManyTimes.kt"); doTest(fileName); } + + @TestMetadata("overloadStatic.kt") + public void testOverloadStatic() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/overloadStatic.kt"); + doTest(fileName); + } + + @TestMetadata("staticFunVsImport.kt") + public void testStaticFunVsImport() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticFunVsImport.kt"); + doTest(fileName); + } + + @TestMetadata("staticPropertyVsImport.kt") + public void testStaticPropertyVsImport() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticPropertyVsImport.kt"); + doTest(fileName); + } + + @TestMetadata("staticVsCompanion.kt") + public void testStaticVsCompanion() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsCompanion.kt"); + doTest(fileName); + } + + @TestMetadata("staticVsMember.kt") + public void testStaticVsMember() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsMember.kt"); + doTest(fileName); + } + + @TestMetadata("staticVsOuter.kt") + public void testStaticVsOuter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticVsOuter.kt"); + doTest(fileName); + } + + @TestMetadata("staticsFromjava.kt") + public void testStaticsFromjava() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjava.kt"); + doTest(fileName); + } + + @TestMetadata("staticsFromjavaAfterKotlin.kt") + public void testStaticsFromjavaAfterKotlin() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/inheritance/statics/staticsFromjavaAfterKotlin.kt"); + doTest(fileName); + } } } } diff --git a/idea/testData/refactoring/pushDown/implicitCompanionUsages.kt.after b/idea/testData/refactoring/pushDown/implicitCompanionUsages.kt.after index 033583e834c..608b93461e1 100644 --- a/idea/testData/refactoring/pushDown/implicitCompanionUsages.kt.after +++ b/idea/testData/refactoring/pushDown/implicitCompanionUsages.kt.after @@ -9,5 +9,5 @@ class X { class B : X.A { // INFO: {"checked": "true"} - fun foo(): Int = X.A.bar() + X.A.bar() + X.A.bar() + fun foo(): Int = bar() + bar() + bar() } \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/conventions/delegateProperty.kt b/jps-plugin/testData/incremental/lookupTracker/conventions/delegateProperty.kt index 5fa5b67c2da..a44e7f2c02a 100644 --- a/jps-plugin/testData/incremental/lookupTracker/conventions/delegateProperty.kt +++ b/jps-plugin/testData/incremental/lookupTracker/conventions/delegateProperty.kt @@ -16,7 +16,7 @@ import kotlin.reflect.KProperty /*p:foo.bar*/fun /*p:foo.bar*/D2.propertyDelegated(p: /*p:foo.bar*/Any?) {} /*p:foo.bar*/class D3 : /*p:foo.bar*/D2() { - fun propertyDelegated(p: /*c:foo.bar.D3 p:foo.bar*/Any?) {} + fun propertyDelegated(p: /*c:foo.bar.D3 c:foo.bar.D2 p:foo.bar*/Any?) {} }