Change outer scope for nested class and object -- removed implicit outer class receiver.

#KT-5362 Fixed
#KT-8814 Fixed
This commit is contained in:
Stanislav Erokhin
2015-08-18 16:27:40 +03:00
parent b83b298f68
commit 2ee8f1c454
39 changed files with 224 additions and 70 deletions
@@ -63,6 +63,11 @@ public class DeclarationScopeProviderImpl implements DeclarationScopeProvider {
if (jetDeclaration instanceof JetClassInitializer || jetDeclaration instanceof JetProperty) { if (jetDeclaration instanceof JetClassInitializer || jetDeclaration instanceof JetProperty) {
return classDescriptor.getScopeForInitializerResolution(); return classDescriptor.getScopeForInitializerResolution();
} }
if (jetDeclaration instanceof JetObjectDeclaration
|| (jetDeclaration instanceof JetClass && !((JetClass) jetDeclaration).isInner())) {
return classDescriptor.getScopeForStaticMemberDeclarationResolution();
}
return classDescriptor.getScopeForMemberDeclarationResolution(); return classDescriptor.getScopeForMemberDeclarationResolution();
} }
@@ -27,11 +27,15 @@ class ClassResolutionScopesSupport(
) { ) {
private val scopeForClassHeaderResolution = storageManager.createLazyValue { computeScopeForClassHeaderResolution() } private val scopeForClassHeaderResolution = storageManager.createLazyValue { computeScopeForClassHeaderResolution() }
private val scopeForMemberDeclarationResolution = storageManager.createLazyValue { computeScopeForMemberDeclarationResolution() } private val scopeForMemberDeclarationResolution = storageManager.createLazyValue { computeScopeForMemberDeclarationResolution() }
private val scopeForStaticMemberDeclarationResolution = storageManager.createLazyValue { computeScopeForStaticMemberDeclarationResolution() }
fun getScopeForClassHeaderResolution(): JetScope = scopeForClassHeaderResolution() fun getScopeForClassHeaderResolution(): JetScope = scopeForClassHeaderResolution()
fun getScopeForMemberDeclarationResolution(): JetScope = scopeForMemberDeclarationResolution() fun getScopeForMemberDeclarationResolution(): JetScope = scopeForMemberDeclarationResolution()
fun getScopeForStaticMemberDeclarationResolution(): JetScope = scopeForStaticMemberDeclarationResolution()
private fun computeScopeForClassHeaderResolution(): JetScope { private fun computeScopeForClassHeaderResolution(): JetScope {
val scope = WritableScopeImpl(JetScope.Empty, classDescriptor, RedeclarationHandler.DO_NOTHING, "Scope with type parameters for " + classDescriptor.getName()) val scope = WritableScopeImpl(JetScope.Empty, classDescriptor, RedeclarationHandler.DO_NOTHING, "Scope with type parameters for " + classDescriptor.getName())
for (typeParameterDescriptor in classDescriptor.getTypeConstructor().getParameters()) { for (typeParameterDescriptor in classDescriptor.getTypeConstructor().getParameters()) {
@@ -62,6 +66,18 @@ class ClassResolutionScopesSupport(
return thisScope 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 { private fun getCompanionObjectScope(): JetScope {
val companionObjectDescriptor = classDescriptor.getCompanionObjectDescriptor() val companionObjectDescriptor = classDescriptor.getCompanionObjectDescriptor()
return if (companionObjectDescriptor != null) { return if (companionObjectDescriptor != null) {
@@ -270,6 +270,10 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
return resolutionScopesSupport.getScopeForMemberDeclarationResolution(); return resolutionScopesSupport.getScopeForMemberDeclarationResolution();
} }
public JetScope getScopeForStaticMemberDeclarationResolution() {
return resolutionScopesSupport.getScopeForStaticMemberDeclarationResolution();
}
@Override @Override
@NotNull @NotNull
public JetScope getScopeForInitializerResolution() { public JetScope getScopeForInitializerResolution() {
@@ -15,7 +15,7 @@ class A {
companion object { companion object {
fun main() { fun main() {
::<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>Inner<!> ::<!UNRESOLVED_REFERENCE!>Inner<!>
val y = A::Inner val y = A::Inner
checkSubtype<KFunction1<A, A.Inner>>(y) checkSubtype<KFunction1<A, A.Inner>>(y)
@@ -30,4 +30,4 @@ class B {
checkSubtype<KFunction1<A, A.Inner>>(y) checkSubtype<KFunction1<A, A.Inner>>(y)
} }
} }
@@ -4,6 +4,6 @@ class A() {
val x = 1 val x = 1
companion object { companion object {
val y = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>x<!> val y = <!UNRESOLVED_REFERENCE!>x<!>
} }
} }
@@ -9,7 +9,7 @@ internal final class A {
public companion object Companion { public companion object Companion {
private constructor 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -4,6 +4,6 @@ open class ToResolve<SomeClass>(<!UNUSED_PARAMETER!>f<!> : (Int) -> Int)
fun testFun(<!UNUSED_PARAMETER!>a<!> : Int) = 12 fun testFun(<!UNUSED_PARAMETER!>a<!> : Int) = 12
class TestSome<P> { class TestSome<P> {
companion object : ToResolve<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>P<!>>({testFun(it)}) { companion object : ToResolve<<!UNRESOLVED_REFERENCE!>P<!>>({testFun(it)}) {
} }
} }
@@ -9,7 +9,7 @@ package test {
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion : test.ToResolve<P> { public companion object Companion : test.ToResolve<[ERROR : P]> {
private constructor 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -4,6 +4,6 @@ class Test {
fun test(): Int = 12 fun test(): Int = 12
companion object { companion object {
val a = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>test()<!> // Check if resolver will be able to infer type of a variable val a = <!UNRESOLVED_REFERENCE!>test<!>() // Check if resolver will be able to infer type of a variable
} }
} }
@@ -11,7 +11,7 @@ package test {
public companion object Companion { public companion object Companion {
private constructor 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -1,6 +1,6 @@
class Test { class Test {
@`InnerAnnotation` <!REPEATED_ANNOTATION!>@InnerAnnotation<!> @`InnerAnnotation` <!REPEATED_ANNOTATION!>@InnerAnnotation<!>
companion object : StaticClass(), <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!><!MANY_CLASSES_IN_SUPERTYPE_LIST!>InnerClass<!>()<!> { companion object : StaticClass(), <!UNRESOLVED_REFERENCE, MANY_CLASSES_IN_SUPERTYPE_LIST, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>InnerClass<!>() {
} }
@@ -8,8 +8,8 @@ class Outer1 {
inner class Inner inner class Inner
class C5 { val b = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>Inner()<!> } class C5 { val b = <!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>Inner<!>() }
class C6(val b: Any = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>Inner()<!>) class C6(val b: Any = <!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>Inner<!>())
inner class C7 { val b = Inner() } inner class C7 { val b = Inner() }
inner class C8(val b: Any = Inner()) inner class C8(val b: Any = Inner())
} }
@@ -18,7 +18,7 @@ class Outer1 {
class Outer2 { class Outer2 {
class Nested { class Nested {
fun foo() = Outer2() fun foo() = Outer2()
fun bar() = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>Inner()<!> fun bar() = <!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>Inner<!>()
} }
inner class Inner { inner class Inner {
fun foo() = Outer2() fun foo() = Outer2()
@@ -29,4 +29,4 @@ class Outer2 {
Nested() Nested()
Inner() Inner()
} }
} }
@@ -40,7 +40,7 @@ internal final class Outer1 {
internal final class C5 { internal final class C5 {
public constructor 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -103,7 +103,7 @@ internal final class Outer2 {
internal final class Nested { internal final class Nested {
public constructor 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 public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
internal final fun foo(): Outer2 internal final fun foo(): Outer2
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -3,11 +3,11 @@ interface P<U, Y>
class A<T> { class A<T> {
class B { class B {
fun test() { fun test() {
class C<W>() : P<W, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> { class C<W>() : P<W, <!UNRESOLVED_REFERENCE!>T<!>> {
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object : P<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>W<!>, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> { <!WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object : P<<!UNRESOLVED_REFERENCE!>W<!>, <!UNRESOLVED_REFERENCE!>T<!>> {
} }
inner class D : P<W, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> inner class D : P<W, <!UNRESOLVED_REFERENCE!>T<!>>
} }
} }
} }
@@ -1,21 +1,21 @@
open class SomeClass<T> open class SomeClass<T>
class TestSome<P> { class TestSome<P> {
companion object : SomeClass<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>P<!>>() { companion object : SomeClass<<!UNRESOLVED_REFERENCE!>P<!>>() {
} }
} }
class Test { class Test {
companion object : <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> { companion object : <!UNRESOLVED_REFERENCE, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>InnerClass<!>() {
val a = object: <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> { val a = object: <!UNRESOLVED_REFERENCE, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>InnerClass<!>() {
} }
fun more(): InnerClass { fun more(): InnerClass {
val b = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> val b = <!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>InnerClass<!>()
val <!UNUSED_VARIABLE!>testVal<!> = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>inClass<!> val <!UNUSED_VARIABLE!>testVal<!> = <!UNRESOLVED_REFERENCE!>inClass<!>
<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>foo()<!> <!UNRESOLVED_REFERENCE!>foo<!>()
return b return <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!>
} }
} }
@@ -38,7 +38,7 @@ internal final class TestSome</*0*/ P> {
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion : SomeClass<P> { public companion object Companion : SomeClass<[ERROR : P]> {
private constructor 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -1,21 +1,21 @@
open class SomeClass<T> open class SomeClass<T>
class TestSome<P> { class TestSome<P> {
object Some : SomeClass<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>P<!>>() { object Some : SomeClass<<!UNRESOLVED_REFERENCE!>P<!>>() {
} }
} }
class Test { class Test {
object Some : <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> { object Some : <!UNRESOLVED_REFERENCE, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>InnerClass<!>() {
val a = object: <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> { val a = object: <!UNRESOLVED_REFERENCE, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>InnerClass<!>() {
} }
fun more(): InnerClass { fun more(): InnerClass {
val b = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>InnerClass()<!> val b = <!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>InnerClass<!>()
val <!UNUSED_VARIABLE!>testVal<!> = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>inClass<!> val <!UNUSED_VARIABLE!>testVal<!> = <!UNRESOLVED_REFERENCE!>inClass<!>
<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>foo()<!> <!UNRESOLVED_REFERENCE!>foo<!>()
return b return <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!>
} }
} }
@@ -38,7 +38,7 @@ internal final class TestSome</*0*/ P> {
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
internal object Some : SomeClass<P> { internal object Some : SomeClass<[ERROR : P]> {
private constructor Some() private constructor Some()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -4,12 +4,12 @@ interface Trait {
class Outer : Trait { class Outer : Trait {
class Nested { class Nested {
val t = this<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>bar<!>() val t = this<!UNRESOLVED_REFERENCE!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>bar<!>()
val s = super<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>bar<!>() val s = <!DEBUG_INFO_MISSING_UNRESOLVED!>super<!><!UNRESOLVED_REFERENCE!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>bar<!>()
inner class NestedInner { inner class NestedInner {
val t = this<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>bar<!>() val t = this<!UNRESOLVED_REFERENCE!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>bar<!>()
val s = super<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>bar<!>() val s = <!DEBUG_INFO_MISSING_UNRESOLVED!>super<!><!UNRESOLVED_REFERENCE!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>bar<!>()
} }
} }
@@ -17,4 +17,4 @@ class Outer : Trait {
val t = this@Outer.bar() val t = this@Outer.bar()
val s = super@Outer.bar() val s = super@Outer.bar()
} }
} }
@@ -2,10 +2,10 @@ class Outer {
class Nested { class Nested {
fun foo() { fun foo() {
class Local { class Local {
val state = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>outerState<!> val state = <!UNRESOLVED_REFERENCE!>outerState<!>
} }
} }
} }
val outerState = 42 val outerState = 42
} }
+2 -2
View File
@@ -7,11 +7,11 @@ class Outer {
class Nested1 : OpenNested() class Nested1 : OpenNested()
class Nested2 : <!FINAL_SUPERTYPE!>FinalNested<!>() class Nested2 : <!FINAL_SUPERTYPE!>FinalNested<!>()
class Nested3 : <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>OpenInner()<!> class Nested3 : <!UNRESOLVED_REFERENCE, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>OpenInner<!>()
class Nested4 : <!FINAL_SUPERTYPE!>FinalInner<!>() class Nested4 : <!FINAL_SUPERTYPE!>FinalInner<!>()
inner class Inner1 : OpenNested() inner class Inner1 : OpenNested()
inner class Inner2 : <!FINAL_SUPERTYPE!>FinalNested<!>() inner class Inner2 : <!FINAL_SUPERTYPE!>FinalNested<!>()
inner class Inner3 : OpenInner() inner class Inner3 : OpenInner()
inner class Inner4 : <!FINAL_SUPERTYPE!>FinalInner<!>() inner class Inner4 : <!FINAL_SUPERTYPE!>FinalInner<!>()
} }
@@ -0,0 +1,16 @@
object Object {
class NestedClass {
fun test() {
outerFun()
outerVal
OuterObject
OuterClass()
}
}
fun outerFun() {}
val outerVal = 4
object OuterObject
class OuterClass
}
@@ -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
}
}
@@ -3,10 +3,10 @@ class Outer {
val property = "" val property = ""
class Nested { class Nested {
fun f() = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>function()<!> fun f() = <!UNRESOLVED_REFERENCE!>function<!>()
fun g() = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>property<!> fun g() = <!UNRESOLVED_REFERENCE!>property<!>
fun h() = this<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>function<!>() fun h() = this<!UNRESOLVED_REFERENCE!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>function<!>()
fun i() = this<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>property<!> fun i() = this<!UNRESOLVED_REFERENCE!>@Outer<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>property<!>
} }
inner class Inner { inner class Inner {
@@ -33,8 +33,8 @@ internal final class Outer {
internal final class Nested { internal final class Nested {
public constructor Nested() public constructor Nested()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
internal final fun f(): kotlin.Int internal final fun f(): [ERROR : Error function type]
internal final fun g(): kotlin.String internal final fun g(): [ERROR : Error function type]
internal final fun h(): [ERROR : <ERROR FUNCTION RETURN TYPE>] internal final fun h(): [ERROR : <ERROR FUNCTION RETURN TYPE>]
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
internal final fun i(): [ERROR : <ERROR PROPERTY TYPE>] internal final fun i(): [ERROR : <ERROR PROPERTY TYPE>]
@@ -1,6 +1,6 @@
class Outer<T> { class Outer<T> {
class Nested { class Nested {
fun foo(t: <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>) = t fun foo(t: <!UNRESOLVED_REFERENCE!>T<!>) = <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>t<!>
} }
class Nested2<T> { class Nested2<T> {
@@ -10,4 +10,4 @@ class Outer<T> {
inner class Inner { inner class Inner {
fun foo(t: T) = t fun foo(t: T) = t
} }
} }
@@ -17,7 +17,7 @@ internal final class Outer</*0*/ T> {
internal final class Nested { internal final class Nested {
public constructor Nested() public constructor Nested()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): 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 hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -4,6 +4,6 @@ open class Base {
class Derived : Base() { class Derived : Base() {
class Nested { class Nested {
fun bar() = <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>foo()<!> fun bar() = <!UNRESOLVED_REFERENCE!>foo<!>()
} }
} }
@@ -17,7 +17,7 @@ internal final class Derived : Base {
internal final class Nested { internal final class Nested {
public constructor 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 equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -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.<!UNRESOLVED_REFERENCE!>extension<!>()
}
private fun String.extension(): String = this
}
// EA-64302 - UOE: CodegenContext.getOuterExpression
fun Activity.toast() = Unit
class Activity(){
class Fragment{
fun call() = <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>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() {
<!MISSING_RECEIVER!>callback<!>() // Manager is not accessible here, but no error is shown
}
}
}
@@ -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
}
}
+2 -2
View File
@@ -1,7 +1,7 @@
package qualified_this { package qualified_this {
~qtA~class A(val a:Int) { ~qtA~class A(val a:Int) {
~qtB~class B() { inner ~qtB~class B() {
val x = `qtB`this`qtB`@B val x = `qtB`this`qtB`@B
val y = `qtA`this`qtA`@A val y = `qtA`this`qtA`@A
val z = `qtB`this val z = `qtB`this
@@ -20,7 +20,7 @@ class A<~T~T, ~E~E> {
val a : `T`T val a : `T`T
val x : A<`T`T, `E`E> 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 a : `X.T`T
val b : `X.E`E val b : `X.E`E
@@ -8154,6 +8154,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName); 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") @TestMetadata("nestedClassNotAllowed.kt")
public void testNestedClassNotAllowed() throws Exception { public void testNestedClassNotAllowed() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/nestedClassNotAllowed.kt"); String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/nestedClassNotAllowed.kt");
@@ -11328,6 +11334,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName); 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") @TestMetadata("kt549.kt")
public void testKt549() throws Exception { public void testKt549() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt549.kt"); String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt549.kt");
@@ -101,12 +101,6 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes
doTest(fileName); doTest(fileName);
} }
@TestMetadata("inaccessibleOuterClassExpression.kt")
public void testInaccessibleOuterClassExpression() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/diagnosticMessage/inaccessibleOuterClassExpression.kt");
doTest(fileName);
}
@TestMetadata("invisibleMember.kt") @TestMetadata("invisibleMember.kt")
public void testInvisibleMember() throws Exception { public void testInvisibleMember() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/diagnosticMessage/invisibleMember.kt"); String fileName = JetTestUtils.navigationMetadata("idea/testData/diagnosticMessage/invisibleMember.kt");
@@ -3976,12 +3976,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest(fileName); 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 { public void testAllFilesPresentInModifiers() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/modifiers"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/modifiers"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
} }