Effective visibility: local is now considered private, TYPE_DEPENDS_ON_LOCAL_CLASS diagnostics removed as repeated #KT-9542 Fixed #KT-9526 Fixed

This commit is contained in:
Mikhail Glukhikh
2015-10-14 11:25:58 +03:00
parent 3a902d6002
commit 9c9ab671b3
18 changed files with 205 additions and 117 deletions
@@ -0,0 +1,10 @@
interface Your
class My {
internal val x = object : Your {}
internal fun <!EXPOSED_FUNCTION_RETURN_TYPE!>foo<!>() = {
class Local
Local()
}()
}
@@ -0,0 +1,16 @@
package
public final class My {
public constructor My()
internal final val x: Your
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
internal final fun foo(): My.foo.<anonymous>.Local
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface Your {
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
}
+2 -2
View File
@@ -3,13 +3,13 @@ fun <T> run(f: () -> T): T {
}
// invalid, depends on local class
fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>foo<!>() = run {
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>foo<!>() = run {
class A
A()
}
// invalid, depends on local class
fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>gav<!>() = {
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>gav<!>() = {
class B
B()
}
@@ -0,0 +1,7 @@
class My {
internal open class ThreadLocal
// Private from local: ???
private val values =
// Local from internal: Ok
object: ThreadLocal() {}
}
@@ -0,0 +1,16 @@
package
public final class My {
public constructor My()
private final val values: My.values.<no name provided>
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 open class ThreadLocal {
public constructor ThreadLocal()
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
}
}
@@ -0,0 +1,15 @@
class A {
private open class B
fun f() {
// Local from private: Ok
class C : B()
}
}
private open class D
fun f(): Int {
// Local from private: Ok
val x = object : D() { }
return x.hashCode()
}
@@ -0,0 +1,25 @@
package
public fun f(): kotlin.Int
public final class A {
public constructor A()
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
private 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
}
}
private open 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
}
@@ -6,21 +6,21 @@ class My<T>(val value: T)
open class Base
fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid1<!>() = run {
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>invalid1<!>() = run {
class Local
My(Local())
}
fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid2<!>() = My(object {})
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>invalid2<!>() = My(object {})
fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid3<!>() = My(object : Base() {})
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>invalid3<!>() = My(object : Base() {})
fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid4<!>() = run {
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>invalid4<!>() = run {
class Local
My(My(Local()))
}
fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid5<!>() = run {
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>invalid5<!>() = run {
fun invalid5a() = run {
class Local
Local()
@@ -7,9 +7,9 @@ class Something {
internal val internalVal1 = object { override fun toString() = "!" }
private val privateVal1 = object { override fun toString() = "!" }
public val <!PROPERTY_TYPE_DEPENDS_ON_LOCAL_CLASS!>publicVal2<!> = run { class A; A() }
protected val <!PROPERTY_TYPE_DEPENDS_ON_LOCAL_CLASS!>protectedVal2<!> = run { class A; A() }
internal val <!PROPERTY_TYPE_DEPENDS_ON_LOCAL_CLASS!>internalVal2<!> = run { class A; A() }
<!EXPOSED_PROPERTY_TYPE!>public val publicVal2 = run { class A; A() }<!>
<!EXPOSED_PROPERTY_TYPE!>protected val protectedVal2 = run { class A; A() }<!>
<!EXPOSED_PROPERTY_TYPE!>internal val internalVal2 = run { class A; A() }<!>
private val privateVal2 = run { class A; A() }
public fun publicFun1() = object { override fun toString() = "!" }
@@ -17,8 +17,8 @@ class Something {
internal fun internalFun1() = object { override fun toString() = "!" }
private fun privateFun1() = object { override fun toString() = "!" }
public fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>publicFun2<!>() = run { class A; A() }
protected fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>protectedFun2<!>() = run { class A; A() }
internal fun <!FUNCTION_RETURN_TYPE_DEPENDS_ON_LOCAL_CLASS!>internalFun2<!>() = run { class A; A() }
public fun <!EXPOSED_FUNCTION_RETURN_TYPE!>publicFun2<!>() = run { class A; A() }
protected fun <!EXPOSED_FUNCTION_RETURN_TYPE!>protectedFun2<!>() = run { class A; A() }
internal fun <!EXPOSED_FUNCTION_RETURN_TYPE!>internalFun2<!>() = run { class A; A() }
private fun privateFun2() = run { class A; A() }
}
@@ -6,27 +6,27 @@ class My<T>(val value: T)
open class Base
val <!PROPERTY_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid1<!> = run {
<!EXPOSED_PROPERTY_TYPE!>val invalid1 = run {
class Local
My(Local())
}
}<!>
val <!PROPERTY_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid2<!> = My(object {})
<!EXPOSED_PROPERTY_TYPE!>val invalid2 = My(object {})<!>
val <!PROPERTY_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid3<!> = My(object : Base() {})
<!EXPOSED_PROPERTY_TYPE!>val invalid3 = My(object : Base() {})<!>
val <!PROPERTY_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid4<!> = run {
<!EXPOSED_PROPERTY_TYPE!>val invalid4 = run {
class Local
My(My(Local()))
}
}<!>
val <!PROPERTY_TYPE_DEPENDS_ON_LOCAL_CLASS!>invalid5<!> = run {
<!EXPOSED_PROPERTY_TYPE!>val invalid5 = run {
fun invalid5a() = run {
class Local
Local()
}
My(invalid5a())
}
}<!>
// Valid: effectively Any
val valid1 = object {}
@@ -0,0 +1,12 @@
interface Your
class My {
// private from local: ???
private val x = object : Your {}
// private from local: ???
private fun foo() = {
class Local
Local()
}()
}
@@ -0,0 +1,16 @@
package
public final class My {
public constructor My()
private final val x: My.x.<no name provided>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
private final fun foo(): My.foo.<anonymous>.Local
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface Your {
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
}