From b6386e345c7851e5920629a28513b0bf95a5a077 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Thu, 12 Sep 2013 17:28:00 +0400 Subject: [PATCH] added positioning for 'ILLEGAL_ESCAPE' error --- .../jet/lang/diagnostics/Errors.java | 2 +- .../diagnostics/PositioningStrategies.java | 16 ++++++++++++ .../tests/IncorrectCharacterLiterals.kt | 26 +++++++++---------- 3 files changed, 30 insertions(+), 14 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 164dc93afc3..7114358b97f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -468,7 +468,7 @@ public interface Errors { DiagnosticFactory0 INCORRECT_CHARACTER_LITERAL = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 EMPTY_CHARACTER_LITERAL = DiagnosticFactory0.create(ERROR); DiagnosticFactory1 TOO_MANY_CHARACTERS_IN_CHARACTER_LITERAL = DiagnosticFactory1.create(ERROR); - DiagnosticFactory1 ILLEGAL_ESCAPE = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 ILLEGAL_ESCAPE = DiagnosticFactory1.create(ERROR, CUT_CHAR_QUOTES); DiagnosticFactory1 NULL_FOR_NONNULL_TYPE = DiagnosticFactory1.create(ERROR); DiagnosticFactory0 ILLEGAL_ESCAPE_SEQUENCE = DiagnosticFactory0.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java index 808b77e3d56..d94f17ae1aa 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java @@ -24,6 +24,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNameIdentifierOwner; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.JetNodeTypes; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lexer.JetKeywordToken; import org.jetbrains.jet.lexer.JetTokens; @@ -433,6 +434,21 @@ public class PositioningStrategies { } }; + public static final PositioningStrategy CUT_CHAR_QUOTES = new PositioningStrategy() { + @NotNull + @Override + public List mark(@NotNull JetElement element) { + if (element instanceof JetConstantExpression) { + if (element.getNode().getElementType() == JetNodeTypes.CHARACTER_CONSTANT) { + TextRange elementTextRange = element.getTextRange(); + return Collections.singletonList( + TextRange.create(elementTextRange.getStartOffset() + 1, elementTextRange.getEndOffset() - 1)); + } + } + return super.mark(element); + } + }; + private PositioningStrategies() { } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/IncorrectCharacterLiterals.kt b/compiler/testData/diagnostics/tests/IncorrectCharacterLiterals.kt index 6bde61ccbe3..ebc5d2d4a0d 100644 --- a/compiler/testData/diagnostics/tests/IncorrectCharacterLiterals.kt +++ b/compiler/testData/diagnostics/tests/IncorrectCharacterLiterals.kt @@ -6,7 +6,7 @@ fun ff() { val c = '23' val d = 'a val e = 'ab - val f = '\' + val f = '\' } fun test() { @@ -19,19 +19,19 @@ fun test() { '\'' '\\' '\$' - '\x' - '\123' - '\ra' - '\000' - '\000' + '\x' + '\123' + '\ra' + '\000' + '\000' '\u0000' '\u000a' '\u000A' - '\u' - '\u0' - '\u00' - '\u000' - '\u000z' - '\\u000' - '\' + '\u' + '\u0' + '\u00' + '\u000' + '\u000z' + '\\u000' + '\' }