FE 1.0: introduce deprecation EXPOSED_FROM_PRIVATE_IN_FILE

#KT-20094 Fixed
This commit is contained in:
Mikhail Glukhikh
2021-04-05 13:53:42 +03:00
parent 4bd44fa61b
commit 7f092264f7
6 changed files with 18 additions and 9 deletions
@@ -140,6 +140,7 @@ public interface Errors {
DiagnosticFactory3<KtSuperTypeListEntry, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_SUPER_CLASS = DiagnosticFactory3.create(ERROR);
DiagnosticFactory3<KtSuperTypeListEntry, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_SUPER_INTERFACE = DiagnosticFactory3.create(ERROR);
DiagnosticFactory3<PsiElement, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_TYPEALIAS_EXPANDED_TYPE = DiagnosticFactory3.create(ERROR);
DiagnosticFactory2<PsiElement, DescriptorWithRelation, EffectiveVisibility> EXPOSED_FROM_PRIVATE_IN_FILE = DiagnosticFactory2.create(WARNING);
DiagnosticFactory2<KtExpression, KotlinType, Collection<ClassDescriptor>> INACCESSIBLE_TYPE = DiagnosticFactory2.create(WARNING);
@@ -81,6 +81,7 @@ public class DefaultErrorMessages {
MAP.put(EXPOSED_SUPER_CLASS, "''{0}'' subclass exposes its ''{2}'' supertype{1}", TO_STRING, TO_STRING, TO_STRING);
MAP.put(EXPOSED_SUPER_INTERFACE, "''{0}'' sub-interface exposes its ''{2}'' supertype{1}", TO_STRING, TO_STRING, TO_STRING);
MAP.put(EXPOSED_TYPEALIAS_EXPANDED_TYPE, "''{0}'' typealias exposes ''{2}'' in expanded type{1}", TO_STRING, TO_STRING, TO_STRING);
MAP.put(EXPOSED_FROM_PRIVATE_IN_FILE, "Deprecation: private-in-file class should not expose ''{1}'' type{0}", TO_STRING, TO_STRING);
MAP.put(EXTENSION_SHADOWED_BY_MEMBER, "Extension is shadowed by a member: {0}", COMPACT_WITH_MODIFIERS);
MAP.put(EXTENSION_FUNCTION_SHADOWED_BY_INNER_CLASS_CONSTRUCTOR,
@@ -35,7 +35,14 @@ class ExposedVisibilityChecker(private val trace: BindingTrace? = null) {
elementVisibility: EffectiveVisibility,
restrictingDescriptor: DescriptorWithRelation
) {
trace?.report(diagnostic.on(element, elementVisibility, restrictingDescriptor, restrictingDescriptor.effectiveVisibility()))
val trace = trace ?: return
val restrictingVisibility = restrictingDescriptor.effectiveVisibility()
if (elementVisibility == EffectiveVisibility.PrivateInFile) {
// Deprecation: condition ^ should be changed to false after 1.6
trace.report(EXPOSED_FROM_PRIVATE_IN_FILE.on(element, restrictingDescriptor, restrictingVisibility))
} else {
trace.report(diagnostic.on(element, elementVisibility, restrictingDescriptor, restrictingVisibility))
}
}
// NB: does not check any members
@@ -11,17 +11,17 @@ class Public {
private class PrivateInFileClass {
private open class NestedPrivate
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>test1<!>() = NestedPrivate()
fun test2(<!EXPOSED_PARAMETER_TYPE!>p: NestedPrivate<!>) {}
fun <!EXPOSED_RECEIVER_TYPE!>NestedPrivate<!>.test3() {}
val <!EXPOSED_PROPERTY_TYPE!>test4<!> = NestedPrivate()
class Test5 : <!EXPOSED_SUPER_CLASS!>NestedPrivate()<!>
fun <!EXPOSED_FROM_PRIVATE_IN_FILE!>test1<!>() = NestedPrivate()
fun test2(<!EXPOSED_FROM_PRIVATE_IN_FILE!>p: NestedPrivate<!>) {}
fun <!EXPOSED_FROM_PRIVATE_IN_FILE!>NestedPrivate<!>.test3() {}
val <!EXPOSED_FROM_PRIVATE_IN_FILE!>test4<!> = NestedPrivate()
class Test5 : <!EXPOSED_FROM_PRIVATE_IN_FILE!>NestedPrivate()<!>
}
private interface PrivateInFile {
private class Private
fun <!EXPOSED_FUNCTION_RETURN_TYPE!>expose<!>() = Private()
fun <!EXPOSED_FROM_PRIVATE_IN_FILE!>expose<!>() = Private()
}
// Exposes 'PrivateInFile$Private' via 'expose'
@@ -11,4 +11,4 @@ package a
import pack1.SomeClass.*
private class X : <!EXPOSED_SUPER_CLASS!><!FINAL_SUPERTYPE, INVISIBLE_MEMBER, INVISIBLE_REFERENCE!>N<!>()<!>
private class X : <!EXPOSED_FROM_PRIVATE_IN_FILE!><!FINAL_SUPERTYPE, INVISIBLE_MEMBER, INVISIBLE_REFERENCE!>N<!>()<!>
@@ -199,7 +199,7 @@ class QuickFixRegistrar : QuickFixContributor {
for (exposed in listOf(
EXPOSED_FUNCTION_RETURN_TYPE, EXPOSED_PARAMETER_TYPE, EXPOSED_PROPERTY_TYPE, EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR,
EXPOSED_RECEIVER_TYPE, EXPOSED_SUPER_CLASS, EXPOSED_SUPER_INTERFACE, EXPOSED_TYPE_PARAMETER_BOUND
EXPOSED_RECEIVER_TYPE, EXPOSED_SUPER_CLASS, EXPOSED_SUPER_INTERFACE, EXPOSED_TYPE_PARAMETER_BOUND, EXPOSED_FROM_PRIVATE_IN_FILE
)) {
exposed.registerFactory(ChangeVisibilityOnExposureFactory)
}