new "String literal concatenation missing whitespace" inspection

This commit is contained in:
Bas Leijdekkers
2012-07-18 13:08:26 +02:00
parent 6c50b1b688
commit e207c2686d
7 changed files with 224 additions and 2 deletions
@@ -11,6 +11,7 @@
<extensions xmlns="com.intellij">
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
<!--group.names.abstraction.issues-->
<localInspection language="JAVA" shortName="CastToConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle" key="cast.to.concrete.class.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.abstraction.CastToConcreteClassInspection"/>
@@ -78,6 +79,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.abstraction.TypeMayBeWeakenedInspection"/>
<!--group.names.assignment.issues-->
<localInspection language="JAVA" shortName="AssignmentToCatchBlockParameter" bundle="com.siyeh.InspectionGadgetsBundle"
key="assignment.to.catch.block.parameter.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
@@ -121,6 +123,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.assignment.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.assignment.ReplaceAssignmentWithOperatorAssignmentInspection"/>
<!--group.names.bitwise.operation.issues-->
<localInspection language="JAVA" suppressId="IncompatibleBitwiseMaskOperation" shortName="IncompatibleMask" bundle="com.siyeh.InspectionGadgetsBundle"
key="incompatible.mask.operation.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.bitwise.operation.issues" enabledByDefault="true" level="WARNING"
@@ -134,6 +137,7 @@
groupKey="group.names.bitwise.operation.issues" enabledByDefault="true" level="WARNING"
implementationClass="com.siyeh.ig.bitwise.ShiftOutOfRangeInspection"/>
<!--group.names.probable.bugs-->
<localInspection language="JAVA" suppressId="UseOfArchaicSystemPropertyAccessors" shortName="ArchaicSystemPropertyAccess"
bundle="com.siyeh.InspectionGadgetsBundle" key="archaic.system.property.accessors.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
@@ -341,6 +345,10 @@
key="string.concatenation.in.message.format.call.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.bugs.StringConcatenationInMessageFormatCallInspection"/>
<localInspection language="JAVA" shortName="StringConcatenationMissingWhitespace" bundle="com.siyeh.InspectionGadgetsBundle"
key="string.concatenation.missing.whitespace.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.bugs.StringConcatenationMissingWhitespaceInspection"/>
<localInspection language="JAVA" suppressId="StaticFieldReferencedViaSubclass" shortName="StaticFieldReferenceOnSubclass"
bundle="com.siyeh.InspectionGadgetsBundle" key="static.field.via.subclass.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
@@ -381,6 +389,7 @@
groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.bugs.VariableNotUsedInsideIfInspection"/>
<!--group.names.class.structure-->
<localInspection language="JAVA" shortName="AnonymousInnerClass" bundle="com.siyeh.InspectionGadgetsBundle" key="anonymous.inner.class.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.classlayout.AnonymousInnerClassInspection"/>
@@ -490,6 +499,7 @@
groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.classlayout.MethodReturnAlwaysConstantInspection"/>
<!--group.names.class.metrics-->
<localInspection language="JAVA" suppressId="OverlyComplexAnonymousInnerClass" shortName="AnonymousClassComplexity"
bundle="com.siyeh.InspectionGadgetsBundle" key="overly.complex.anonymous.inner.class.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics" enabledByDefault="false" level="WARNING"
@@ -522,6 +532,7 @@
key="too.many.methods.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics"
enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.classmetrics.MethodCountInspection"/>
<!--group.names.cloning.issues-->
<localInspection language="JAVA" shortName="CloneCallsConstructors" bundle="com.siyeh.InspectionGadgetsBundle"
key="clone.instantiates.objects.with.constructor.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.cloning.issues" enabledByDefault="false" level="WARNING"
@@ -543,6 +554,7 @@
groupKey="group.names.cloning.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.cloneable.CloneableImplementsCloneInspection"/>
<!--group.names.control.flow.issues-->
<localInspection language="JAVA" shortName="BreakStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="break.statement.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.controlflow.BreakStatementInspection"/>
@@ -715,6 +727,7 @@
groupKey="group.names.control.flow.issues" enabledByDefault="true" level="WARNING"
implementationClass="com.siyeh.ig.controlflow.UnnecessaryReturnInspection"/>
<!--group.names.data.flow.issues-->
<localInspection language="JAVA" shortName="BooleanVariableAlwaysNegated" bundle="com.siyeh.InspectionGadgetsBundle"
key="boolean.variable.always.inverted.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.data.flow.issues" enabledByDefault="false" level="WARNING"
@@ -745,6 +758,7 @@
groupKey="group.names.data.flow.issues" enabledByDefault="true" level="WARNING"
implementationClass="com.intellij.codeInspection.booleanIsAlwaysInverted.BooleanMethodIsAlwaysInvertedInspection"/>
<!--group.names.dependency.issues-->
<globalInspection shortName="ClassWithTooManyDependencies" bundle="com.siyeh.InspectionGadgetsBundle"
key="class.with.too.many.dependencies.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.dependency.issues" enabledByDefault="false" level="WARNING"
@@ -770,6 +784,7 @@
groupKey="group.names.dependency.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.dependency.CyclicPackageDependencyInspection"/>
<!--group.names.encapsulation.issues-->
<localInspection language="JAVA" shortName="PackageVisibleField" bundle="com.siyeh.InspectionGadgetsBundle" key="package.visible.field.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.encapsulation.PackageVisibleFieldInspection"/>
@@ -801,6 +816,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.encapsulation.UseOfAnotherObjectsPrivateFieldInspection"/>
<!--group.names.error.handling-->
<localInspection language="JAVA" suppressId="ProhibitedExceptionCaught" shortName="BadExceptionCaught" bundle="com.siyeh.InspectionGadgetsBundle"
key="bad.exception.caught.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling"
enabledByDefault="false" level="WARNING"
@@ -894,6 +910,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.errorhandling.ThrowsRuntimeExceptionInspection"/>
<!--group.names.finalization.issues-->
<localInspection language="JAVA" suppressId="FinalizeDoesntCallSuperFinalize" shortName="FinalizeCallsSuperFinalize"
bundle="com.siyeh.InspectionGadgetsBundle" key="finalize.doesnt.call.super.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.finalization.issues" enabledByDefault="true"
@@ -911,6 +928,7 @@
groupKey="group.names.finalization.issues" enabledByDefault="true" level="WARNING"
implementationClass="com.siyeh.ig.finalization.NoExplicitFinalizeCallsInspection"/>
<!--group.names.imports-->
<localInspection language="JAVA" shortName="JavaLangImport" bundle="com.siyeh.InspectionGadgetsBundle" key="java.lang.import.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.imports" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.imports.JavaLangImportInspection"/>
@@ -933,6 +951,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.imports" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.imports.UnusedImportInspection"/>
<!--group.names.inheritance.issues-->
<localInspection language="JAVA" shortName="AbstractClassExtendsConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
key="abstract.class.extends.concrete.class.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
@@ -992,6 +1011,7 @@
groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.inheritance.TypeParameterExtendsFinalClassInspection"/>
<!--group.names.initialization.issues-->
<localInspection language="JAVA" shortName="AbstractMethodCallInConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
key="abstract.method.call.in.constructor.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.initialization.issues" enabledByDefault="false" level="WARNING"
@@ -1033,6 +1053,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.initialization.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.initialization.ThisEscapedInConstructorInspection"/>
<!--group.names.internationalization.issues-->
<localInspection language="JAVA" shortName="CharacterComparison" bundle="com.siyeh.InspectionGadgetsBundle" key="character.comparison.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.internationalization.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.internationalization.CharacterComparisonInspection"/>
@@ -1083,6 +1104,7 @@
groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.internationalization.AbsoluteAlignmentInUserInterfaceInspection"/>
<!--group.names.j2me.issues-->
<localInspection language="JAVA" shortName="AbstractClassWithOnlyOneDirectInheritor" bundle="com.siyeh.InspectionGadgetsBundle"
key="abstract.class.with.only.one.direct.inheritor.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
@@ -1140,6 +1162,7 @@
groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.j2me.SingleCharacterStartsWithInspection"/>
<!--group.names.javabeans.issues-->
<localInspection language="JAVA" shortName="ClassWithoutConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
key="class.without.constructor.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.javabeans.issues" enabledByDefault="false" level="WARNING"
@@ -1153,6 +1176,7 @@
groupKey="group.names.javabeans.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.javabeans.FieldHasSetterButNoGetterInspection"/>
<!--group.names.javadoc.issues-->
<localInspection language="JAVA" shortName="HtmlTagCanBeJavadocTag" bundle="com.siyeh.InspectionGadgetsBundle"
key="html.tag.can.be.javadoc.tag.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
@@ -1169,6 +1193,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.javadoc.UnnecessaryInheritDocInspection"/>
<!--group.names.language.level.specific.issues.and.migration.aids-->
<localInspection language="JAVA" shortName="CollectionsFieldAccessReplaceableByMethodCall" bundle="com.siyeh.InspectionGadgetsBundle"
key="collections.field.access.replaceable.by.method.call.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="false" level="WARNING"
@@ -1220,6 +1245,7 @@
groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="true" level="WARNING"
implementationClass="com.siyeh.ig.migration.WhileCanBeForeachInspection"/>
<!--group.names.java.language.level.issues-->
<localInspection language="JAVA" shortName="AnnotationClass" bundle="com.siyeh.InspectionGadgetsBundle" key="annotation.class.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.java.language.level.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.jdk.AnnotationClassInspection"/>
@@ -1254,6 +1280,7 @@
groupKey="group.names.java.language.level.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.jdk.VarargParameterInspection"/>
<!--group.names.junit.issues-->
<localInspection language="JAVA" shortName="AssertEqualsBetweenInconvertibleTypes" bundle="com.siyeh.InspectionGadgetsBundle"
key="assertequals.between.inconvertible.types.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.junit.issues" enabledByDefault="true" level="WARNING"
@@ -1372,6 +1399,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.junit.UseOfObsoleteAssertInspection"/>
<!--group.names.logging.issues-->
<localInspection language="JAVA" shortName="ClassWithMultipleLoggers" bundle="com.siyeh.InspectionGadgetsBundle" key="multiple.loggers.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.logging.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.logging.ClassWithMultipleLoggersInspection"/>
@@ -1398,6 +1426,7 @@
groupKey="group.names.logging.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.logging.PublicMethodWithoutLoggingInspection"/>
<!--group.names.code.maturity.issues-->
<localInspection language="JAVA" shortName="SuppressionAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
key="inspection.suppression.annotation.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.code.maturity.issues" enabledByDefault="false" level="WARNING"
@@ -1421,6 +1450,7 @@
groupKey="group.names.code.maturity.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.maturity.ObsoleteCollectionInspection"/>
<!--group.names.memory.issues-->
<localInspection language="JAVA" shortName="StaticCollection" bundle="com.siyeh.InspectionGadgetsBundle" key="static.collection.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.memory.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.memory.StaticCollectionInspection"/>
@@ -1435,6 +1465,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.memory.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.memory.ZeroLengthArrayInitializationInspection"/>
<!--group.names.method.metrics-->
<localInspection language="JAVA" suppressId="ConstructorWithTooManyParameters" shortName="ParametersPerConstructor"
bundle="com.siyeh.InspectionGadgetsBundle" key="parameters.per.constructor.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.method.metrics" enabledByDefault="false" level="WARNING"
@@ -1474,6 +1505,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.method.metrics" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.methodmetrics.ThrownExceptionsPerMethodInspection"/>
<!--group.names.modularization.issues-->
<globalInspection shortName="ClassIndependentOfModule" bundle="com.siyeh.InspectionGadgetsBundle"
key="class.independent.of.module.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.modularization.issues" enabledByDefault="false" level="WARNING"
@@ -1491,6 +1523,7 @@
groupKey="group.names.modularization.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.modularization.ModuleWithTooFewClassesInspection"/>
<!--group.names.naming.conventions-->
<localInspection language="JAVA" shortName="AnnotationNamingConvention" bundle="com.siyeh.InspectionGadgetsBundle"
key="annotation.naming.convention.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.naming.conventions" enabledByDefault="false" level="WARNING"
@@ -1611,6 +1644,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.naming.conventions" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.naming.UpperCaseFieldNameNotConstantInspection"/>
<!--group.names.numeric.issues-->
<localInspection language="JAVA" shortName="BadOddness" bundle="com.siyeh.InspectionGadgetsBundle" key="bad.oddness.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.numeric.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.numeric.BadOddnessInspection"/>
@@ -1707,6 +1741,7 @@
groupKey="group.names.numeric.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.numeric.UnpredictableBigDecimalConstructorCallInspection"/>
<!--group.names.packaging.issues-->
<globalInspection shortName="ClassOnlyUsedInOnePackage" bundle="com.siyeh.InspectionGadgetsBundle"
key="class.only.used.in.one.package.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.packaging.issues" enabledByDefault="false" level="WARNING"
@@ -1734,6 +1769,7 @@
groupKey="group.names.packaging.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.packaging.PackageWithTooFewClassesInspection"/>
<!--group.names.performance.issues-->
<localInspection language="JAVA" suppressId="BooleanConstructorCall" shortName="BooleanConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
key="boolean.constructor.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.performance.issues" enabledByDefault="true" level="WARNING"
@@ -1881,6 +1917,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.performance.issues" enabledByDefault="true"
level="WARNING" implementationClass="com.siyeh.ig.performance.BoxingBoxedValueInspection"/>
<!--group.names.portability.issues-->
<localInspection language="JAVA" suppressId="HardcodedFileSeparator" shortName="HardcodedFileSeparators" bundle="com.siyeh.InspectionGadgetsBundle"
key="hardcoded.file.separator.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.portability.issues" enabledByDefault="false" level="WARNING"
@@ -1916,6 +1953,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.portability.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.portability.UseOfSunClassesInspection"/>
<!--group.names.declaration.redundancy-->
<globalInspection shortName="ElementOnlyUsedFromTestCode" bundle="com.siyeh.InspectionGadgetsBundle"
key="element.only.used.from.test.code.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.declaration.redundancy" enabledByDefault="false" level="WARNING"
@@ -1924,6 +1962,7 @@
groupBundle="messages.InspectionsBundle" groupKey="group.names.declaration.redundancy" enabledByDefault="true"
level="WARNING" implementationClass="com.siyeh.ig.redundancy.UnusedLabelInspection"/>
<!--group.names.resource.management.issues-->
<localInspection language="JAVA" suppressId="ChannelOpenedButNotSafelyClosed" shortName="ChannelResource" bundle="com.siyeh.InspectionGadgetsBundle"
key="channel.opened.not.closed.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.resource.management.issues" enabledByDefault="false" level="WARNING"
@@ -1953,6 +1992,7 @@
groupKey="group.names.resource.management.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.resources.SocketResourceInspection"/>
<!--group.names.security.issues-->
<localInspection language="JAVA" shortName="ClassLoaderInstantiation" bundle="com.siyeh.InspectionGadgetsBundle"
key="class.loader.instantiation.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.security.issues" enabledByDefault="false" level="WARNING"
@@ -2021,6 +2061,7 @@
groupKey="group.names.security.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.security.UnsecureRandomNumberGenerationInspection"/>
<!--group.names.serialization.issues-->
<localInspection language="JAVA" shortName="ComparatorNotSerializable" bundle="com.siyeh.InspectionGadgetsBundle"
key="comparator.not.serializable.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.serialization.issues" enabledByDefault="false" level="WARNING"
@@ -2103,6 +2144,7 @@
groupKey="group.names.serialization.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.serialization.TransientFieldNotInitializedInspection"/>
<!--group.names.code.style.issues-->
<localInspection language="JAVA" shortName="CallToStringConcatCanBeReplacedByOperator" bundle="com.siyeh.InspectionGadgetsBundle"
key="call.to.string.concat.can.be.replaced.by.operator.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.code.style.issues" enabledByDefault="false" level="WARNING"
@@ -2287,6 +2329,7 @@
groupKey="group.names.code.style.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.style.SizeReplaceableByIsEmptyInspection"/>
<!--group.names.threading.issues-->
<localInspection language="JAVA" suppressId="AccessToNonThreadSafeStaticField" shortName="AccessToNonThreadSafeStaticFieldFromInstance"
bundle="com.siyeh.InspectionGadgetsBundle" key="access.to.non.thread.safe.static.field.from.instance.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.threading.issues" enabledByDefault="false"
@@ -2467,6 +2510,7 @@
groupKey="group.names.threading.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.threading.WhileLoopSpinsOnFieldInspection"/>
<!--group.names.visibility.issues-->
<localInspection language="JAVA" shortName="AmbiguousMethodCall" bundle="com.siyeh.InspectionGadgetsBundle" key="ambiguous.method.call.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.visibility.issues" enabledByDefault="false"
level="WARNING" implementationClass="com.siyeh.ig.visibility.AmbiguousMethodCallInspection"/>
@@ -1958,7 +1958,10 @@ string.builder.replaceable.by.string.quickfix=Replace 'StringBuilder' with 'Stri
string.buffer.replaceable.by.string.quickfix=Replace 'StringBuffer' with 'String'
add.0.to.ignore.if.annotated.by.list.quickfix=Add ''{0}'' to ''Ignore if annotated by'' list
non.final.field.in.enum.display.name=Non-'final' field in enum
non.final.field.in.enum.problem.descriptor=non-''final'' field <code>#ref</code> in enum ''{0}''
non.final.field.in.enum.problem.descriptor=non-''final'' field <code>#ref</code> in enum ''{0}'' #loc
externalizable.without.public.no.arg.constructor.display.name=Externalizable class without public no-arg constructor
externalizable.without.public.no.arg.constructor.problem.descriptor=Externalizable class <code>#ref</code> has no public no-arg constructor
externalizable.without.public.no.arg.constructor.problem.descriptor=Externalizable class <code>#ref</code> has no public no-arg constructor #loc
make.constructor.public=Make constructor 'public'
string.concatenation.missing.whitespace.display.name=String literal concatenation missing whitespace
string.concatenation.missing.whitespace.problem.descriptor=String literal concatenation missing whitespace #loc
string.concatenation.missing.whitespace.option=Ignore when not both sides are string literals
@@ -0,0 +1,123 @@
/*
* 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.
*/
package com.siyeh.ig.bugs;
import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.ParenthesesUtils;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
/**
* @author Bas Leijdekkers
*/
public class StringConcatenationMissingWhitespaceInspection extends BaseInspection {
@SuppressWarnings("PublicField")
public boolean ignoreNonStringLiterals = false;
@NotNull
@Override
protected String buildErrorString(Object... infos) {
return InspectionGadgetsBundle.message("string.concatenation.missing.whitespace.problem.descriptor");
}
@Override
public JComponent createOptionsPanel() {
return new SingleCheckboxOptionsPanel(InspectionGadgetsBundle.message("string.concatenation.missing.whitespace.option"),
this, "ignoreNonStringLiterals");
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new StringConcatenationMissingWhitespaceVisitor();
}
private class StringConcatenationMissingWhitespaceVisitor extends BaseInspectionVisitor {
@Override
public void visitPolyadicExpression(PsiPolyadicExpression expression) {
super.visitPolyadicExpression(expression);
final IElementType tokenType = expression.getOperationTokenType();
if (!JavaTokenType.PLUS.equals(tokenType) || !hasStringType(expression)) {
return;
}
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)) {
final PsiJavaToken token = expression.getTokenBeforeOperand(rhs);
if (token != null) {
registerError(token);
}
}
lhs = rhs;
}
}
private boolean isMissingWhitespace(PsiExpression lhs, PsiExpression rhs) {
if (isLiteral(lhs) && hasStringType(lhs)) {
final PsiLiteralExpression literalExpression = (PsiLiteralExpression)lhs;
final String value = (String)literalExpression.getValue();
if (value == null) {
return false;
}
final int length = value.length();
if (length == 0) {
return false;
}
final char c = value.charAt(length - 1);
if (Character.isWhitespace(c) || !Character.isLetterOrDigit(c)) {
return false;
}
}
else if (ignoreNonStringLiterals || !isLiteral(rhs) || hasStringType(lhs)) {
return false;
}
if (isLiteral(rhs) && hasStringType(rhs)) {
final PsiLiteralExpression literalExpression = (PsiLiteralExpression)rhs;
final String value = (String)literalExpression.getValue();
if ((value == null) || (value.length() == 0)) {
return false;
}
final char c = value.charAt(0);
if (Character.isWhitespace(c) || !Character.isLetterOrDigit(c)) {
return false;
}
}
else if (ignoreNonStringLiterals || hasStringType(rhs)) {
return false;
}
return true;
}
private boolean isLiteral(PsiExpression expression) {
expression = ParenthesesUtils.stripParentheses(expression);
return expression instanceof PsiLiteralExpression;
}
private boolean hasStringType(PsiExpression expression) {
final PsiType type = expression.getType();
return (type != null) && type.equalsToText(CommonClassNames.JAVA_LANG_STRING);
}
}
}
@@ -0,0 +1,15 @@
<html>
<body>
This inspection reports string concatenations where the left literal does not
end with whitespace and the right literal does not start with whitespace. For example:
<pre><code>
String sql = "SELECT column" +
"FROM table";
</code></pre>
<!-- tooltip end -->
<p>
Use the checkbox below to have this inspection only report when both the left and right side of the concatenation are string literals.
<p>
<small>New in 12, Powered by InspectionGadgets</small>
</body>
</html>
@@ -0,0 +1,11 @@
package com.siyeh.igtest.bugs.string_concatenation_missing_whitespace;
class Concatenations {
void foo(int i) {
System.out.println("SELECT column" +
"FROM table");
System.out.println("no:" + i);
System.out.println("i" + i);
}
}
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems>
<problem>
<file>Concatenations.java</file>
<line>6</line>
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">String literal concatenation missing whitespace</problem_class>
<description>String literal concatenation missing whitespace #loc</description>
</problem>
<problem>
<file>Concatenations.java</file>
<line>9</line>
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">String literal concatenation missing whitespace</problem_class>
<description>String literal concatenation missing whitespace #loc</description>
</problem>
</problems>
@@ -0,0 +1,10 @@
package com.siyeh.ig.bugs;
import com.siyeh.ig.IGInspectionTestCase;
public class StringConcatenationMissingWhitespaceInspectionTest extends IGInspectionTestCase {
public void test() throws Exception {
doTest("com/siyeh/igtest/bugs/string_concatenation_missing_whitespace", new StringConcatenationMissingWhitespaceInspection());
}
}