diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
index 27379ee4ae33..25d4412ef135 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
@@ -1030,39 +1030,40 @@ public class HighlightUtil extends HighlightUtilBase {
final PsiElement parent = expression.getParent();
if (type == JavaTokenType.INTEGER_LITERAL) {
+ String cleanText = StringUtil.replace(text, "_", "");
//literal 2147483648 may appear only as the operand of the unary negation operator -.
- if (!(text.equals(PsiLiteralExpressionImpl._2_IN_31) &&
+ if (!(cleanText.equals(PsiLiteralExpressionImpl._2_IN_31) &&
parent instanceof PsiPrefixExpression &&
((PsiPrefixExpression)parent).getOperationTokenType() == JavaTokenType.MINUS)) {
- if (text.equals(PsiLiteralExpressionImpl.HEX_PREFIX)) {
+ if (cleanText.equals(PsiLiteralExpressionImpl.HEX_PREFIX)) {
String message = JavaErrorMessages.message("hexadecimal.numbers.must.contain.at.least.one.hexadecimal.digit");
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(message).create();
}
- if (text.equals(PsiLiteralExpressionImpl.BIN_PREFIX)) {
+ if (cleanText.equals(PsiLiteralExpressionImpl.BIN_PREFIX)) {
String message = JavaErrorMessages.message("binary.numbers.must.contain.at.least.one.hexadecimal.digit");
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(message).create();
}
- if (value == null || text.equals(PsiLiteralExpressionImpl._2_IN_31)) {
+ if (value == null || cleanText.equals(PsiLiteralExpressionImpl._2_IN_31)) {
String message = JavaErrorMessages.message("integer.number.too.large");
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(message).create();
}
}
}
else if (type == JavaTokenType.LONG_LITERAL) {
- String mText = text.endsWith("l") ? text.substring(0, text.length() - 1) : text;
+ String cleanText = StringUtil.replace(StringUtil.trimEnd(text, 'l'), "_", "");
//literal 9223372036854775808L may appear only as the operand of the unary negation operator -.
- if (!(mText.equals(PsiLiteralExpressionImpl._2_IN_63) &&
+ if (!(cleanText.equals(PsiLiteralExpressionImpl._2_IN_63) &&
parent instanceof PsiPrefixExpression &&
((PsiPrefixExpression)parent).getOperationTokenType() == JavaTokenType.MINUS)) {
- if (mText.equals(PsiLiteralExpressionImpl.HEX_PREFIX)) {
+ if (cleanText.equals(PsiLiteralExpressionImpl.HEX_PREFIX)) {
String message = JavaErrorMessages.message("hexadecimal.numbers.must.contain.at.least.one.hexadecimal.digit");
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(message).create();
}
- if (mText.equals(PsiLiteralExpressionImpl.BIN_PREFIX)) {
+ if (cleanText.equals(PsiLiteralExpressionImpl.BIN_PREFIX)) {
String message = JavaErrorMessages.message("binary.numbers.must.contain.at.least.one.hexadecimal.digit");
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(message).create();
}
- if (value == null || mText.equals(PsiLiteralExpressionImpl._2_IN_63)) {
+ if (value == null || cleanText.equals(PsiLiteralExpressionImpl._2_IN_63)) {
String message = JavaErrorMessages.message("long.number.too.large");
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(message).create();
}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NumericLiterals.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NumericLiterals.java
index c597b6ecd2de..e954933774aa 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NumericLiterals.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NumericLiterals.java
@@ -20,6 +20,8 @@ public class NumericLiterals {
long l5 = 0b0001_0010_0100_1000l;
long l6 = 0Bl;
long l7 = 0B1_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L;
+ long l8 = 9_223_372_036_854_775_808L;
+ long l9 = -9_223_372_036_854_775_808L;
float f1 = 1_0f;
float f2 = 1e1_2f;