diff options
Diffstat (limited to 'plugins/InspectionGadgets/src/com/siyeh/ig/bugs/StringConcatenationMissingWhitespaceInspection.java')
-rw-r--r-- | plugins/InspectionGadgets/src/com/siyeh/ig/bugs/StringConcatenationMissingWhitespaceInspection.java | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/StringConcatenationMissingWhitespaceInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/StringConcatenationMissingWhitespaceInspection.java index f8157a8d301a..2d4ae7233d51 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/StringConcatenationMissingWhitespaceInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/StringConcatenationMissingWhitespaceInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2013 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. @@ -22,7 +22,9 @@ import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.psiutils.ExpressionUtils; +import com.siyeh.ig.psiutils.FormatUtils; import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -68,11 +70,12 @@ public class StringConcatenationMissingWhitespaceInspection extends BaseInspecti if (!JavaTokenType.PLUS.equals(tokenType) || !ExpressionUtils.hasStringType(expression)) { return; } + final boolean formatCall = FormatUtils.isFormatCallArgument(expression); final PsiExpression[] operands = expression.getOperands(); PsiExpression lhs = operands[0]; for (int i = 1; i < operands.length; i++) { final PsiExpression rhs = operands[i]; - if (isMissingWhitespace(lhs, rhs)) { + if (isMissingWhitespace(lhs, rhs, formatCall)) { final PsiJavaToken token = expression.getTokenBeforeOperand(rhs); if (token != null) { registerError(token); @@ -82,39 +85,38 @@ public class StringConcatenationMissingWhitespaceInspection extends BaseInspecti } } - private boolean isMissingWhitespace(PsiExpression lhs, PsiExpression rhs) { - final boolean lhsIsString = ExpressionUtils.hasStringType(lhs); - final PsiLiteralExpression lhsLiteral = ExpressionUtils.getLiteral(lhs); - final PsiLiteralExpression rhsLiteral = ExpressionUtils.getLiteral(rhs); - if (lhsLiteral != null && lhsIsString) { - final String value = (String)lhsLiteral.getValue(); - if (value == null) { + private boolean isMissingWhitespace(PsiExpression lhs, PsiExpression rhs, boolean formatCall) { + @NonNls final String lhsLiteral = ExpressionUtils.getLiteralString(lhs); + if (lhsLiteral != null) { + final int length = lhsLiteral.length(); + if (length == 0) { return false; } - final int length = value.length(); - if (length == 0) { + if (formatCall && lhsLiteral.endsWith("%n")) { return false; } - final char c = value.charAt(length - 1); + final char c = lhsLiteral.charAt(length - 1); if (Character.isWhitespace(c) || !Character.isLetterOrDigit(c)) { return false; } } - else if (ignoreNonStringLiterals || rhsLiteral == null || lhsIsString) { + else if (ignoreNonStringLiterals) { return false; } - final boolean rhsIsString = ExpressionUtils.hasStringType(rhs); - if (rhsLiteral != null && rhsIsString) { - final String value = (String)rhsLiteral.getValue(); - if ((value == null) || value.isEmpty()) { + @NonNls final String rhsLiteral = ExpressionUtils.getLiteralString(rhs); + if (rhsLiteral != null) { + if (rhsLiteral.isEmpty()) { + return false; + } + if (formatCall && rhsLiteral.startsWith("%n")) { return false; } - final char c = value.charAt(0); + final char c = rhsLiteral.charAt(0); if (Character.isWhitespace(c) || !Character.isLetterOrDigit(c)) { return false; } } - else if (ignoreNonStringLiterals || rhsIsString) { + else if (ignoreNonStringLiterals) { return false; } return true; |