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;
int start, end;
boolean visited, inner;
String name;
int start;
int end;
boolean visited;
boolean inner;
boolean nullable = false;
boolean nullable;
if (signature.charAt(pos) == '?') {
nullable = true;
pos++;
}
else {
nullable = false;
}
switch (c = signature.charAt(pos++)) {
case 'Z':
@@ -186,13 +190,7 @@ public class JetSignatureReader {
case '.':
case ';':
if (!visited) {
name = signature.substring(start, pos - 1);
if (inner) {
v.visitInnerClassType(name, nullable);
}
else {
v.visitClassType(name, nullable, forceReal);
}
parseTypeConstructor(signature, v, start, pos, inner, nullable, forceReal);
}
if (c == ';') {
v.visitEnd();
@@ -204,35 +202,12 @@ public class JetSignatureReader {
break;
case '<':
name = signature.substring(start, pos - 1);
if (inner) {
v.visitInnerClassType(name, nullable);
}
else {
v.visitClassType(name, nullable, forceReal);
}
parseTypeConstructor(signature, v, start, pos, inner, nullable, forceReal);
visited = true;
top: while (true) {
switch (c = signature.charAt(pos)) {
case '>':
break top;
case '*':
++pos;
v.visitTypeArgument();
break;
case '+':
case '-':
pos = parseType(signature,
pos + 1,
v.visitTypeArgument(JetSignatureVariance.parseVariance(c)));
break;
default:
pos = parseType(signature,
pos,
v.visitTypeArgument(JetSignatureVariance.INVARIANT));
break;
}
}
pos = parseTypeArguments(signature, pos, v);
default:
break;
}
}
default:
@@ -240,5 +215,46 @@ public class JetSignatureReader {
}
}
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) {
v.visitInnerClassType(name, nullable);
}
else {
v.visitClassType(name, nullable, forceReal);
}
}
private static int parseTypeArguments(String signature, int pos, JetSignatureVisitor v) {
char c;
while (true) {
switch (c = signature.charAt(pos)) {
case '>':
return pos;
case '*':
++pos;
v.visitTypeArgument();
break;
case '+':
case '-':
pos = parseType(signature,
pos + 1,
v.visitTypeArgument(JetSignatureVariance.parseVariance(c)));
break;
default:
pos = parseType(signature,
pos,
v.visitTypeArgument(JetSignatureVariance.INVARIANT));
break;
}
}
}
}