Add quickfix for setting explicit public visibility for diagnostic reported in API mode
This commit is contained in:
@@ -207,9 +207,9 @@ public interface Errors {
|
||||
DiagnosticFactory2<PsiElement, KtModifierKeywordToken, String> DEPRECATED_MODIFIER_FOR_TARGET = DiagnosticFactory2.create(WARNING);
|
||||
DiagnosticFactory2<PsiElement, KtModifierKeywordToken, KtModifierKeywordToken> DEPRECATED_MODIFIER = DiagnosticFactory2.create(WARNING);
|
||||
DiagnosticFactory2<PsiElement, KtModifierKeywordToken, String> REDUNDANT_MODIFIER_FOR_TARGET = DiagnosticFactory2.create(WARNING);
|
||||
DiagnosticFactory0<PsiElement> NO_EXPLICIT_VISIBILITY_IN_API_MODE = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory1<PsiElement, DeclarationDescriptor> NO_EXPLICIT_VISIBILITY_IN_API_MODE = DiagnosticFactory1.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> NO_EXPLICIT_RETURN_TYPE_IN_API_MODE = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> NO_EXPLICIT_VISIBILITY_IN_API_MODE_MIGRATION = DiagnosticFactory0.create(WARNING);
|
||||
DiagnosticFactory1<PsiElement, DeclarationDescriptor> NO_EXPLICIT_VISIBILITY_IN_API_MODE_MIGRATION = DiagnosticFactory1.create(WARNING);
|
||||
DiagnosticFactory0<PsiElement> NO_EXPLICIT_RETURN_TYPE_IN_API_MODE_MIGRATION = DiagnosticFactory0.create(WARNING);
|
||||
DiagnosticFactory2<PsiElement, KtModifierKeywordToken, String> WRONG_MODIFIER_CONTAINING_DECLARATION = DiagnosticFactory2.create(ERROR);
|
||||
DiagnosticFactory2<PsiElement, KtModifierKeywordToken, String> DEPRECATED_MODIFIER_CONTAINING_DECLARATION = DiagnosticFactory2.create(WARNING);
|
||||
|
||||
+2
-2
@@ -119,9 +119,9 @@ public class DefaultErrorMessages {
|
||||
MAP.put(DEPRECATED_MODIFIER_FOR_TARGET, "Modifier ''{0}'' is deprecated for ''{1}''", TO_STRING, TO_STRING);
|
||||
MAP.put(DEPRECATED_MODIFIER, "Modifier ''{0}'' is deprecated, use ''{1}'' instead", TO_STRING, TO_STRING);
|
||||
MAP.put(REDUNDANT_MODIFIER_FOR_TARGET, "Modifier ''{0}'' is redundant for ''{1}''", TO_STRING, TO_STRING);
|
||||
MAP.put(NO_EXPLICIT_VISIBILITY_IN_API_MODE, "This declaration is effectively public API and API mode is on, but no visibility is specified");
|
||||
MAP.put(NO_EXPLICIT_VISIBILITY_IN_API_MODE, "Declaration ''{0}'' is effectively public API and API mode is on, but no visibility is specified", NAME);
|
||||
MAP.put(NO_EXPLICIT_RETURN_TYPE_IN_API_MODE, "This declaration is effectively public API and API mode is on, but no explicit return type is specified");
|
||||
MAP.put(NO_EXPLICIT_VISIBILITY_IN_API_MODE_MIGRATION, "This declaration is effectively public API and API mode is on, but no visibility is specified");
|
||||
MAP.put(NO_EXPLICIT_VISIBILITY_IN_API_MODE_MIGRATION, "Declaration ''{0}'' is effectively public API and API mode is on, but no visibility is specified", NAME);
|
||||
MAP.put(NO_EXPLICIT_RETURN_TYPE_IN_API_MODE_MIGRATION, "This declaration is effectively public API and API mode is on, but no explicit return type is specified");
|
||||
MAP.put(WRONG_MODIFIER_CONTAINING_DECLARATION, "Modifier ''{0}'' is not applicable inside ''{1}''", TO_STRING, TO_STRING);
|
||||
MAP.put(DEPRECATED_MODIFIER_CONTAINING_DECLARATION, "Modifier ''{0}'' is deprecated inside ''{1}''", TO_STRING, TO_STRING);
|
||||
|
||||
+16
-29
@@ -5,12 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.resolve.checkers
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.config.AnalysisFlags
|
||||
import org.jetbrains.kotlin.config.ApiMode
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory0
|
||||
import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.diagnostics.reportDiagnosticOnce
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
@@ -35,19 +33,19 @@ class ApiModeDeclarationChecker : DeclarationChecker {
|
||||
private fun checkVisibilityModifier(
|
||||
state: ApiMode,
|
||||
declaration: KtDeclaration,
|
||||
descriptor: DeclarationDescriptor,
|
||||
descriptor: DeclarationDescriptorWithVisibility,
|
||||
context: DeclarationCheckerContext
|
||||
) {
|
||||
val modifier = declaration.visibilityModifier()?.node?.elementType as? KtModifierKeywordToken
|
||||
if (modifier != null) return
|
||||
|
||||
if (excludeForDiagnostic(descriptor)) return
|
||||
context.selectDiagnosticAndReport(
|
||||
declaration,
|
||||
state,
|
||||
Errors.NO_EXPLICIT_VISIBILITY_IN_API_MODE,
|
||||
Errors.NO_EXPLICIT_VISIBILITY_IN_API_MODE_MIGRATION
|
||||
)
|
||||
val diagnostic =
|
||||
if (state == ApiMode.ENABLED)
|
||||
Errors.NO_EXPLICIT_VISIBILITY_IN_API_MODE.on(declaration, descriptor)
|
||||
else
|
||||
Errors.NO_EXPLICIT_VISIBILITY_IN_API_MODE_MIGRATION.on(declaration, descriptor)
|
||||
context.trace.reportDiagnosticOnce(diagnostic)
|
||||
}
|
||||
|
||||
private fun checkExplicitReturnType(
|
||||
@@ -65,26 +63,15 @@ class ApiModeDeclarationChecker : DeclarationChecker {
|
||||
checkForInternal = false,
|
||||
checkForPrivate = false
|
||||
)
|
||||
if (shouldReport) context.selectDiagnosticAndReport(
|
||||
declaration,
|
||||
state,
|
||||
Errors.NO_EXPLICIT_RETURN_TYPE_IN_API_MODE,
|
||||
Errors.NO_EXPLICIT_RETURN_TYPE_IN_API_MODE_MIGRATION
|
||||
)
|
||||
}
|
||||
|
||||
private fun DeclarationCheckerContext.selectDiagnosticAndReport(
|
||||
on: KtDeclaration,
|
||||
state: ApiMode,
|
||||
ifError: DiagnosticFactory0<PsiElement>,
|
||||
ifWarning: DiagnosticFactory0<PsiElement>
|
||||
) {
|
||||
val diagnostic =
|
||||
if (state == ApiMode.ENABLED)
|
||||
ifError.on(on)
|
||||
else
|
||||
ifWarning.on(on)
|
||||
trace.reportDiagnosticOnce(diagnostic)
|
||||
if (shouldReport) {
|
||||
val diagnostic =
|
||||
if (state == ApiMode.ENABLED)
|
||||
Errors.NO_EXPLICIT_RETURN_TYPE_IN_API_MODE.on(declaration)
|
||||
else
|
||||
Errors.NO_EXPLICIT_RETURN_TYPE_IN_API_MODE_MIGRATION
|
||||
.on(declaration)
|
||||
context.trace.reportDiagnosticOnce(diagnostic)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user