From a5cc894ecdb01279d4ba29a3e06d829456e42fc3 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 17 Apr 2014 19:01:29 +0400 Subject: [PATCH] Fix "name in constraint is not a type parameter" diagnostic message TO_STRING renderer was used for PSI elements, so things like "CLASS", "FUN" were displayed in the message --- .../lang/diagnostics/rendering/DefaultErrorMessages.java | 2 +- .../jet/lang/diagnostics/rendering/Renderers.java | 9 +++++++++ .../nameInConstraintIsNotATypeParameter.kt | 6 ++++++ .../nameInConstraintIsNotATypeParameter1.txt | 2 ++ .../highlighter/DiagnosticMessageTestGenerated.java | 5 +++++ 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter.kt create mode 100644 idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter1.txt 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 4aa8ee2d562..b92a2eea6cb 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 @@ -347,7 +347,7 @@ public class DefaultErrorMessages { //noinspection ConstantConditions return typeConstraint.getSubjectTypeParameterName().getReferencedName(); } - }, TO_STRING); + }, DECLARATION_NAME); MAP.put(AUTOCAST_IMPOSSIBLE, "Automatic cast to ''{0}'' is impossible, because ''{1}'' could have changed since the is-check", RENDER_TYPE, STRING); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/Renderers.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/Renderers.java index d8dcaf251fb..d741dbed6fe 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/Renderers.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/Renderers.java @@ -28,6 +28,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.lang.psi.JetClassOrObject; +import org.jetbrains.jet.lang.psi.JetNamedDeclaration; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.calls.inference.*; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; @@ -89,6 +90,14 @@ public class Renderers { } }; + public static final Renderer DECLARATION_NAME = new Renderer() { + @NotNull + @Override + public String render(@NotNull JetNamedDeclaration element) { + return element.getNameAsSafeName().asString(); + } + }; + public static final Renderer RENDER_CLASS_OR_OBJECT = new Renderer() { @NotNull @Override diff --git a/idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter.kt b/idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter.kt new file mode 100644 index 00000000000..2df9b6cfefa --- /dev/null +++ b/idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter.kt @@ -0,0 +1,6 @@ +// !DIAGNOSTICS_NUMBER: 1 +// !DIAGNOSTICS: NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER + +object O + +fun foo() where O : O { } diff --git a/idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter1.txt b/idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter1.txt new file mode 100644 index 00000000000..10e227f3b4f --- /dev/null +++ b/idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter1.txt @@ -0,0 +1,2 @@ + +O does not refer to a type parameter of foo \ 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 d37d0a121cb..407a1f6eff5 100644 --- a/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java @@ -91,6 +91,11 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes doTest("idea/testData/diagnosticMessage/multipleDefaultsFromSupertypes.kt"); } + @TestMetadata("nameInConstraintIsNotATypeParameter.kt") + public void testNameInConstraintIsNotATypeParameter() throws Exception { + doTest("idea/testData/diagnosticMessage/nameInConstraintIsNotATypeParameter.kt"); + } + @TestMetadata("numberValueTypes.kt") public void testNumberValueTypes() throws Exception { doTest("idea/testData/diagnosticMessage/numberValueTypes.kt");