diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 140b8f92e90e..29828ae2dc5f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -955,7 +955,11 @@ public class HighlightUtil { return null; } else if (type == JavaTokenType.CHARACTER_LITERAL) { - if (value == null) { + // todo[r.sh] clean this mess up + if (value != null) { + if (!StringUtil.endsWithChar(text, '\'')) return JavaErrorMessages.message("unclosed.char.literal"); + } + else { if (!StringUtil.startsWithChar(text, '\'')) return null; if (StringUtil.endsWithChar(text, '\'')) { if (text.length() == 1) return JavaErrorMessages.message("illegal.line.end.in.character.literal"); diff --git a/java/java-psi-impl/src/messages/JavaErrorMessages.properties b/java/java-psi-impl/src/messages/JavaErrorMessages.properties index 1c83fe4b3480..1dc16d9d3331 100644 --- a/java/java-psi-impl/src/messages/JavaErrorMessages.properties +++ b/java/java-psi-impl/src/messages/JavaErrorMessages.properties @@ -276,6 +276,7 @@ illegal.escape.character.in.character.literal=Illegal escape character in charac too.many.characters.in.character.literal=Too many characters in character literal empty.character.literal=Empty character literal illegal.line.end.in.string.literal=Illegal line end in string literal +unclosed.char.literal=Unclosed character literal illegal.escape.character.in.string.literal=Illegal escape character in string literal floating.point.number.too.large=Floating point number too large floating.point.number.too.small=Floating point number too small diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringLiterals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringLiterals.java index e28b1203f9ac..50f7e9d02eb0 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringLiterals.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/StringLiterals.java @@ -1,3 +1,19 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + // string literal public class a { char c1 = ''; @@ -8,7 +24,8 @@ public class a { char[] cA = new char[] { 'd','\b','\f','\n','\r' ,'\t','"','\\',' ','\u1234','\uFFFF' - , '\7', '\77', '\345', '\0'}; + , '\7', '\77', '\345', '\0', 'x + }; String s1 = "\xd"; String s11= "\udX"; @@ -29,5 +46,7 @@ public class a { ); } - + String[] s = { + "unclosed + }; }