Bug 532088 - avoid using String(String) or String(String.substring())
1) The String.substring() in 1.4 kept original char[] reference in the
new String, which was of course not good. In 1.8+ it always copies the
portion of char array.
So all constructs can be safely changed:
new String(s.substring(x)) -> s.substring(x)
new String(s.substring(x,y)) -> s.substring(x,y)
2) String(String) in 1.4 copied the original char array if the size was
different, so by new String(String) one tried to avoid memory leaks. In
1.8+ new String(String) simply reuses the original pointers, so no gain
here and we create new (wasted) String reference.
So except few places where a *different* String *pointer* is required,
all constructs can be safely changed:
new String(string) -> string
new String(stringBuffer.toString()) -> stringBuffer.toString()
Change-Id: I061d1a82185605d0fba16a8885752d5da948ed20
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/util/AptConfig.java b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/util/AptConfig.java
index 9615a79..3585ce1 100644
--- a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/util/AptConfig.java
+++ b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/util/AptConfig.java
@@ -633,25 +633,25 @@
if (equalsAt > 0) {
if (spaceAt < 0 || equalsAt < spaceAt) {
// there is an equals, so there is a value.
- key = new String(_s.substring(_start, equalsAt));
+ key = _s.substring(_start, equalsAt);
_start = equalsAt + 1;
_hasVal = (_start < _s.length());
}
else {
// the next thing is a space, so this is a valueless key
- key = new String(_s.substring(_start, spaceAt));
+ key = _s.substring(_start, spaceAt);
_start = spaceAt + 1;
}
}
else {
if (spaceAt < 0) {
// no equals sign and no spaces: a valueless key, up to the end of the string.
- key = new String(_s.substring(_start));
+ key = _s.substring(_start);
_start = _s.length();
}
else {
// the next thing is a space, so this is a valueless key
- key = new String(_s.substring(_start, spaceAt));
+ key = _s.substring(_start, spaceAt);
_start = spaceAt + 1;
}
}
@@ -685,7 +685,7 @@
++end;
}
- return new String(_s.substring(start, end));
+ return _s.substring(start, end);
}
}
diff --git a/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java b/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
index b2b6c5e..8b0a0c4 100644
--- a/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
+++ b/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
@@ -640,7 +640,7 @@
printErr(this.main.bind(
severity,
Integer.toString(globalErrorCount),
- new String(fileName)));
+ fileName));
final String errorReportSource = errorReportSource(problem, null, 0);
this.printlnErr(errorReportSource);
this.printlnErr(problem.getMessage());
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblemFactory.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblemFactory.java
index 5c0b861..d6007e3 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblemFactory.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblemFactory.java
@@ -199,8 +199,7 @@
}
}
- // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=120410
- return new String(output.toString());
+ return output.toString();
}
/**
* @param problem CategorizedProblem
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java
index 0032558..dea9e92 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java
@@ -108,8 +108,7 @@
* @return the serialized
*/
public String getResult() {
- // convert to a string, but lose any extra space in the string buffer by copying
- return new String(this.result.toString());
+ return this.result.toString();
}
/**
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryType.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryType.java
index 2e1fcec..0fb4862 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryType.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryType.java
@@ -509,7 +509,7 @@
if (superclassName == null) {
return null;
}
- return new String(Signature.createTypeSignature(ClassFile.translatedName(superclassName), true));
+ return Signature.createTypeSignature(ClassFile.translatedName(superclassName), true);
}
}
@@ -605,7 +605,7 @@
names= ClassFile.translatedNames(names);
String[] strings= new String[length];
for (int i= 0; i < length; i++) {
- strings[i]= new String(Signature.createTypeSignature(names[i], true));
+ strings[i]= Signature.createTypeSignature(names[i], true);
}
return strings;
}
@@ -1008,7 +1008,7 @@
typeName.insert(0, '.');
}
}
- typeQualifiedName = new String(typeName.toString());
+ typeQualifiedName = typeName.toString();
} else {
typeQualifiedName = getElementName();
}
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java
index 2194d57..dc02a21 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java
@@ -63,9 +63,9 @@
public IImportDeclaration getImport(String importName) {
int index = importName.indexOf(".*"); ///$NON-NLS-1$
boolean isOnDemand = index != -1;
- if (isOnDemand)
- // make sure to copy the string (so that it doesn't hold on the underlying char[] that might be much bigger than necessary)
- importName = new String(importName.substring(0, index));
+ if (isOnDemand) {
+ importName = importName.substring(0, index);
+ }
return getImport(importName, isOnDemand);
}
protected IImportDeclaration getImport(String importName, boolean isOnDemand) {
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java
index 5859fc2..b4cd1f5 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java
@@ -3388,8 +3388,7 @@
}
public synchronized String intern(String s) {
- // make sure to copy the string (so that it doesn't hold on the underlying char[] that might be much bigger than necessary)
- return (String) this.stringSymbols.add(new String(s));
+ return (String) this.stringSymbols.add(s);
// Note1: String#intern() cannot be used as on some VMs this prevents the string from being garbage collected
// Note 2: Instead of using a WeakHashset, one could use a WeakHashMap with the following implementation
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
index 9e2e538..634f88d 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
@@ -447,7 +447,7 @@
buffer.insert(0, '.');
}
}
- typeQualifiedName = new String(buffer.toString());
+ typeQualifiedName = buffer.toString();
} else {
typeQualifiedName = this.type.getElementName();
}
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceType.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceType.java
index 488a1f8..561c208 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceType.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceType.java
@@ -512,7 +512,7 @@
if (superclassName == null) {
return null;
}
- return new String(Signature.createTypeSignature(superclassName, false));
+ return Signature.createTypeSignature(superclassName, false);
}
/**
@@ -538,7 +538,7 @@
}
String[] strings= new String[names.length];
for (int i= 0; i < names.length; i++) {
- strings[i]= new String(Signature.createTypeSignature(names[i], false));
+ strings[i]= Signature.createTypeSignature(names[i], false);
}
return strings;
}
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java
index 573e406..f183b60 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java
@@ -3342,7 +3342,7 @@
}
int length = args.length;
for(int i = startingIndex; i< length ; i++){
- args[i] = new String(paramTypeSignatures[i-startingIndex]);
+ args[i] = paramTypeSignatures[i-startingIndex];
}
method = type.getMethod(new String(selector), args);
diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/indexer/Indexer.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/indexer/Indexer.java
index 953f14d..89aab20 100644
--- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/indexer/Indexer.java
+++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/indexer/Indexer.java
@@ -564,7 +564,7 @@
NdType nextDeletion = toDelete.getType(numChildren - 1);
if (DEBUG_INSERTIONS) {
Package.logInfo("Deleting " + nextDeletion.getTypeId().getFieldDescriptor().getString() + " from " //$NON-NLS-1$//$NON-NLS-2$
- + new String(toDelete.getLocation().getString()) + " " + toDelete.address); //$NON-NLS-1$
+ + toDelete.getLocation().getString() + " " + toDelete.address); //$NON-NLS-1$
}
nextDeletion.delete();
} finally {
diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/ManifestIndexer.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/ManifestIndexer.java
index d9cf564..07a34e4 100644
--- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/ManifestIndexer.java
+++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/ManifestIndexer.java
@@ -15,7 +15,7 @@
public void indexDocument() {
byte[] entry = this.document.getByteContents();
String text = new String(entry, Charset.defaultCharset());
- String[] kv = new String(text).split(":"); //$NON-NLS-1$
+ String[] kv = text.split(":"); //$NON-NLS-1$
if (kv != null && kv.length > 1 && kv[0] != null && kv[1] != null) {
if (kv[0].equals(AUTOMATIC_MODULE_NAME)) {
addModuleDeclaration(kv[1].toCharArray());
diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PossibleMatch.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PossibleMatch.java
index 65ae4ca..4aefe8d 100644
--- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PossibleMatch.java
+++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PossibleMatch.java
@@ -86,7 +86,7 @@
}
}
} else if (this.autoModuleName != null) { // fab a module
- contents = new String("module " + this.autoModuleName + "{}").toCharArray(); //$NON-NLS-1$//$NON-NLS-2$
+ contents = ("module " + this.autoModuleName + "{}").toCharArray(); //$NON-NLS-1$//$NON-NLS-2$
this.sourceFileName = "module-info.java"; //$NON-NLS-1$
this.compoundName = new char[][] { "module-info".toCharArray()}; //$NON-NLS-1$
} else {