From bd0eab5202e25a0b4d69330ba78a09ff448873e0 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 19 Sep 2012 15:29:40 +0400 Subject: [PATCH] Tuple migration quick fix now appears only on tupels shorter than 4 Longer tuples exhibit another error message. Messages adjusted for compiler and IDE --- .../org/jetbrains/jet/lang/diagnostics/Errors.java | 3 +++ .../diagnostics/rendering/DefaultErrorMessages.java | 3 ++- .../org/jetbrains/jet/lang/resolve/TypeResolver.java | 11 +++++++---- .../expressions/BasicExpressionTypingVisitor.java | 7 ++++++- .../jet/plugin/highlighter/IdeErrorMessages.java | 8 ++++++++ .../quickfix/migration/afterTuplesWithRuntime.kt | 4 ++-- .../quickfix/migration/beforeTuplesWithRuntime.kt | 4 ++-- .../jet/plugin/quickfix/JetQuickFixTest.java | 4 ++-- .../jetbrains/jet/testing/InTextDirectivesUtils.java | 2 +- 9 files changed, 33 insertions(+), 13 deletions(-) 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 7b9c96e2b18..26b45a7268e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -48,7 +48,10 @@ import static org.jetbrains.jet.lang.diagnostics.Severity.WARNING; public interface Errors { // TODO: Temporary error message: to deprecate tuples we report this error and provide a quick fix + @Deprecated // Tuples will be dropped in Kotlin M4 SimpleDiagnosticFactory TUPLES_ARE_NOT_SUPPORTED = SimpleDiagnosticFactory.create(ERROR); + @Deprecated // Tuples will be dropped in Kotlin M4 + SimpleDiagnosticFactory TUPLES_ARE_NOT_SUPPORTED_BIG = SimpleDiagnosticFactory.create(ERROR); DiagnosticFactory1 EXCEPTION_WHILE_ANALYZING = DiagnosticFactory1.create(ERROR); 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 e0c5ab364eb..aa478e2bf33 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 @@ -47,7 +47,8 @@ public class DefaultErrorMessages { static { // TODO: remove when tuples are completely dropped - MAP.put(TUPLES_ARE_NOT_SUPPORTED, "Tuples are not supported. Press Alt+Enter to replace tuples with library classes"); + MAP.put(TUPLES_ARE_NOT_SUPPORTED, "Tuples are not supported. In the IDE you can use Alt+Enter to replace tuples with library classes"); + MAP.put(TUPLES_ARE_NOT_SUPPORTED_BIG, "Tuples are not supported. Use data classes instead"); MAP.put(EXCEPTION_WHILE_ANALYZING, "{0}", new Renderer() { @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java index c2f5f64d4f2..023cd1edceb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java @@ -37,9 +37,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import static org.jetbrains.jet.lang.diagnostics.Errors.TUPLES_ARE_NOT_SUPPORTED; -import static org.jetbrains.jet.lang.diagnostics.Errors.UNSUPPORTED; -import static org.jetbrains.jet.lang.diagnostics.Errors.WRONG_NUMBER_OF_TYPE_ARGUMENTS; +import static org.jetbrains.jet.lang.diagnostics.Errors.*; /** * @author abreslav @@ -182,7 +180,12 @@ public class TypeResolver { @Override public void visitTupleType(JetTupleType type) { // TODO: remove this method completely when tuples are droppped - trace.report(TUPLES_ARE_NOT_SUPPORTED.on(type)); + if (type.getComponentTypeRefs().size() <= 3) { + trace.report(TUPLES_ARE_NOT_SUPPORTED.on(type)); + } + else { + trace.report(TUPLES_ARE_NOT_SUPPORTED_BIG.on(type)); + } // TODO labels result[0] = JetStandardClasses.getTupleType(resolveTypes(scope, type.getComponentTypeRefs(), trace, checkBounds)); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 834753d89ea..152c8660c90 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -357,7 +357,12 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { @Override public JetTypeInfo visitTupleExpression(JetTupleExpression expression, ExpressionTypingContext context) { // TODO: remove this method completely when tuples are droppped - context.trace.report(TUPLES_ARE_NOT_SUPPORTED.on(expression)); + if (expression.getEntries().size() <= 3) { + context.trace.report(TUPLES_ARE_NOT_SUPPORTED.on(expression)); + } + else { + context.trace.report(TUPLES_ARE_NOT_SUPPORTED_BIG.on(expression)); + } List entries = expression.getEntries(); List types = new ArrayList(); diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java index 891243cb660..4156094c0af 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java @@ -41,6 +41,14 @@ public class IdeErrorMessages { public static final DiagnosticRenderer RENDERER = new DispatchingDiagnosticRenderer(MAP, DefaultErrorMessages.MAP); static { + // TODO: Remove when tuples are completely dropped + MAP.put(TUPLES_ARE_NOT_SUPPORTED, "Tuples are not supported. Press Alt+Enter to replace tuples with library classes"); + MAP.put(TUPLES_ARE_NOT_SUPPORTED_BIG, "" + + "Tuples are not supported.
" + + "Use data classes instead. For example:
" + + "data class FourThings(val a: A, val b: B, val c: C, val d: D)" + + ""); + MAP.put(TYPE_MISMATCH, "Type mismatch.
Required:{0}
Found:{1}
", HTML_RENDER_TYPE, HTML_RENDER_TYPE); diff --git a/idea/testData/quickfix/migration/afterTuplesWithRuntime.kt b/idea/testData/quickfix/migration/afterTuplesWithRuntime.kt index 971ea0e0911..5edf336a547 100644 --- a/idea/testData/quickfix/migration/afterTuplesWithRuntime.kt +++ b/idea/testData/quickfix/migration/afterTuplesWithRuntime.kt @@ -1,6 +1,6 @@ // "Migrate tuples in project: e.g., #(,) and #(,,) will be replaced by Pair and Triple" "true" -// ERROR: Tuples are not supported. Press Alt+Enter to replace tuples with library classes -// ERROR: Tuples are not supported. Press Alt+Enter to replace tuples with library classes +// ERROR: Tuples are not supported.
Use data classes instead. For example:
data class FourThings(val a: A, val b: B, val c: C, val d: D) +// ERROR: Tuples are not supported.
Use data classes instead. For example:
data class FourThings(val a: A, val b: B, val c: C, val d: D) fun foo2() : Pair { return Pair(1, 1) diff --git a/idea/testData/quickfix/migration/beforeTuplesWithRuntime.kt b/idea/testData/quickfix/migration/beforeTuplesWithRuntime.kt index 6d60be6f52e..dd82996f198 100644 --- a/idea/testData/quickfix/migration/beforeTuplesWithRuntime.kt +++ b/idea/testData/quickfix/migration/beforeTuplesWithRuntime.kt @@ -1,6 +1,6 @@ // "Migrate tuples in project: e.g., #(,) and #(,,) will be replaced by Pair and Triple" "true" -// ERROR: Tuples are not supported. Press Alt+Enter to replace tuples with library classes -// ERROR: Tuples are not supported. Press Alt+Enter to replace tuples with library classes +// ERROR: Tuples are not supported.
Use data classes instead. For example:
data class FourThings(val a: A, val b: B, val c: C, val d: D) +// ERROR: Tuples are not supported.
Use data classes instead. For example:
data class FourThings(val a: A, val b: B, val c: C, val d: D) fun foo2() : #(Int, Int) { return #(1, 1) diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java index 7865a2d0186..15f9166d061 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java @@ -130,11 +130,11 @@ public class JetQuickFixTest extends LightQuickFixTestCase { Collection diagnostics = exhaust.getBindingContext().getDiagnostics(); if (diagnostics.size() != 0) { - String[] expectedErrorStrings = InTextDirectivesUtils.findListWithPrefix("// ERROR:", getFile().getText()); + List expectedErrorStrings = InTextDirectivesUtils.findLinesWithPrefixRemoved("// ERROR:", getFile().getText()); System.out.println(getFile().getText()); - Collection expectedErrors = new HashSet(Arrays.asList(expectedErrorStrings)); + Collection expectedErrors = new HashSet(expectedErrorStrings); StringBuilder builder = new StringBuilder(); boolean hasErrors = false; diff --git a/idea/tests/org/jetbrains/jet/testing/InTextDirectivesUtils.java b/idea/tests/org/jetbrains/jet/testing/InTextDirectivesUtils.java index e02397443dc..648c3503f6c 100644 --- a/idea/tests/org/jetbrains/jet/testing/InTextDirectivesUtils.java +++ b/idea/tests/org/jetbrains/jet/testing/InTextDirectivesUtils.java @@ -61,7 +61,7 @@ public final class InTextDirectivesUtils { } @NotNull - private static List findLinesWithPrefixRemoved(String prefix, String fileText) { + public static List findLinesWithPrefixRemoved(String prefix, String fileText) { ArrayList result = new ArrayList(); for (String line : fileNonEmptyLines(fileText)) {