speedup descriptors parsing, avoid using regexp split

master
Egor.Ushakov 7 years ago
parent 7868c0e83a
commit 6fc7ae736a
  1. 43
      src/org/jetbrains/java/decompiler/struct/consts/LinkConstant.java

@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2017 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.
@ -135,31 +135,32 @@ public class LinkConstant extends PooledConstant {
}
private void resolveDescriptor(String descr) {
int parenth = descr.indexOf(')');
if (descr.length() < 2 || parenth < 0 || descr.charAt(0) != '(') {
throw new IllegalArgumentException("Invalid descriptor: " + descr);
}
String[] arr = descr.split("[()]");
String par = arr[1];
int index = 0, counter = 0;
int len = par.length();
while (index < len) {
char c = par.charAt(index);
if (c == 'L') {
index = par.indexOf(";", index);
}
else if (c == '[') {
int counter = 0;
if (parenth > 1) { // params
int index = 1;
while (index < parenth) {
char c = descr.charAt(index);
if (c == 'L') {
index = descr.indexOf(";", index);
}
else if (c == '[') {
index++;
continue;
}
counter++;
index++;
continue;
}
counter++;
index++;
}
paramCount = counter;
isVoid = "V".equals(arr[2]);
returnCategory2 = ("D".equals(arr[2]) || "J".equals(arr[2]));
}
char retChar = descr.charAt(parenth + 1);
isVoid = retChar == 'V';
returnCategory2 = (retChar == 'D') || (retChar == 'J');
}
}

Loading…
Cancel
Save