From 2e8f73adbac958bafc4d38a682dbcb3308c65ee3 Mon Sep 17 00:00:00 2001 From: rapturemain Date: Sat, 21 Mar 2020 15:37:11 +0300 Subject: [PATCH] [FIR] Change errors location from Errors.java to FirErrors.kt --- .../visibility/exposedFunctionReturnType.kt | 2 +- .../resolve/visibility/exposedPropertyType.kt | 4 +- .../resolve/visibility/exposedTypeAlias.kt | 4 +- .../FirExposedVisibilityChecker.kt | 66 ++++++++----------- .../diagnostics/FirDefaultErrorMessages.kt | 12 +++- .../diagnostics/FirDiagnosticRenderers.kt | 4 +- .../fir/analysis/diagnostics/FirErrors.kt | 10 +++ .../jetbrains/kotlin/diagnostics/Errors.java | 6 -- .../rendering/DefaultErrorMessages.java | 5 -- 9 files changed, 55 insertions(+), 58 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedFunctionReturnType.kt b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedFunctionReturnType.kt index ef5ea826973..3872c032051 100644 --- a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedFunctionReturnType.kt +++ b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedFunctionReturnType.kt @@ -5,5 +5,5 @@ class A { } abstract class B { - fun foo(str: String): A.InnerA + fun foo(str: String): A.InnerA } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedPropertyType.kt b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedPropertyType.kt index ab40bc63d45..5bf53920edd 100644 --- a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedPropertyType.kt +++ b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedPropertyType.kt @@ -17,7 +17,7 @@ class Property { var var1: String var var2: String var var3: Int - var var4: A.AInnerPrivate + var var4: A.AInnerPrivate var var5: A.AInnerPublic - var var6: A.AInnerProtectedEnum + var var6: A.AInnerProtectedEnum } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.kt b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.kt index 111435dc35d..56101f4495f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.kt +++ b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.kt @@ -2,7 +2,7 @@ class A { private inner class Inner } class B { - typealias AInner = A.Inner + typealias AInner = A.Inner inner class Inner } @@ -10,5 +10,5 @@ class C { typealias BInner = B.Inner } -typealias AInner0 = A.Inner +typealias AInner0 = A.Inner typealias BInner0 = B.Inner \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityChecker.kt index 22ea2cb66d0..2555121ca67 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityChecker.kt @@ -5,10 +5,12 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration -import org.jetbrains.kotlin.diagnostics.Errors +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.diagnostics.DiagnosticFactory3 import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.onSource import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.types.ConeClassLikeType @@ -25,30 +27,30 @@ object FirExposedVisibilityChecker : FirDeclarationChecker private fun checkTypeAlias(declaration: FirTypeAlias, context: CheckerContext, reporter: DiagnosticReporter) { val expandedType = declaration.expandedConeType - - val restricting = expandedType?.leastPermissiveDescriptor(declaration.session, declaration.effectiveVisibility) + val typeAliasVisibility = declaration.firEffectiveVisibility(declaration.session) + val restricting = expandedType?.leastPermissiveDescriptor(declaration.session, typeAliasVisibility) if (restricting != null) { - reporter.reportExposure(Error.EXPOSED_TYPEALIAS_EXPANDED_TYPE, declaration.source) + reporter.reportExposure(FirErrors.EXPOSED_TYPEALIAS_EXPANDED_TYPE, declaration, restricting) } } private fun checkFunction(declaration: FirFunction<*>, context: CheckerContext, reporter: DiagnosticReporter) { - val functionVisibility = (declaration as FirMemberDeclaration).effectiveVisibility + val functionVisibility = (declaration as FirMemberDeclaration).firEffectiveVisibility(declaration.session) if (declaration !is FirConstructor) { val restricting = declaration.returnTypeRef.coneTypeSafe() ?.leastPermissiveDescriptor(declaration.session, functionVisibility) if (restricting != null) { - reporter.reportExposure(Error.EXPOSED_FUNCTION_RETURN_TYPE, declaration.source) + reporter.reportExposure(FirErrors.EXPOSED_FUNCTION_RETURN_TYPE, declaration, restricting) } } } private fun checkProperty(declaration: FirProperty, context: CheckerContext, reporter: DiagnosticReporter) { - val propertyVisibility = declaration.effectiveVisibility + val propertyVisibility = declaration.firEffectiveVisibility(declaration.session) val restricting = declaration.returnTypeRef.coneTypeSafe()?.leastPermissiveDescriptor(declaration.session, propertyVisibility) if (restricting != null) { - reporter.reportExposure(Error.EXPOSED_PROPERTY_TYPE, declaration.source) + reporter.reportExposure(FirErrors.EXPOSED_PROPERTY_TYPE, declaration, restricting) } checkMemberReceiver(declaration.receiverTypeRef?.coneTypeSafe(), declaration, reporter) } @@ -62,42 +64,26 @@ object FirExposedVisibilityChecker : FirDeclarationChecker val memberVisibility = memberDeclaration.effectiveVisibility val restricting = receiverParameterType?.leastPermissiveDescriptor(memberDeclaration.session, memberVisibility) if (restricting != null) { - reporter.reportExposure(Error.EXPOSED_RECEIVER_TYPE, memberDeclaration.source) + reporter.reportExposure(FirErrors.EXPOSED_RECEIVER_TYPE, memberDeclaration, restricting) } } - private enum class Error { - EXPOSED_TYPEALIAS_EXPANDED_TYPE, - EXPOSED_PROPERTY_TYPE, - EXPOSED_RECEIVER_TYPE, - EXPOSED_FUNCTION_RETURN_TYPE - } - - private fun DiagnosticReporter.reportExposure( - error: Error, - source: FirSourceElement? + private inline fun DiagnosticReporter.reportExposure( + er: DiagnosticFactory3, + element: E, + restrictingDeclaration: DeclarationWithRelation, + elementVisibility: FirEffectiveVisibility = element.effectiveVisibility, + source: FirSourceElement? = element.source ) { - when (error) { - Error.EXPOSED_TYPEALIAS_EXPANDED_TYPE -> { - source?.let { - report(Errors.FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE.onSource(it)) - } - } - Error.EXPOSED_PROPERTY_TYPE -> { - source?.let { - report(Errors.FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE.onSource(it)) - } - } - Error.EXPOSED_RECEIVER_TYPE -> { - source?.let { - report(Errors.FIR_EXPOSED_RECEIVER_TYPE.onSource(it)) - } - } - Error.EXPOSED_FUNCTION_RETURN_TYPE -> { - source?.let { - report(Errors.FIR_EXPOSED_FUNCTION_RETURN_TYPE.onSource(it)) - } - } + source?.let { + report( + er.onSource( + it, + elementVisibility, + restrictingDeclaration, + restrictingDeclaration.firEffectiveVisibility(element.session) + ) + ) } } } \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt index 5cb3612f2f6..3da9de498ed 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt @@ -30,6 +30,10 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.SYNTAX_ERROR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_PARAMETER_AS_SUPERTYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNRESOLVED_LABEL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNRESOLVED_REFERENCE +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPOSED_TYPEALIAS_EXPANDED_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPOSED_FUNCTION_RETURN_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPOSED_PROPERTY_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPOSED_RECEIVER_TYPE @Suppress("unused") class FirDefaultErrorMessages : DefaultErrorMessages.Extension { @@ -38,6 +42,7 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension { } companion object { +<<<<<<< HEAD:compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt val MAP = FirDiagnosticFactoryToRendererMap("FIR").also { map -> map.put(UNRESOLVED_REFERENCE, "Unresolved reference: {0}", NULLABLE_STRING) map.put(INAPPLICABLE_CANDIDATE, "Inapplicable candidate(s): {0}", SYMBOLS) @@ -55,11 +60,16 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension { map.put(ERROR_FROM_JAVA_RESOLUTION, "Java resolution error") map.put(OTHER_ERROR, "Unknown (other) error") map.put(SUPER_IS_NOT_AN_EXPRESSION, "Super cannot be a callee") - map.put(REPEATED_MODIFIER, "Repeated ''{0}''", TO_STRING) map.put(REDUNDANT_MODIFIER, "Modifier ''{0}'' is redundant because ''{1}'' is present", TO_STRING, TO_STRING) map.put(DEPRECATED_MODIFIER_PAIR, "Modifier ''{0}'' is deprecated in presence of ''{1}''", TO_STRING, TO_STRING) map.put(INCOMPATIBLE_MODIFIERS, "Modifier ''{0}'' is incompatible with ''{1}''", TO_STRING, TO_STRING) + + // Exposed visibility group + map.put(EXPOSED_TYPEALIAS_EXPANDED_TYPE, "{0} typealias exposes {2} in expanded type{1}", TO_STRING, TO_STRING, TO_STRING) + map.put(EXPOSED_PROPERTY_TYPE, "{0} property exposes its {2} type{1}", TO_STRING, TO_STRING, TO_STRING) + map.put(EXPOSED_FUNCTION_RETURN_TYPE, "{0} function exposes its {2} return type{1}", TO_STRING, TO_STRING, TO_STRING) + map.put(EXPOSED_RECEIVER_TYPE, "{0} member exposes its {2} receiver type{1}", TO_STRING, TO_STRING, TO_STRING) } } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt index 828f5ddb4a8..11628eaf7ed 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt @@ -23,5 +23,7 @@ object FirDiagnosticRenderers { } } - val TO_STRING = Renderer { it.toString() } + val TO_STRING = Renderer { element: Any -> + element.toString() + } } \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 3075a4721b2..69298ce9407 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics import com.intellij.psi.PsiElement import org.jetbrains.kotlin.diagnostics.Errors +import org.jetbrains.kotlin.fir.DeclarationWithRelation +import org.jetbrains.kotlin.fir.FirEffectiveVisibility import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -46,8 +48,16 @@ object FirErrors { val NON_PRIVATE_CONSTRUCTOR_IN_ENUM by existing(Errors.NON_PRIVATE_CONSTRUCTOR_IN_ENUM) val NON_PRIVATE_CONSTRUCTOR_IN_SEALED by existing(Errors.NON_PRIVATE_CONSTRUCTOR_IN_SEALED) + // Exposed visibility group + val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3() + val EXPOSED_FUNCTION_RETURN_TYPE by error3() + val EXPOSED_RECEIVER_TYPE by error3() + val EXPOSED_PROPERTY_TYPE by error3() + val EXPOSED_PARAMETER_TYPE by error3() + val REPEATED_MODIFIER by error1() val REDUNDANT_MODIFIER by error2() val DEPRECATED_MODIFIER_PAIR by error2() val INCOMPATIBLE_MODIFIERS by error2() } + diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index aac56c6fefe..527c4d6e58e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -135,12 +135,6 @@ public interface Errors { DiagnosticFactory3 EXPOSED_SUPER_INTERFACE = DiagnosticFactory3.create(ERROR); DiagnosticFactory3 EXPOSED_TYPEALIAS_EXPANDED_TYPE = DiagnosticFactory3.create(ERROR); - // (FIR) Exposed visibility group - DiagnosticFactory0 FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 FIR_EXPOSED_PROPERTY_TYPE = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 FIR_EXPOSED_RECEIVER_TYPE = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 FIR_EXPOSED_FUNCTION_RETURN_TYPE = DiagnosticFactory0.create(ERROR); - DiagnosticFactory2> INACCESSIBLE_TYPE = DiagnosticFactory2.create(WARNING); DiagnosticFactory1> PLATFORM_CLASS_MAPPED_TO_KOTLIN = DiagnosticFactory1.create(WARNING); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index a172da18335..31b16ee8149 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -82,11 +82,6 @@ public class DefaultErrorMessages { 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(FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE, "FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE"); - MAP.put(FIR_EXPOSED_PROPERTY_TYPE, "FIR_EXPOSED_PROPERTY_TYPE"); - MAP.put(FIR_EXPOSED_RECEIVER_TYPE, "FIR_EXPOSED_RECEIVER_TYPE"); - MAP.put(FIR_EXPOSED_FUNCTION_RETURN_TYPE, "FIR_EXPOSED_FUNCTION_RETURN_TYPE"); - 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, "Extension function is shadowed by an inner class constructor: {0}", COMPACT_WITH_MODIFIERS);