All, Konstantin Kolinko pointed out that some code in the JDTCompiler was particularly ugly, so I took a shot at improving it.
Unfortunately, I don't have much experience with that component so I
didn't want to commit anything. Can I get a review on this patch?
I'm basically just replacing string concatenation with StringBuilder but
I'm also changing the way that the "separator" characters are added a bit.
There's a similar optimization that could be made under "new
ICompilerRequestor() {" to remove additional looped string concatenation
in that source file. If this patch looks okay to a few folks, I'll make
a similar change there and commit the change.
Since this is not really a "bug" per se, I decided not to create a BZ
issue. If it would be easier for everyone if I attached the patch to a
BZ issue I'm happy to do that as well.
Thanks,
-chris
Index: java/org/apache/jasper/compiler/JDTCompiler.java
===================================================================
--- java/org/apache/jasper/compiler/JDTCompiler.java (revision 1592807)
+++ java/org/apache/jasper/compiler/JDTCompiler.java (working copy)
@@ -156,14 +156,13 @@
@Override
public NameEnvironmentAnswer
findType(char[][] compoundTypeName) {
- String result = "";
- String sep = "";
+ StringBuilder result = new StringBuilder();
for (int i = 0; i < compoundTypeName.length; i++) {
- result += sep;
- result += new String(compoundTypeName[i]);
- sep = ".";
+ if(i > 0)
+ result.append('.');
+ result.append(compoundTypeName[i]);
}
- return findType(result);
+ return findType(result.toString());
}
@Override
@@ -170,16 +169,17 @@
public NameEnvironmentAnswer
findType(char[] typeName,
char[][] packageName) {
- String result = "";
- String sep = "";
- for (int i = 0; i < packageName.length; i++) {
- result += sep;
- result += new String(packageName[i]);
- sep = ".";
+ StringBuilder result = new StringBuilder();
+ int i=0;
+ for ( ; i < packageName.length; i++) {
+ if(i > 0)
+ result.append('.');
+ result.append(packageName[i]);
}
- result += sep;
- result += new String(typeName);
- return findType(result);
+ if(i > 0)
+ result.append('.');
+ result.append(typeName);
+ return findType(result.toString());
}
private NameEnvironmentAnswer findType(String className) {
@@ -234,25 +234,26 @@
@Override
public boolean isPackage(char[][] parentPackageName,
char[] packageName) {
- String result = "";
- String sep = "";
+ StringBuilder result = new StringBuilder();
+ int i=0;
if (parentPackageName != null) {
- for (int i = 0; i < parentPackageName.length;
i++) {
- result += sep;
- String str = new String(parentPackageName[i]);
- result += str;
- sep = ".";
+ for (; i < parentPackageName.length; i++) {
+ if(i > 0)
+ result.append('.');
+ result.append(parentPackageName[i]);
}
}
- String str = new String(packageName);
- if (Character.isUpperCase(str.charAt(0))) {
- if (!isPackage(result)) {
+
+ if (Character.isUpperCase(packageName[0])) {
+ if (!isPackage(result.toString())) {
return false;
}
}
- result += sep;
- result += str;
- return isPackage(result);
+ if(i > 0)
+ result.append('.');
+ result.append(packageName);
+
+ return isPackage(result.toString());
}
@Override
signature.asc
Description: OpenPGP digital signature
