Report EXPOSED_PROPERTY_TYPE on a property name only #KT-10760 Fixed
This commit is contained in:
@@ -75,7 +75,7 @@ public interface Errors {
|
||||
DiagnosticFactory3<PsiElement, DeclarationDescriptor, Visibility, DeclarationDescriptor> INVISIBLE_MEMBER = DiagnosticFactory3.create(ERROR, CALL_ELEMENT);
|
||||
|
||||
// Exposed visibility group
|
||||
DiagnosticFactory2<KtProperty, EffectiveVisibility, EffectiveVisibility> EXPOSED_PROPERTY_TYPE = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<PsiElement, EffectiveVisibility, EffectiveVisibility> EXPOSED_PROPERTY_TYPE = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<PsiElement, EffectiveVisibility, EffectiveVisibility> EXPOSED_FUNCTION_RETURN_TYPE = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<KtParameter, EffectiveVisibility, EffectiveVisibility> EXPOSED_PARAMETER_TYPE = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<KtTypeReference, EffectiveVisibility, EffectiveVisibility> EXPOSED_RECEIVER_TYPE = DiagnosticFactory2.create(ERROR);
|
||||
|
||||
@@ -639,7 +639,7 @@ class DeclarationsChecker(
|
||||
val propertyVisibility = propertyDescriptor.effectiveVisibility()
|
||||
val typeVisibility = propertyDescriptor.type.effectiveVisibility()
|
||||
if (!typeVisibility.sameOrMorePermissive(propertyVisibility)) {
|
||||
trace.report(EXPOSED_PROPERTY_TYPE.on(property, propertyVisibility, typeVisibility))
|
||||
trace.report(EXPOSED_PROPERTY_TYPE.on(property.nameIdentifier ?: property, propertyVisibility, typeVisibility))
|
||||
}
|
||||
checkMemberReceiverExposedType(property.receiverTypeReference, propertyDescriptor)
|
||||
}
|
||||
|
||||
+12
-12
@@ -16,13 +16,13 @@ class Foo {
|
||||
privateProperty.f2()
|
||||
}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected val protectedProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected val <!EXPOSED_PROPERTY_TYPE!>protectedProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>val internalProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>val <!EXPOSED_PROPERTY_TYPE!>internalProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal val internal2Property<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal val <!EXPOSED_PROPERTY_TYPE!>internal2Property<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val publicProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val <!EXPOSED_PROPERTY_TYPE!>publicProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
|
||||
private fun privateFunction() = object : MyClass(), MyTrait {}
|
||||
@@ -50,13 +50,13 @@ class Foo {
|
||||
privatePropertyInner.f2()
|
||||
}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected val protectedProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>protected val <!EXPOSED_PROPERTY_TYPE!>protectedProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>val internalProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>val <!EXPOSED_PROPERTY_TYPE!>internalProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal val internal2Property<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal val <!EXPOSED_PROPERTY_TYPE!>internal2Property<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val publicProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val <!EXPOSED_PROPERTY_TYPE!>publicProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
|
||||
private fun privateFunctionInner() = object : MyClass(), MyTrait {}
|
||||
@@ -90,13 +90,13 @@ class Foo {
|
||||
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>private val packagePrivateProperty<!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!><!WRONG_MODIFIER_TARGET!>protected<!> val packageProtectedProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!><!WRONG_MODIFIER_TARGET!>protected<!> val <!EXPOSED_PROPERTY_TYPE!>packageProtectedProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>val packageInternalProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>val <!EXPOSED_PROPERTY_TYPE!>packageInternalProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal val packageInternal2Property<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>internal val <!EXPOSED_PROPERTY_TYPE!>packageInternal2Property<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!><!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val packagePublicProperty<!> = object : MyClass(), MyTrait {}<!>
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>public val <!EXPOSED_PROPERTY_TYPE!>packagePublicProperty<!><!> = object : MyClass(), MyTrait {}
|
||||
|
||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!><!WRONG_MODIFIER_TARGET!>protected<!> fun <!EXPOSED_FUNCTION_RETURN_TYPE!>packageProtectedFunction<!>()<!> = object : MyClass(), MyTrait {}
|
||||
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ internal open class Your: My() {
|
||||
open class His: <!EXPOSED_SUPER_CLASS!>Your()<!> {
|
||||
protected open class Nested
|
||||
// error, public from internal
|
||||
<!EXPOSED_PROPERTY_TYPE!>val x = My()<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>x<!> = My()
|
||||
// valid, private from internal
|
||||
private fun bar() = My()
|
||||
// valid, internal from internal
|
||||
|
||||
@@ -4,9 +4,9 @@ class Something {
|
||||
internal val internalVal1 = object { override fun toString() = "!" }
|
||||
private val privateVal1 = object { override fun toString() = "!" }
|
||||
|
||||
<!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() }<!>
|
||||
public val <!EXPOSED_PROPERTY_TYPE!>publicVal2<!> = run { class A; A() }
|
||||
protected val <!EXPOSED_PROPERTY_TYPE!>protectedVal2<!> = run { class A; A() }
|
||||
internal val <!EXPOSED_PROPERTY_TYPE!>internalVal2<!> = run { class A; A() }
|
||||
private val privateVal2 = run { class A; A() }
|
||||
|
||||
public fun publicFun1() = object { override fun toString() = "!" }
|
||||
|
||||
@@ -2,27 +2,27 @@ class My<T>(val value: T)
|
||||
|
||||
open class Base
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val invalid1 = run {
|
||||
val <!EXPOSED_PROPERTY_TYPE!>invalid1<!> = run {
|
||||
class Local
|
||||
My(Local())
|
||||
}<!>
|
||||
}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val invalid2 = My(object {})<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>invalid2<!> = My(object {})
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val invalid3 = My(object : Base() {})<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>invalid3<!> = My(object : Base() {})
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val invalid4 = run {
|
||||
val <!EXPOSED_PROPERTY_TYPE!>invalid4<!> = run {
|
||||
class Local
|
||||
My(My(Local()))
|
||||
}<!>
|
||||
}
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val invalid5 = run {
|
||||
val <!EXPOSED_PROPERTY_TYPE!>invalid5<!> = run {
|
||||
fun invalid5a() = run {
|
||||
class Local
|
||||
Local()
|
||||
}
|
||||
My(invalid5a())
|
||||
}<!>
|
||||
}
|
||||
|
||||
// Valid: effectively Any
|
||||
val valid1 = object {}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// From KT-10753
|
||||
object My : <!EXPOSED_SUPER_CLASS!>Inter()<!> {
|
||||
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>foo<!>(<!EXPOSED_PARAMETER_TYPE!>arg: Inter<!>): Inter = arg
|
||||
<!EXPOSED_PROPERTY_TYPE!>val x: Inter? = null<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>x<!>: Inter? = null
|
||||
}
|
||||
|
||||
internal open class Inter
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ public class Derived<<!EXPOSED_TYPE_PARAMETER_BOUND!>T: My<!>>(<!EXPOSED_PARAMET
|
||||
|
||||
constructor(<!EXPOSED_PARAMETER_TYPE!>xx: My?<!>, <!EXPOSED_PARAMETER_TYPE!>x: My<!>): this(xx ?: x)
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val y: Base? = null<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>y<!>: Base? = null
|
||||
|
||||
val <!EXPOSED_RECEIVER_TYPE!>My<!>.z: Int
|
||||
get() = 42
|
||||
|
||||
@@ -15,4 +15,4 @@ package p1
|
||||
import p2.*
|
||||
|
||||
val x: X = X()
|
||||
<!EXPOSED_PROPERTY_TYPE!>val y: <!INVISIBLE_REFERENCE!>Y<!> = <!INVISIBLE_MEMBER!>Y<!>()<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>y<!>: <!INVISIBLE_REFERENCE!>Y<!> = <!INVISIBLE_MEMBER!>Y<!>()
|
||||
|
||||
@@ -16,29 +16,29 @@ class MyJavaClass {
|
||||
//FILE:a.kt
|
||||
package a
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val mc = MyJavaClass()<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>mc<!> = MyJavaClass()
|
||||
val x = MyJavaClass.staticMethod()
|
||||
val y = MyJavaClass.NestedClass.staticMethodOfNested()
|
||||
<!EXPOSED_PROPERTY_TYPE!>val z = MyJavaClass.NestedClass()<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>z<!> = MyJavaClass.NestedClass()
|
||||
|
||||
//FILE: b.kt
|
||||
package b
|
||||
|
||||
import a.<!INVISIBLE_REFERENCE!>MyJavaClass<!>
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val mc1 = <!INVISIBLE_MEMBER!>MyJavaClass<!>()<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>mc1<!> = <!INVISIBLE_MEMBER!>MyJavaClass<!>()
|
||||
|
||||
val x = <!INVISIBLE_REFERENCE!>MyJavaClass<!>.<!INVISIBLE_MEMBER!>staticMethod<!>()
|
||||
val y = <!INVISIBLE_REFERENCE!>MyJavaClass<!>.<!INVISIBLE_REFERENCE!>NestedClass<!>.<!INVISIBLE_MEMBER!>staticMethodOfNested<!>()
|
||||
<!EXPOSED_PROPERTY_TYPE!>val z = <!INVISIBLE_REFERENCE!>MyJavaClass<!>.<!INVISIBLE_MEMBER!>NestedClass<!>()<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>z<!> = <!INVISIBLE_REFERENCE!>MyJavaClass<!>.<!INVISIBLE_MEMBER!>NestedClass<!>()
|
||||
|
||||
//FILE: c.kt
|
||||
package a.c
|
||||
|
||||
import a.<!INVISIBLE_REFERENCE!>MyJavaClass<!>
|
||||
|
||||
<!EXPOSED_PROPERTY_TYPE!>val mc1 = <!INVISIBLE_MEMBER!>MyJavaClass<!>()<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>mc1<!> = <!INVISIBLE_MEMBER!>MyJavaClass<!>()
|
||||
|
||||
val x = <!INVISIBLE_REFERENCE!>MyJavaClass<!>.<!INVISIBLE_MEMBER!>staticMethod<!>()
|
||||
val y = <!INVISIBLE_REFERENCE!>MyJavaClass<!>.<!INVISIBLE_REFERENCE!>NestedClass<!>.<!INVISIBLE_MEMBER!>staticMethodOfNested<!>()
|
||||
<!EXPOSED_PROPERTY_TYPE!>val z = <!INVISIBLE_REFERENCE!>MyJavaClass<!>.<!INVISIBLE_MEMBER!>NestedClass<!>()<!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>z<!> = <!INVISIBLE_REFERENCE!>MyJavaClass<!>.<!INVISIBLE_MEMBER!>NestedClass<!>()
|
||||
@@ -17,7 +17,7 @@ class E private constructor() {
|
||||
}
|
||||
|
||||
val a = <!NO_COMPANION_OBJECT!>A<!>
|
||||
<!EXPOSED_PROPERTY_TYPE!>val b = <!INVISIBLE_MEMBER!>B<!><!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>b<!> = <!INVISIBLE_MEMBER!>B<!>
|
||||
val c = <!NO_COMPANION_OBJECT!>C<!>
|
||||
val d = D
|
||||
val e = E(42)
|
||||
@@ -11,5 +11,5 @@ import p.*
|
||||
|
||||
interface I {
|
||||
val v1: FilteringSequence
|
||||
<!EXPOSED_PROPERTY_TYPE!>val v2: <!INVISIBLE_REFERENCE!>IndexingSequence<!><String><!>
|
||||
val <!EXPOSED_PROPERTY_TYPE!>v2<!>: <!INVISIBLE_REFERENCE!>IndexingSequence<!><String>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user