refactoring

extracted methods parseTypeConstructor, parseTypeArguments
This commit is contained in:
Svetlana Isakova
2012-09-17 13:54:22 +04:00
parent c0334094ba
commit 3fad7a269b
@@ -144,15 +144,19 @@ public class JetSignatureReader {
} }
char c; char c;
int start, end; int start;
boolean visited, inner; int end;
String name; boolean visited;
boolean inner;
boolean nullable = false; boolean nullable;
if (signature.charAt(pos) == '?') { if (signature.charAt(pos) == '?') {
nullable = true; nullable = true;
pos++; pos++;
} }
else {
nullable = false;
}
switch (c = signature.charAt(pos++)) { switch (c = signature.charAt(pos++)) {
case 'Z': case 'Z':
@@ -186,13 +190,7 @@ public class JetSignatureReader {
case '.': case '.':
case ';': case ';':
if (!visited) { if (!visited) {
name = signature.substring(start, pos - 1); parseTypeConstructor(signature, v, start, pos, inner, nullable, forceReal);
if (inner) {
v.visitInnerClassType(name, nullable);
}
else {
v.visitClassType(name, nullable, forceReal);
}
} }
if (c == ';') { if (c == ';') {
v.visitEnd(); v.visitEnd();
@@ -204,18 +202,43 @@ public class JetSignatureReader {
break; break;
case '<': case '<':
name = signature.substring(start, pos - 1); parseTypeConstructor(signature, v, start, pos, inner, nullable, forceReal);
visited = true;
pos = parseTypeArguments(signature, pos, v);
default:
break;
}
}
default:
throw new IllegalStateException();
}
}
private static void parseTypeConstructor(
String signature,
JetSignatureVisitor v,
int start,
int pos,
boolean inner,
boolean nullable,
boolean forceReal
) {
String name = signature.substring(start, pos - 1);
if (inner) { if (inner) {
v.visitInnerClassType(name, nullable); v.visitInnerClassType(name, nullable);
} }
else { else {
v.visitClassType(name, nullable, forceReal); v.visitClassType(name, nullable, forceReal);
} }
visited = true; }
top: while (true) {
private static int parseTypeArguments(String signature, int pos, JetSignatureVisitor v) {
char c;
while (true) {
switch (c = signature.charAt(pos)) { switch (c = signature.charAt(pos)) {
case '>': case '>':
break top; return pos;
case '*': case '*':
++pos; ++pos;
v.visitTypeArgument(); v.visitTypeArgument();
@@ -234,11 +257,4 @@ public class JetSignatureReader {
} }
} }
} }
}
default:
throw new IllegalStateException();
}
}
} }