aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Praml <praml@foconis.de>2018-07-08 21:46:12 +0200
committerRoel Spilker <r.spilker@gmail.com>2018-08-20 20:46:31 +0200
commit40570f7950dc05f90bea05396c9d23d426fe99ba (patch)
tree10e7f8c0112392d54d279c7aaf4fb12da9cb6c06
parent100cff228d0f4d68219460aefe89b70877b726dc (diff)
downloadlombok-40570f7950dc05f90bea05396c9d23d426fe99ba.tar.gz
lombok-40570f7950dc05f90bea05396c9d23d426fe99ba.tar.bz2
lombok-40570f7950dc05f90bea05396c9d23d426fe99ba.zip
optimized the to/fromQualifiedName method
-rw-r--r--src/utils/lombok/eclipse/Eclipse.java24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/utils/lombok/eclipse/Eclipse.java b/src/utils/lombok/eclipse/Eclipse.java
index 5ef33086..943a7a7a 100644
--- a/src/utils/lombok/eclipse/Eclipse.java
+++ b/src/utils/lombok/eclipse/Eclipse.java
@@ -56,6 +56,8 @@ public class Eclipse {
*/
public static final int ECLIPSE_DO_NOT_TOUCH_FLAG = ASTNode.Bit24;
+ private static final Pattern SPLIT_AT_DOT = Pattern.compile("\\.");
+
private Eclipse() {
//Prevent instantiation
}
@@ -65,19 +67,25 @@ public class Eclipse {
* but we need to deal with it. This turns [[java][lang][String]] into "java.lang.String".
*/
public static String toQualifiedName(char[][] typeName) {
- int len = typeName.length - 1;
+ int len = typeName.length - 1; // number of dots
+ if (len == 0) return new String(typeName[0]);
+
for (char[] c : typeName) len += c.length;
- StringBuilder sb = new StringBuilder(len);
- boolean first = true;
- for (char[] c : typeName) {
- sb.append(first ? "" : ".").append(c);
- first = false;
+ char[] ret = new char[len];
+ char[] part = typeName[0];
+ System.arraycopy(part, 0, ret, 0, part.length);
+ int pos = part.length;
+ for (int i = 1; i < typeName.length; i++) {
+ ret[pos++] = '.';
+ part = typeName[i];
+ System.arraycopy(part, 0, ret, pos, part.length);
+ pos += part.length;
}
- return sb.toString();
+ return new String(ret);
}
public static char[][] fromQualifiedName(String typeName) {
- String[] split = typeName.split("\\.");
+ String[] split = SPLIT_AT_DOT.split(typeName);
char[][] result = new char[split.length][];
for (int i = 0; i < split.length; i++) {
result[i] = split[i].toCharArray();