From 1706bd4a007cc2f8ae9baec92d3c50d22d4927af Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 21 May 2014 19:11:00 +0400 Subject: [PATCH] Render the descriptor in "cannot infer visibility" message Otherwise it's unclear what member is problematic if it's a fake override (because the diagnostic in that case is reported on the whole class) --- .../org/jetbrains/jet/lang/diagnostics/Errors.java | 2 +- .../diagnostics/rendering/DefaultErrorMessages.java | 2 +- .../jetbrains/jet/lang/resolve/OverrideResolver.java | 2 +- .../diagnosticMessage/cannotInferVisibility.kt | 12 ++++++++++++ .../diagnosticMessage/cannotInferVisibility1.txt | 2 ++ .../highlighter/DiagnosticMessageTestGenerated.java | 5 +++++ 6 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 idea/testData/diagnosticMessage/cannotInferVisibility.kt create mode 100644 idea/testData/diagnosticMessage/cannotInferVisibility1.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index 7220eba9aec..a54b07d2b52 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -217,7 +217,7 @@ public interface Errors { DiagnosticFactory2 DATA_CLASS_OVERRIDE_CONFLICT = DiagnosticFactory2.create(ERROR); - DiagnosticFactory0 CANNOT_INFER_VISIBILITY = DiagnosticFactory0.create(ERROR, DECLARATION); + DiagnosticFactory1 CANNOT_INFER_VISIBILITY = DiagnosticFactory1.create(ERROR, DECLARATION); DiagnosticFactory2 OVERRIDING_FINAL_MEMBER = DiagnosticFactory2.create(ERROR, OVERRIDE_MODIFIER); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java index 5edc371a331..027c19ed869 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java @@ -152,7 +152,7 @@ public class DefaultErrorMessages { MAP.put(CANNOT_OVERRIDE_INVISIBLE_MEMBER, "''{0}'' has no access to ''{1}'', so it cannot override it", FQ_NAMES_IN_TYPES, FQ_NAMES_IN_TYPES); - MAP.put(CANNOT_INFER_VISIBILITY, "Cannot infer visibility. Please specify it explicitly"); + MAP.put(CANNOT_INFER_VISIBILITY, "Cannot infer visibility for ''{0}''. Please specify it explicitly", COMPACT); MAP.put(ENUM_ENTRY_SHOULD_BE_INITIALIZED, "Missing delegation specifier ''{0}''", NAME); MAP.put(ENUM_ENTRY_ILLEGAL_TYPE, "The type constructor of enum entry should be ''{0}''", NAME); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index 74a3bdfdf31..ae8e8f743b7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -190,7 +190,7 @@ public class OverrideResolver { //noinspection ConstantConditions PsiElement element = BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), reportOn); if (element instanceof JetDeclaration) { - trace.report(CANNOT_INFER_VISIBILITY.on((JetDeclaration) element)); + trace.report(CANNOT_INFER_VISIBILITY.on((JetDeclaration) element, descriptor)); } return Unit.VALUE; } diff --git a/idea/testData/diagnosticMessage/cannotInferVisibility.kt b/idea/testData/diagnosticMessage/cannotInferVisibility.kt new file mode 100644 index 00000000000..9c492cfa864 --- /dev/null +++ b/idea/testData/diagnosticMessage/cannotInferVisibility.kt @@ -0,0 +1,12 @@ +// !DIAGNOSTICS_NUMBER: 1 +// !DIAGNOSTICS: CANNOT_INFER_VISIBILITY + +trait T { + internal val foo: String +} + +trait U { + protected val foo: String +} + +trait V : T, U diff --git a/idea/testData/diagnosticMessage/cannotInferVisibility1.txt b/idea/testData/diagnosticMessage/cannotInferVisibility1.txt new file mode 100644 index 00000000000..05920f8ccda --- /dev/null +++ b/idea/testData/diagnosticMessage/cannotInferVisibility1.txt @@ -0,0 +1,2 @@ + +Cannot infer visibility for 'val foo: kotlin.String'. Please specify it explicitly \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java index fb2309f084c..34a4a00e599 100644 --- a/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java @@ -41,6 +41,11 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes doTest("idea/testData/diagnosticMessage/assignedButNeverAccessedVariable.kt"); } + @TestMetadata("cannotInferVisibility.kt") + public void testCannotInferVisibility() throws Exception { + doTest("idea/testData/diagnosticMessage/cannotInferVisibility.kt"); + } + @TestMetadata("cannotOverrideInvisibleMember.kt") public void testCannotOverrideInvisibleMember() throws Exception { doTest("idea/testData/diagnosticMessage/cannotOverrideInvisibleMember.kt");