From 59ac85d371936958fe7ad8228ddb8d7f56f7b41e Mon Sep 17 00:00:00 2001 From: igor-suhorukov Date: Sun, 30 Dec 2018 22:34:02 +0300 Subject: [PATCH] Avoid string concatenation inside StringBuilder append() See gh-15589 --- .../annotation/DiscoveredJmxOperation.java | 4 +-- .../web/WebOperationRequestPredicate.java | 8 ++--- .../condition/ConditionMessage.java | 8 ++--- .../ServiceCapabilitiesReportGenerator.java | 29 ++++++++++--------- .../metadata/Metadata.java | 6 ++-- .../UnresolvedDependenciesAnalyzer.java | 8 ++--- .../boot/StartupInfoLogger.java | 2 +- .../ConfigurationPropertiesBindException.java | 4 +-- .../validation/BindValidationException.java | 2 +- ...igurationPropertyValueFailureAnalyzer.java | 11 +++---- .../env/YamlPropertySourceLoaderTests.java | 2 +- .../AbstractServletWebServerFactoryTests.java | 3 +- 12 files changed, 45 insertions(+), 42 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/DiscoveredJmxOperation.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/DiscoveredJmxOperation.java index 22ff75c3fdec..a5a38d7e6b7b 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/DiscoveredJmxOperation.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/DiscoveredJmxOperation.java @@ -180,9 +180,9 @@ public String getDescription() { public String toString() { StringBuilder result = new StringBuilder(this.name); if (this.description != null) { - result.append(" (" + this.description + ")"); + result.append(" (").append(this.description).append(")"); } - result.append(":" + this.type); + result.append(":").append(this.type); return result.toString(); } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebOperationRequestPredicate.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebOperationRequestPredicate.java index b45993d6d763..7a9d00ccf965 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebOperationRequestPredicate.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebOperationRequestPredicate.java @@ -124,12 +124,12 @@ public String toString() { StringBuilder result = new StringBuilder( this.httpMethod + " to path '" + this.path + "'"); if (!CollectionUtils.isEmpty(this.consumes)) { - result.append(" consumes: " - + StringUtils.collectionToCommaDelimitedString(this.consumes)); + result.append(" consumes: ") + .append(StringUtils.collectionToCommaDelimitedString(this.consumes)); } if (!CollectionUtils.isEmpty(this.produces)) { - result.append(" produces: " - + StringUtils.collectionToCommaDelimitedString(this.produces)); + result.append(" produces: ") + .append(StringUtils.collectionToCommaDelimitedString(this.produces)); } return result.toString(); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionMessage.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionMessage.java index 681a38a53d6e..1c59e0afc37b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionMessage.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionMessage.java @@ -386,14 +386,14 @@ public ConditionMessage items(Style style, Collection items) { items = style.applyTo(items); if ((this.condition == null || items.size() <= 1) && StringUtils.hasLength(this.singular)) { - message.append(" " + this.singular); + message.append(" ").append(this.singular); } else if (StringUtils.hasLength(this.plural)) { - message.append(" " + this.plural); + message.append(" ").append(this.plural); } if (items != null && !items.isEmpty()) { - message.append( - " " + StringUtils.collectionToDelimitedString(items, ", ")); + message.append(" ") + .append(StringUtils.collectionToDelimitedString(items, ", ")); } return this.condition.because(message.toString()); } diff --git a/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/init/ServiceCapabilitiesReportGenerator.java b/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/init/ServiceCapabilitiesReportGenerator.java index 5f5367c681e7..651d0450ae34 100644 --- a/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/init/ServiceCapabilitiesReportGenerator.java +++ b/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/init/ServiceCapabilitiesReportGenerator.java @@ -66,9 +66,9 @@ public String generate(String url) throws IOException { private String generateHelp(String url, InitializrServiceMetadata metadata) { String header = "Capabilities of " + url; StringBuilder report = new StringBuilder(); - report.append(repeat("=", header.length()) + NEW_LINE); - report.append(header + NEW_LINE); - report.append(repeat("=", header.length()) + NEW_LINE); + report.append(repeat("=", header.length())).append(NEW_LINE); + report.append(header).append(NEW_LINE); + report.append(repeat("=", header.length())).append(NEW_LINE); report.append(NEW_LINE); reportAvailableDependencies(metadata, report); report.append(NEW_LINE); @@ -80,13 +80,13 @@ private String generateHelp(String url, InitializrServiceMetadata metadata) { private void reportAvailableDependencies(InitializrServiceMetadata metadata, StringBuilder report) { - report.append("Available dependencies:" + NEW_LINE); - report.append("-----------------------" + NEW_LINE); + report.append("Available dependencies:").append(NEW_LINE); + report.append("-----------------------").append(NEW_LINE); List dependencies = getSortedDependencies(metadata); for (Dependency dependency : dependencies) { - report.append(dependency.getId() + " - " + dependency.getName()); + report.append(dependency.getId()).append(" - ").append(dependency.getName()); if (dependency.getDescription() != null) { - report.append(": " + dependency.getDescription()); + report.append(": ").append(dependency.getDescription()); } report.append(NEW_LINE); } @@ -100,14 +100,14 @@ private List getSortedDependencies(InitializrServiceMetadata metadat private void reportAvailableProjectTypes(InitializrServiceMetadata metadata, StringBuilder report) { - report.append("Available project types:" + NEW_LINE); - report.append("------------------------" + NEW_LINE); + report.append("Available project types:").append(NEW_LINE); + report.append("------------------------").append(NEW_LINE); SortedSet> entries = new TreeSet<>( Comparator.comparing(Entry::getKey)); entries.addAll(metadata.getProjectTypes().entrySet()); for (Entry entry : entries) { ProjectType type = entry.getValue(); - report.append(entry.getKey() + " - " + type.getName()); + report.append(entry.getKey()).append(" - ").append(type.getName()); if (!type.getTags().isEmpty()) { reportTags(report, type); } @@ -124,7 +124,7 @@ private void reportTags(StringBuilder report, ProjectType type) { report.append(" ["); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); - report.append(entry.getKey() + ":" + entry.getValue()); + report.append(entry.getKey()).append(":").append(entry.getValue()); if (iterator.hasNext()) { report.append(", "); } @@ -134,13 +134,14 @@ private void reportTags(StringBuilder report, ProjectType type) { private void reportDefaults(StringBuilder report, InitializrServiceMetadata metadata) { - report.append("Defaults:" + NEW_LINE); - report.append("---------" + NEW_LINE); + report.append("Defaults:").append(NEW_LINE); + report.append("---------").append(NEW_LINE); List defaultsKeys = new ArrayList<>(metadata.getDefaults().keySet()); Collections.sort(defaultsKeys); for (String defaultsKey : defaultsKeys) { String defaultsValue = metadata.getDefaults().get(defaultsKey); - report.append(defaultsKey + ": " + defaultsValue + NEW_LINE); + report.append(defaultsKey).append(": ").append(defaultsValue) + .append(NEW_LINE); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/metadata/Metadata.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/metadata/Metadata.java index 07c99aa3ee30..35332eeae0d3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/metadata/Metadata.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/metadata/Metadata.java @@ -108,7 +108,7 @@ public MetadataItemCondition(ItemType itemType, String name, String type, private String createDescription() { StringBuilder description = new StringBuilder(); - description.append("an item named '" + this.name + "'"); + description.append("an item named '").append(this.name).append("'"); if (this.type != null) { description.append(" with dataType:").append(this.type); } @@ -258,7 +258,7 @@ public MetadataHintCondition(String name, private String createDescription() { StringBuilder description = new StringBuilder(); - description.append("a hints name '" + this.name + "'"); + description.append("a hints name '").append(this.name).append("'"); if (!this.valueConditions.isEmpty()) { description.append(" with values:").append(this.valueConditions); } @@ -348,7 +348,7 @@ private static class ItemHintValueCondition extends Condition { private String createDescription() { StringBuilder description = new StringBuilder(); - description.append("value hint at index '" + this.index + "'"); + description.append("value hint at index '").append(this.index).append("'"); if (this.value != null) { description.append(" with value:").append(this.value); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/UnresolvedDependenciesAnalyzer.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/UnresolvedDependenciesAnalyzer.java index e6da01161bf4..60b40a806757 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/UnresolvedDependenciesAnalyzer.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/UnresolvedDependenciesAnalyzer.java @@ -52,11 +52,11 @@ void buildFinished(Project project) { StringBuilder message = new StringBuilder(); message.append("\nDuring the build, one or more dependencies that were " + "declared without a version failed to resolve:\n"); - this.dependenciesWithNoVersion - .forEach((dependency) -> message.append(" " + dependency + "\n")); + this.dependenciesWithNoVersion.forEach((dependency) -> message.append(" ") + .append(dependency).append("\n")); message.append("\nDid you forget to apply the " - + "io.spring.dependency-management plugin to the " + project.getName() - + " project?\n"); + + "io.spring.dependency-management plugin to the "); + message.append(project.getName()).append(" project?\n"); logger.warn(message.toString()); } } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java index a8b69cb09153..b2a90bd69b60 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java @@ -88,7 +88,7 @@ private StringBuilder getStartedMessage(StopWatch stopWatch) { message.append(stopWatch.getTotalTimeSeconds()); try { double uptime = ManagementFactory.getRuntimeMXBean().getUptime() / 1000.0; - message.append(" seconds (JVM running for " + uptime + ")"); + message.append(" seconds (JVM running for ").append(uptime).append(")"); } catch (Throwable ex) { // No JVM time available diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBindException.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBindException.java index 2c475107e147..d3a298c3bc1d 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBindException.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBindException.java @@ -58,8 +58,8 @@ public ConfigurationProperties getAnnotation() { private static String getMessage(Object bean, ConfigurationProperties annotation) { StringBuilder message = new StringBuilder(); - message.append("Could not bind properties to '" - + ClassUtils.getShortName(bean.getClass()) + "' : "); + message.append("Could not bind properties to '"); + message.append(ClassUtils.getShortName(bean.getClass())).append("' : "); message.append("prefix=").append(annotation.prefix()); message.append(", ignoreInvalidFields=").append(annotation.ignoreInvalidFields()); message.append(", ignoreUnknownFields=").append(annotation.ignoreUnknownFields()); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/validation/BindValidationException.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/validation/BindValidationException.java index 3478b4f519df..5ce9b34f0218 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/validation/BindValidationException.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/validation/BindValidationException.java @@ -48,7 +48,7 @@ public ValidationErrors getValidationErrors() { private static String getMessage(ValidationErrors errors) { StringBuilder message = new StringBuilder("Binding validation errors"); if (errors != null) { - message.append(" on " + errors.getName()); + message.append(" on ").append(errors.getName()); errors.getAllErrors().forEach( (error) -> message.append(String.format("%n - %s", error))); } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/diagnostics/analyzer/InvalidConfigurationPropertyValueFailureAnalyzer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/diagnostics/analyzer/InvalidConfigurationPropertyValueFailureAnalyzer.java index 1438450fe304..3be82161360d 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/diagnostics/analyzer/InvalidConfigurationPropertyValueFailureAnalyzer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/diagnostics/analyzer/InvalidConfigurationPropertyValueFailureAnalyzer.java @@ -84,8 +84,9 @@ private void appendDetails(StringBuilder message, InvalidConfigurationPropertyValueException cause, List descriptors) { Descriptor mainDescriptor = descriptors.get(0); - message.append("Invalid value '" + mainDescriptor.getValue() - + "' for configuration property '" + cause.getName() + "'"); + message.append("Invalid value '").append(mainDescriptor.getValue()) + .append("' for configuration property '"); + message.append(cause.getName()).append("'"); mainDescriptor.appendOrigin(message); message.append("."); } @@ -111,8 +112,8 @@ private void appendAdditionalProperties(StringBuilder message, + "property %s:%n%n", (others.size() > 1) ? "sources" : "source")); for (Descriptor other : others) { - message.append("\t- In '" + other.getPropertySource() + "'"); - message.append(" with the value '" + other.getValue() + "'"); + message.append("\t- In '").append(other.getPropertySource()).append("'"); + message.append(" with the value '").append(other.getValue()).append("'"); other.appendOrigin(message); message.append(String.format(".%n")); } @@ -153,7 +154,7 @@ public Object getValue() { public void appendOrigin(StringBuilder message) { if (this.origin != null) { - message.append(" (originating from '" + this.origin + "')"); + message.append(" (originating from '").append(this.origin).append("')"); } } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/YamlPropertySourceLoaderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/YamlPropertySourceLoaderTests.java index bc1b22e7b136..6847950bb5e0 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/YamlPropertySourceLoaderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/YamlPropertySourceLoaderTests.java @@ -55,7 +55,7 @@ public void orderedItems() throws Exception { StringBuilder yaml = new StringBuilder(); List expected = new ArrayList<>(); for (char c = 'a'; c <= 'z'; c++) { - yaml.append(c + ": value" + c + "\n"); + yaml.append(c).append(": value").append(c).append("\n"); expected.add(String.valueOf(c)); } ByteArrayResource resource = new ByteArrayResource(yaml.toString().getBytes()); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java index 93ce49fc3e71..9425d491f6c0 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java @@ -1260,7 +1260,8 @@ public void service(ServletRequest request, ServletResponse response) Object existing = session.getAttribute("boot"); session.setAttribute("boot", value); PrintWriter writer = response.getWriter(); - writer.append(String.valueOf(existing) + ":" + value); + writer.append(String.valueOf(existing)).append(":") + .append(String.valueOf(value)); } }, "/session");