Convert EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR into deprecation error
#KT-28078 Fixed
This commit is contained in:
@@ -141,7 +141,7 @@ public interface Errors {
|
||||
|
||||
// Exposed visibility group
|
||||
DiagnosticFactory3<PsiElement, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_PROPERTY_TYPE = DiagnosticFactory3.create(ERROR);
|
||||
DiagnosticFactory3<PsiElement, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR = DiagnosticFactory3.create(WARNING);
|
||||
DiagnosticFactoryForDeprecation3<PsiElement, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR = DiagnosticFactoryForDeprecation3.create(LanguageFeature.ForbidExposingTypesInPrimaryConstructorProperties);
|
||||
DiagnosticFactory3<PsiElement, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_FUNCTION_RETURN_TYPE = DiagnosticFactory3.create(ERROR);
|
||||
DiagnosticFactory3<KtParameter, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_PARAMETER_TYPE = DiagnosticFactory3.create(ERROR);
|
||||
DiagnosticFactory3<KtTypeReference, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility> EXPOSED_RECEIVER_TYPE = DiagnosticFactory3.create(ERROR);
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory3
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryForDeprecation3
|
||||
import org.jetbrains.kotlin.diagnostics.Errors.*
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier
|
||||
@@ -52,6 +53,17 @@ class ExposedVisibilityChecker(
|
||||
}
|
||||
}
|
||||
|
||||
private fun <E : PsiElement> reportExposureForDeprecation(
|
||||
diagnostic: DiagnosticFactoryForDeprecation3<E, EffectiveVisibility, DescriptorWithRelation, EffectiveVisibility>,
|
||||
element: E,
|
||||
elementVisibility: EffectiveVisibility,
|
||||
restrictingDescriptor: DescriptorWithRelation
|
||||
) {
|
||||
val trace = trace ?: return
|
||||
val restrictingVisibility = restrictingDescriptor.effectiveVisibility()
|
||||
trace.report(diagnostic.on(languageVersionSettings, element, elementVisibility, restrictingDescriptor, restrictingVisibility))
|
||||
}
|
||||
|
||||
// NB: does not check any members
|
||||
fun checkClassHeader(klass: KtClassOrObject, classDescriptor: ClassDescriptor): Boolean {
|
||||
var result = checkSupertypes(klass, classDescriptor)
|
||||
@@ -62,6 +74,8 @@ class ExposedVisibilityChecker(
|
||||
return result and checkFunction(constructor, constructorDescriptor)
|
||||
}
|
||||
|
||||
// IMPORTANT: please don't remove this function (it's used in IDE)
|
||||
@Suppress("unused")
|
||||
fun checkDeclarationWithVisibility(
|
||||
modifierListOwner: KtModifierListOwner,
|
||||
descriptor: DeclarationDescriptorWithVisibility,
|
||||
@@ -119,8 +133,11 @@ class ExposedVisibilityChecker(
|
||||
val propertyOrClassVisibility = (propertyDescriptor ?: functionDescriptor.constructedClass).effectiveVisibility()
|
||||
val restrictingByProperty = parameterDescriptor.type.leastPermissiveDescriptor(propertyOrClassVisibility)
|
||||
if (restrictingByProperty != null) {
|
||||
reportExposure(
|
||||
EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR, valueParameter, propertyOrClassVisibility, restrictingByProperty
|
||||
reportExposureForDeprecation(
|
||||
EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR,
|
||||
valueParameter.nameIdentifier ?: valueParameter,
|
||||
propertyOrClassVisibility,
|
||||
restrictingByProperty
|
||||
)
|
||||
result = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user