diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DeclarationScopeProviderImpl.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DeclarationScopeProviderImpl.java index 276a3e771f7..a141be86c50 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DeclarationScopeProviderImpl.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DeclarationScopeProviderImpl.java @@ -63,6 +63,11 @@ public class DeclarationScopeProviderImpl implements DeclarationScopeProvider { if (jetDeclaration instanceof JetClassInitializer || jetDeclaration instanceof JetProperty) { return classDescriptor.getScopeForInitializerResolution(); } + if (jetDeclaration instanceof JetObjectDeclaration + || (jetDeclaration instanceof JetClass && !((JetClass) jetDeclaration).isInner())) { + return classDescriptor.getScopeForStaticMemberDeclarationResolution(); + } + return classDescriptor.getScopeForMemberDeclarationResolution(); } 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 7e963720b6a..db7a1cfa698 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 @@ -27,11 +27,15 @@ class ClassResolutionScopesSupport( ) { private val scopeForClassHeaderResolution = storageManager.createLazyValue { computeScopeForClassHeaderResolution() } private val scopeForMemberDeclarationResolution = storageManager.createLazyValue { computeScopeForMemberDeclarationResolution() } + private val scopeForStaticMemberDeclarationResolution = storageManager.createLazyValue { computeScopeForStaticMemberDeclarationResolution() } + fun getScopeForClassHeaderResolution(): JetScope = scopeForClassHeaderResolution() fun getScopeForMemberDeclarationResolution(): JetScope = scopeForMemberDeclarationResolution() + fun getScopeForStaticMemberDeclarationResolution(): JetScope = scopeForStaticMemberDeclarationResolution() + private fun computeScopeForClassHeaderResolution(): JetScope { val scope = WritableScopeImpl(JetScope.Empty, classDescriptor, RedeclarationHandler.DO_NOTHING, "Scope with type parameters for " + classDescriptor.getName()) for (typeParameterDescriptor in classDescriptor.getTypeConstructor().getParameters()) { @@ -62,6 +66,18 @@ class ClassResolutionScopesSupport( return thisScope } + private fun computeScopeForStaticMemberDeclarationResolution(): JetScope { + if (classDescriptor.getKind().isSingleton) return scopeForMemberDeclarationResolution() + + return ChainedScope( + classDescriptor, + "ScopeForStaticMemberDeclarationResolution: " + classDescriptor.getName(), + classDescriptor.unsubstitutedInnerClassesScope, + getOuterScope(), + getCompanionObjectScope(), + classDescriptor.getStaticScope()) + } + private fun getCompanionObjectScope(): JetScope { val companionObjectDescriptor = classDescriptor.getCompanionObjectDescriptor() return if (companionObjectDescriptor != null) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java index 96c8424af87..0550a658192 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -270,6 +270,10 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes return resolutionScopesSupport.getScopeForMemberDeclarationResolution(); } + public JetScope getScopeForStaticMemberDeclarationResolution() { + return resolutionScopesSupport.getScopeForStaticMemberDeclarationResolution(); + } + @Override @NotNull public JetScope getScopeForInitializerResolution() { diff --git a/compiler/testData/diagnostics/tests/callableReference/function/innerConstructorFromClass.kt b/compiler/testData/diagnostics/tests/callableReference/function/innerConstructorFromClass.kt index 62e6ab9194d..887e8f1c567 100644 --- a/compiler/testData/diagnostics/tests/callableReference/function/innerConstructorFromClass.kt +++ b/compiler/testData/diagnostics/tests/callableReference/function/innerConstructorFromClass.kt @@ -15,7 +15,7 @@ class A { companion object { fun main() { - ::Inner + ::Inner val y = A::Inner checkSubtype>(y) @@ -30,4 +30,4 @@ class B { checkSubtype>(y) } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/classObjects/ClassObjectCannotAccessClassFields.kt b/compiler/testData/diagnostics/tests/classObjects/ClassObjectCannotAccessClassFields.kt index aef51074ce8..a76c28aba66 100644 --- a/compiler/testData/diagnostics/tests/classObjects/ClassObjectCannotAccessClassFields.kt +++ b/compiler/testData/diagnostics/tests/classObjects/ClassObjectCannotAccessClassFields.kt @@ -4,6 +4,6 @@ class A() { val x = 1 companion object { - val y = x + val y = x } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/classObjects/ClassObjectCannotAccessClassFields.txt b/compiler/testData/diagnostics/tests/classObjects/ClassObjectCannotAccessClassFields.txt index d4c57fb79d7..faf9ec193ad 100644 --- a/compiler/testData/diagnostics/tests/classObjects/ClassObjectCannotAccessClassFields.txt +++ b/compiler/testData/diagnostics/tests/classObjects/ClassObjectCannotAccessClassFields.txt @@ -9,7 +9,7 @@ internal final class A { public companion object Companion { private constructor Companion() - internal final val y: kotlin.Int = 1 + internal final val y: [ERROR : Type for 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 diff --git a/compiler/testData/diagnostics/tests/classObjects/classObjectHeader.kt b/compiler/testData/diagnostics/tests/classObjects/classObjectHeader.kt index 2e155653321..6c630e252b9 100644 --- a/compiler/testData/diagnostics/tests/classObjects/classObjectHeader.kt +++ b/compiler/testData/diagnostics/tests/classObjects/classObjectHeader.kt @@ -4,6 +4,6 @@ open class ToResolve(f : (Int) -> Int) fun testFun(a : Int) = 12 class TestSome

{ - companion object : ToResolve<P>({testFun(it)}) { + companion object : ToResolve<P>({testFun(it)}) { } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/classObjects/classObjectHeader.txt b/compiler/testData/diagnostics/tests/classObjects/classObjectHeader.txt index e24dbac6096..b4d649efd8e 100644 --- a/compiler/testData/diagnostics/tests/classObjects/classObjectHeader.txt +++ b/compiler/testData/diagnostics/tests/classObjects/classObjectHeader.txt @@ -9,7 +9,7 @@ package test { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - public companion object Companion : test.ToResolve

{ + public companion object Companion : test.ToResolve<[ERROR : P]> { 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 diff --git a/compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.kt b/compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.kt index 826b847b9f1..498426201be 100644 --- a/compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.kt +++ b/compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.kt @@ -4,6 +4,6 @@ class Test { fun test(): Int = 12 companion object { - val a = test() // Check if resolver will be able to infer type of a variable + val a = test() // Check if resolver will be able to infer type of a variable } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.txt b/compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.txt index 0ac6f708f80..414ba3527df 100644 --- a/compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.txt +++ b/compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.txt @@ -11,7 +11,7 @@ package test { public companion object Companion { private constructor Companion() - internal final val a: kotlin.Int + internal final val a: [ERROR : Type for test()] 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/inner/classesInClassObjectHeader.kt b/compiler/testData/diagnostics/tests/inner/classesInClassObjectHeader.kt index 510894438c2..2c7492d2812 100644 --- a/compiler/testData/diagnostics/tests/inner/classesInClassObjectHeader.kt +++ b/compiler/testData/diagnostics/tests/inner/classesInClassObjectHeader.kt @@ -1,6 +1,6 @@ class Test { @`InnerAnnotation` @InnerAnnotation - companion object : StaticClass(), InnerClass() { + companion object : StaticClass(), InnerClass() { } diff --git a/compiler/testData/diagnostics/tests/inner/constructorAccess.kt b/compiler/testData/diagnostics/tests/inner/constructorAccess.kt index de62359b68e..91e8f63dcc7 100644 --- a/compiler/testData/diagnostics/tests/inner/constructorAccess.kt +++ b/compiler/testData/diagnostics/tests/inner/constructorAccess.kt @@ -8,8 +8,8 @@ class Outer1 { inner class Inner - class C5 { val b = Inner() } - class C6(val b: Any = Inner()) + class C5 { val b = Inner() } + class C6(val b: Any = Inner()) inner class C7 { val b = Inner() } inner class C8(val b: Any = Inner()) } @@ -18,7 +18,7 @@ class Outer1 { class Outer2 { class Nested { fun foo() = Outer2() - fun bar() = Inner() + fun bar() = Inner() } inner class Inner { fun foo() = Outer2() @@ -29,4 +29,4 @@ class Outer2 { Nested() Inner() } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/constructorAccess.txt b/compiler/testData/diagnostics/tests/inner/constructorAccess.txt index 4963af22ee0..ae1c0dc3634 100644 --- a/compiler/testData/diagnostics/tests/inner/constructorAccess.txt +++ b/compiler/testData/diagnostics/tests/inner/constructorAccess.txt @@ -40,7 +40,7 @@ internal final class Outer1 { internal final class C5 { public constructor C5() - internal final val b: Outer1.Inner + internal final val b: [ERROR : Type for Inner()] 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 @@ -103,7 +103,7 @@ internal final class Outer2 { internal final class Nested { public constructor Nested() - internal final fun bar(): Outer2.Inner + internal final fun bar(): [ERROR : Error function type] public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean internal final fun foo(): Outer2 public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/inner/deepInnerClass.kt b/compiler/testData/diagnostics/tests/inner/deepInnerClass.kt index 5b86be12c82..ae65394e07d 100644 --- a/compiler/testData/diagnostics/tests/inner/deepInnerClass.kt +++ b/compiler/testData/diagnostics/tests/inner/deepInnerClass.kt @@ -3,11 +3,11 @@ interface P class A { class B { fun test() { - class C() : PT> { - companion object : P<W, T> { + class C() : PT> { + companion object : P<W, T> { } - inner class D : PT> + inner class D : PT> } } } diff --git a/compiler/testData/diagnostics/tests/inner/innerErrorForClassObjects.kt b/compiler/testData/diagnostics/tests/inner/innerErrorForClassObjects.kt index 7872b82b912..fc94449fdad 100644 --- a/compiler/testData/diagnostics/tests/inner/innerErrorForClassObjects.kt +++ b/compiler/testData/diagnostics/tests/inner/innerErrorForClassObjects.kt @@ -1,21 +1,21 @@ open class SomeClass class TestSome

{ - companion object : SomeClass<P>() { + companion object : SomeClass<P>() { } } class Test { - companion object : InnerClass() { - val a = object: InnerClass() { + companion object : InnerClass() { + val a = object: InnerClass() { } fun more(): InnerClass { - val b = InnerClass() + val b = InnerClass() - val testVal = inClass - foo() + val testVal = inClass + foo() - return b + return b } } diff --git a/compiler/testData/diagnostics/tests/inner/innerErrorForClassObjects.txt b/compiler/testData/diagnostics/tests/inner/innerErrorForClassObjects.txt index ccd6f8cbc37..aef644fb3e2 100644 --- a/compiler/testData/diagnostics/tests/inner/innerErrorForClassObjects.txt +++ b/compiler/testData/diagnostics/tests/inner/innerErrorForClassObjects.txt @@ -38,7 +38,7 @@ internal final class TestSome { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - public companion object Companion : SomeClass

{ + public companion object Companion : SomeClass<[ERROR : P]> { 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 diff --git a/compiler/testData/diagnostics/tests/inner/innerErrorForObjects.kt b/compiler/testData/diagnostics/tests/inner/innerErrorForObjects.kt index 95567aaf347..fee2aff02d6 100644 --- a/compiler/testData/diagnostics/tests/inner/innerErrorForObjects.kt +++ b/compiler/testData/diagnostics/tests/inner/innerErrorForObjects.kt @@ -1,21 +1,21 @@ open class SomeClass class TestSome

{ - object Some : SomeClass<P>() { + object Some : SomeClass<P>() { } } class Test { - object Some : InnerClass() { - val a = object: InnerClass() { + object Some : InnerClass() { + val a = object: InnerClass() { } fun more(): InnerClass { - val b = InnerClass() + val b = InnerClass() - val testVal = inClass - foo() + val testVal = inClass + foo() - return b + return b } } diff --git a/compiler/testData/diagnostics/tests/inner/innerErrorForObjects.txt b/compiler/testData/diagnostics/tests/inner/innerErrorForObjects.txt index 8dd349c7e24..7087e10c289 100644 --- a/compiler/testData/diagnostics/tests/inner/innerErrorForObjects.txt +++ b/compiler/testData/diagnostics/tests/inner/innerErrorForObjects.txt @@ -38,7 +38,7 @@ internal final class TestSome { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - internal object Some : SomeClass

{ + internal object Some : SomeClass<[ERROR : P]> { private constructor Some() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/inner/innerThisSuper.kt b/compiler/testData/diagnostics/tests/inner/innerThisSuper.kt index 93fec418bc3..f2c88339197 100644 --- a/compiler/testData/diagnostics/tests/inner/innerThisSuper.kt +++ b/compiler/testData/diagnostics/tests/inner/innerThisSuper.kt @@ -4,12 +4,12 @@ interface Trait { class Outer : Trait { class Nested { - val t = this@Outer.bar() - val s = super@Outer.bar() + val t = this@Outer.bar() + val s = super@Outer.bar() inner class NestedInner { - val t = this@Outer.bar() - val s = super@Outer.bar() + val t = this@Outer.bar() + val s = super@Outer.bar() } } @@ -17,4 +17,4 @@ class Outer : Trait { val t = this@Outer.bar() val s = super@Outer.bar() } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/localClassInsideNested.kt b/compiler/testData/diagnostics/tests/inner/localClassInsideNested.kt index f2618891794..a7eefec3262 100644 --- a/compiler/testData/diagnostics/tests/inner/localClassInsideNested.kt +++ b/compiler/testData/diagnostics/tests/inner/localClassInsideNested.kt @@ -2,10 +2,10 @@ class Outer { class Nested { fun foo() { class Local { - val state = outerState + val state = outerState } } } val outerState = 42 -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/modality.kt b/compiler/testData/diagnostics/tests/inner/modality.kt index 0dabdb45d44..693081811fd 100644 --- a/compiler/testData/diagnostics/tests/inner/modality.kt +++ b/compiler/testData/diagnostics/tests/inner/modality.kt @@ -7,11 +7,11 @@ class Outer { class Nested1 : OpenNested() class Nested2 : FinalNested() - class Nested3 : OpenInner() + class Nested3 : OpenInner() class Nested4 : FinalInner() inner class Inner1 : OpenNested() inner class Inner2 : FinalNested() inner class Inner3 : OpenInner() inner class Inner4 : FinalInner() -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/nestedClassInObject.kt b/compiler/testData/diagnostics/tests/inner/nestedClassInObject.kt new file mode 100644 index 00000000000..1eba5b37b5f --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/nestedClassInObject.kt @@ -0,0 +1,16 @@ +object Object { + class NestedClass { + fun test() { + outerFun() + outerVal + OuterObject + OuterClass() + } + } + + fun outerFun() {} + val outerVal = 4 + + object OuterObject + class OuterClass +} diff --git a/compiler/testData/diagnostics/tests/inner/nestedClassInObject.txt b/compiler/testData/diagnostics/tests/inner/nestedClassInObject.txt new file mode 100644 index 00000000000..39a5c61f476 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/nestedClassInObject.txt @@ -0,0 +1,32 @@ +package + +internal object Object { + private constructor Object() + internal final val outerVal: kotlin.Int = 4 + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + internal final fun outerFun(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + internal final class NestedClass { + public constructor NestedClass() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + internal final fun test(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + internal final class OuterClass { + public constructor OuterClass() + 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 + } + + internal object OuterObject { + private constructor OuterObject() + 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/inner/nestedVsInnerAccessOuterMember.kt b/compiler/testData/diagnostics/tests/inner/nestedVsInnerAccessOuterMember.kt index 16615466d7a..bdcd973cbe5 100644 --- a/compiler/testData/diagnostics/tests/inner/nestedVsInnerAccessOuterMember.kt +++ b/compiler/testData/diagnostics/tests/inner/nestedVsInnerAccessOuterMember.kt @@ -3,10 +3,10 @@ class Outer { val property = "" class Nested { - fun f() = function() - fun g() = property - fun h() = this@Outer.function() - fun i() = this@Outer.property + fun f() = function() + fun g() = property + fun h() = this@Outer.function() + fun i() = this@Outer.property } inner class Inner { diff --git a/compiler/testData/diagnostics/tests/inner/nestedVsInnerAccessOuterMember.txt b/compiler/testData/diagnostics/tests/inner/nestedVsInnerAccessOuterMember.txt index f09f0d88410..e5c1336066a 100644 --- a/compiler/testData/diagnostics/tests/inner/nestedVsInnerAccessOuterMember.txt +++ b/compiler/testData/diagnostics/tests/inner/nestedVsInnerAccessOuterMember.txt @@ -33,8 +33,8 @@ internal final class Outer { internal final class Nested { public constructor Nested() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - internal final fun f(): kotlin.Int - internal final fun g(): kotlin.String + internal final fun f(): [ERROR : Error function type] + internal final fun g(): [ERROR : Error function type] internal final fun h(): [ERROR : ] public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int internal final fun i(): [ERROR : ] diff --git a/compiler/testData/diagnostics/tests/inner/outerGenericParam.kt b/compiler/testData/diagnostics/tests/inner/outerGenericParam.kt index 81d6611e5ba..b77dd1c45f1 100644 --- a/compiler/testData/diagnostics/tests/inner/outerGenericParam.kt +++ b/compiler/testData/diagnostics/tests/inner/outerGenericParam.kt @@ -1,6 +1,6 @@ class Outer { class Nested { - fun foo(t: T) = t + fun foo(t: T) = t } class Nested2 { @@ -10,4 +10,4 @@ class Outer { inner class Inner { fun foo(t: T) = t } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/outerGenericParam.txt b/compiler/testData/diagnostics/tests/inner/outerGenericParam.txt index 3b43af4db8e..1caf871f023 100644 --- a/compiler/testData/diagnostics/tests/inner/outerGenericParam.txt +++ b/compiler/testData/diagnostics/tests/inner/outerGenericParam.txt @@ -17,7 +17,7 @@ internal final class Outer { internal final class Nested { public constructor Nested() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - internal final fun foo(/*0*/ t: T): T + internal final fun foo(/*0*/ t: [ERROR : T]): [ERROR : T] 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/inner/outerSuperClassMember.kt b/compiler/testData/diagnostics/tests/inner/outerSuperClassMember.kt index 66b2a768e90..dae32f58c4f 100644 --- a/compiler/testData/diagnostics/tests/inner/outerSuperClassMember.kt +++ b/compiler/testData/diagnostics/tests/inner/outerSuperClassMember.kt @@ -4,6 +4,6 @@ open class Base { class Derived : Base() { class Nested { - fun bar() = foo() + fun bar() = foo() } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/outerSuperClassMember.txt b/compiler/testData/diagnostics/tests/inner/outerSuperClassMember.txt index 253ddb6022f..0e8013b81c4 100644 --- a/compiler/testData/diagnostics/tests/inner/outerSuperClassMember.txt +++ b/compiler/testData/diagnostics/tests/inner/outerSuperClassMember.txt @@ -17,7 +17,7 @@ internal final class Derived : Base { internal final class Nested { public constructor Nested() - internal final fun bar(): kotlin.Unit + internal final fun bar(): [ERROR : Error function type] 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/regressions/kt5362.kt b/compiler/testData/diagnostics/tests/regressions/kt5362.kt new file mode 100644 index 00000000000..3c0e5c85457 --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/kt5362.kt @@ -0,0 +1,30 @@ +// KT-5362 Compiler crashes on access to extension method from nested class +class Outer { + class Nested{ + fun foo(s: String) = s.extension() + } + + private fun String.extension(): String = this +} + +// EA-64302 - UOE: CodegenContext.getOuterExpression +fun Activity.toast() = Unit +class Activity(){ + class Fragment{ + fun call() = toast() + } +} + +// KT-8814 No error in IDE for invalid invoke of OuterClass.()->Unit in static nested class +public class Manager { + fun task(callback: Manager.() -> Unit): Task { + val task = Task(callback) + return task + } + + class Task(val callback: Manager.() -> Unit) : Runnable { + override public fun run() { + callback() // Manager is not accessible here, but no error is shown + } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/regressions/kt5362.txt b/compiler/testData/diagnostics/tests/regressions/kt5362.txt new file mode 100644 index 00000000000..313d573c83c --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/kt5362.txt @@ -0,0 +1,51 @@ +package + +internal fun Activity.toast(): kotlin.Unit + +internal final class Activity { + public constructor Activity() + 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 + + internal final class Fragment { + public constructor Fragment() + internal final fun call(): [ERROR : Error function type] + 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 Manager { + public constructor Manager() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + internal final fun task(/*0*/ callback: Manager.() -> kotlin.Unit): Manager.Task + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + internal final class Task : java.lang.Runnable { + public constructor Task(/*0*/ callback: Manager.() -> kotlin.Unit) + internal final val callback: Manager.() -> 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*/ fun run(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} + +internal final class Outer { + public constructor Outer() + 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 + private final fun kotlin.String.extension(): kotlin.String + + internal final class Nested { + public constructor Nested() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + internal final fun foo(/*0*/ s: kotlin.String): [ERROR : Error function type] + 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/resolve/Classifiers.resolve b/compiler/testData/resolve/Classifiers.resolve index a4bdd604e37..125189d5d45 100644 --- a/compiler/testData/resolve/Classifiers.resolve +++ b/compiler/testData/resolve/Classifiers.resolve @@ -1,7 +1,7 @@ package qualified_this { ~qtA~class A(val a:Int) { - ~qtB~class B() { + inner ~qtB~class B() { val x = `qtB`this`qtB`@B val y = `qtA`this`qtA`@A val z = `qtB`this @@ -20,7 +20,7 @@ class A<~T~T, ~E~E> { val a : `T`T val x : A<`T`T, `E`E> - class X<~X.T~T> : A<`X.T`T, `E`E> { + inner class X<~X.T~T> : A<`X.T`T, `E`E> { val a : `X.T`T val b : `X.E`E diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 59e90d2a301..8e4fe0175a2 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -8154,6 +8154,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("nestedClassInObject.kt") + public void testNestedClassInObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/nestedClassInObject.kt"); + doTest(fileName); + } + @TestMetadata("nestedClassNotAllowed.kt") public void testNestedClassNotAllowed() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/nestedClassNotAllowed.kt"); @@ -11328,6 +11334,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("kt5362.kt") + public void testKt5362() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt5362.kt"); + doTest(fileName); + } + @TestMetadata("kt549.kt") public void testKt549() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt549.kt"); diff --git a/idea/testData/diagnosticMessage/inaccessibleOuterClassExpression.kt b/idea/testData/diagnosticMessage/inaccessibleOuterClassExpression.kt.todo similarity index 100% rename from idea/testData/diagnosticMessage/inaccessibleOuterClassExpression.kt rename to idea/testData/diagnosticMessage/inaccessibleOuterClassExpression.kt.todo diff --git a/idea/testData/diagnosticMessage/inaccessibleOuterClassExpression1.txt b/idea/testData/diagnosticMessage/inaccessibleOuterClassExpression1.txt.todo similarity index 100% rename from idea/testData/diagnosticMessage/inaccessibleOuterClassExpression1.txt rename to idea/testData/diagnosticMessage/inaccessibleOuterClassExpression1.txt.todo diff --git a/idea/testData/quickfix/modifiers/addInnerModifier.kt.after b/idea/testData/quickfix/modifiers/addInnerModifier.kt.after.todo similarity index 100% rename from idea/testData/quickfix/modifiers/addInnerModifier.kt.after rename to idea/testData/quickfix/modifiers/addInnerModifier.kt.after.todo diff --git a/idea/testData/quickfix/modifiers/addInnerModifier.kt b/idea/testData/quickfix/modifiers/addInnerModifier.kt.todo similarity index 100% rename from idea/testData/quickfix/modifiers/addInnerModifier.kt rename to idea/testData/quickfix/modifiers/addInnerModifier.kt.todo diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java index 6ef4ffa5448..fe280f402fc 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java @@ -101,12 +101,6 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes doTest(fileName); } - @TestMetadata("inaccessibleOuterClassExpression.kt") - public void testInaccessibleOuterClassExpression() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/diagnosticMessage/inaccessibleOuterClassExpression.kt"); - doTest(fileName); - } - @TestMetadata("invisibleMember.kt") public void testInvisibleMember() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/diagnosticMessage/invisibleMember.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index b2d8608a4e1..3cc14a50109 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -3976,12 +3976,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } - @TestMetadata("addInnerModifier.kt") - public void testAddInnerModifier() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/modifiers/addInnerModifier.kt"); - doTest(fileName); - } - public void testAllFilesPresentInModifiers() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/modifiers"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); }