Fix return type of private members that return anonymous object

#KT-16813 Fixed

Anonymous objects returned from private-in-file members should behave as for private class members
This commit is contained in:
Mikhail Zarechenskiy
2017-04-11 16:25:18 +03:00
parent 44170f3357
commit e86d52b681
16 changed files with 202 additions and 108 deletions
@@ -1,9 +1,9 @@
interface MyTrait {
fun f1() {}
fun f1() {}
}
open class MyClass {
fun f2() {}
fun f2() {}
}
@@ -12,8 +12,8 @@ class Foo {
private val privateProperty = object : MyClass(), MyTrait {}
init {
privateProperty.f1()
privateProperty.f2()
privateProperty.f1()
privateProperty.f2()
}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected val <!EXPOSED_PROPERTY_TYPE!>protectedProperty<!><!> = object : MyClass(), MyTrait {}
@@ -25,14 +25,14 @@ class Foo {
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val <!EXPOSED_PROPERTY_TYPE!>publicProperty<!><!> = object : MyClass(), MyTrait {}
val <!EXPOSED_PROPERTY_TYPE!>propertyWithGetter<!>
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>get()<!> = object: MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>get()<!> = object: MyClass(), MyTrait {}
private fun privateFunction() = object : MyClass(), MyTrait {}
init {
privateFunction().f1()
privateFunction().f2()
privateFunction().f1()
privateFunction().f2()
}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected fun <!EXPOSED_FUNCTION_RETURN_TYPE!>protectedFunction<!>()<!> = object : MyClass(), MyTrait {}
@@ -45,53 +45,53 @@ class Foo {
class FooInner {
private val privatePropertyInner = object : MyClass(), MyTrait {}
class FooInner {
private val privatePropertyInner = object : MyClass(), MyTrait {}
init {
privatePropertyInner.f1()
privatePropertyInner.f2()
}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected val <!EXPOSED_PROPERTY_TYPE!>protectedProperty<!><!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>val <!EXPOSED_PROPERTY_TYPE!>internalProperty<!><!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal val <!EXPOSED_PROPERTY_TYPE!>internal2Property<!><!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val <!EXPOSED_PROPERTY_TYPE!>publicProperty<!><!> = object : MyClass(), MyTrait {}
private fun privateFunctionInner() = object : MyClass(), MyTrait {}
init {
privateFunctionInner().f1()
privateFunctionInner().f2()
}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected fun <!EXPOSED_FUNCTION_RETURN_TYPE!>protectedFunction<!>()<!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>fun <!EXPOSED_FUNCTION_RETURN_TYPE!>internalFunction<!>()<!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal fun <!EXPOSED_FUNCTION_RETURN_TYPE!>internal2Function<!>()<!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public fun <!EXPOSED_FUNCTION_RETURN_TYPE!>publicFunction<!>()<!> = object : MyClass(), MyTrait {}
init {
privatePropertyInner.f1()
privatePropertyInner.f2()
}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected val <!EXPOSED_PROPERTY_TYPE!>protectedProperty<!><!> = object : MyClass(), MyTrait {}
fun foo() {
val localVar = object : MyClass(), MyTrait {}
localVar.f1()
localVar.f2()
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>val <!EXPOSED_PROPERTY_TYPE!>internalProperty<!><!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal val <!EXPOSED_PROPERTY_TYPE!>internal2Property<!><!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val <!EXPOSED_PROPERTY_TYPE!>publicProperty<!><!> = object : MyClass(), MyTrait {}
private fun privateFunctionInner() = object : MyClass(), MyTrait {}
init {
privateFunctionInner().f1()
privateFunctionInner().f2()
fun foo2() = object : MyClass(), MyTrait {}
foo2().f1()
foo2().f2()
}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected fun <!EXPOSED_FUNCTION_RETURN_TYPE!>protectedFunction<!>()<!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>fun <!EXPOSED_FUNCTION_RETURN_TYPE!>internalFunction<!>()<!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal fun <!EXPOSED_FUNCTION_RETURN_TYPE!>internal2Function<!>()<!> = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public fun <!EXPOSED_FUNCTION_RETURN_TYPE!>publicFunction<!>()<!> = object : MyClass(), MyTrait {}
}
fun foo() {
val localVar = object : MyClass(), MyTrait {}
localVar.f1()
localVar.f2()
fun foo2() = object : MyClass(), MyTrait {}
foo2().f1()
foo2().f2()
}
}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>private val packagePrivateProperty<!> = object : MyClass(), MyTrait {}
private val packagePrivateProperty = object : MyClass(), MyTrait {}
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!><!WRONG_MODIFIER_TARGET!>protected<!> val <!EXPOSED_PROPERTY_TYPE!>packageProtectedProperty<!><!> = object : MyClass(), MyTrait {}
@@ -1,5 +1,5 @@
open class MyClass {
fun f1() {}
fun f1() {}
}
@@ -19,15 +19,15 @@ class Foo {
fun testProperties() {
privateProperty.f1()
internalProperty.f1()
protected2Property.f1()
public2Property.f1()
privateProperty.f1()
internalProperty.f1()
protected2Property.f1()
public2Property.f1()
privateProperty.visible()
protected2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
internalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
privateProperty.visible()
protected2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
internalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
@@ -45,15 +45,15 @@ class Foo {
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
protected2Function().f1()
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
protected2Function().f1()
privateFunction().visible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
protected2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
privateFunction().visible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
protected2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
@@ -73,49 +73,49 @@ class Foo {
fun testProperties() {
privateProperty.f1()
internalProperty.f1()
protected2Property.f1()
public2Property.f1()
privateProperty.f1()
internalProperty.f1()
protected2Property.f1()
public2Property.f1()
privateProperty.visible()
protected2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
internalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
privateProperty.visible()
protected2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
internalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
protected fun protectedFunction() = object : MyClass() {}
protected fun protectedFunction() = object : MyClass() {}
public fun publicFunction() = object : MyClass() {}
public fun publicFunction() = object : MyClass() {}
protected fun protected2Function(): MyClass = object : MyClass() {fun visible() {}}
protected fun protected2Function(): MyClass = object : MyClass() {fun visible() {}}
public fun public2Function(): MyClass = object : MyClass() {fun visible() {}}
public fun public2Function(): MyClass = object : MyClass() {fun visible() {}}
private fun privateFunction() = object : MyClass() {fun visible() {}}
private fun privateFunction() = object : MyClass() {fun visible() {}}
internal fun internalFunction() = object : MyClass() {fun invisible() {}}
internal fun internalFunction() = object : MyClass() {fun invisible() {}}
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
protected2Function().f1()
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
protected2Function().f1()
privateFunction().visible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
protected2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
privateFunction().visible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
protected2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
}
fun foo() {
val localVar = object : MyClass() {}
localVar.f1()
fun foo2() = object : MyClass() {}
foo2().f1()
val localVar = object : MyClass() {}
localVar.f1()
fun foo2() = object : MyClass() {}
foo2().f1()
}
}
@@ -136,7 +136,7 @@ fun testProperties() {
packageInternalProperty.f1()
packagePublic2Property.f1()
packagePrivateProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
packagePrivateProperty.invisible()
packageInternalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
packagePublic2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
@@ -155,13 +155,13 @@ internal fun internalFunction() = object : MyClass() {fun invisible() {}}
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
privateFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
privateFunction().invisible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
fun fooPackage() {
@@ -1,13 +1,13 @@
package
internal val packageInternalProperty: MyClass
private val packagePrivateProperty: MyClass
private val packagePrivateProperty: packagePrivateProperty.<no name provided>
protected val packageProtectedProperty: MyClass
public val packagePublic2Property: MyClass
public val packagePublicProperty: MyClass
public fun fooPackage(): kotlin.Unit
internal fun internalFunction(): MyClass
private fun privateFunction(): MyClass
private fun privateFunction(): privateFunction.<no name provided>
protected fun protectedFunction(): MyClass
public fun public2Function(): MyClass
public fun publicFunction(): MyClass