java.lang.String in signature should serialized and mapped back to java.lang.String

This commit is contained in:
Stepan Koltsov
2012-01-24 00:38:26 +04:00
parent f21ad2f536
commit 614ee5d690
20 changed files with 82 additions and 20 deletions
@@ -167,8 +167,9 @@ class TypeInfoParser {
private List<TypeInfoProjection> projections;
@Override
public void visitClassType(String name, boolean nullable) {
public void visitClassType(String name, boolean nullable, boolean forceReal) {
try {
// TODO: real flag
klass = classLoader.loadClass(name.replace('/', '.'));
} catch (ClassNotFoundException e) {
throw new RuntimeException();
@@ -64,7 +64,7 @@ public class JetSignatureAdapter implements JetSignatureVisitor {
}
@Override
public void visitClassType(String name, boolean nullable) {
public void visitClassType(String name, boolean nullable, boolean forceReal) {
}
@Override
@@ -67,7 +67,7 @@ public class JetSignatureExceptionsAdapter implements JetSignatureVisitor {
}
@Override
public void visitClassType(String name, boolean nullable) {
public void visitClassType(String name, boolean nullable, boolean forceReal) {
throw new IllegalStateException();
}
@@ -149,7 +149,9 @@ public class JetSignatureReader {
v.visitTypeVariable(signature.substring(pos, end), nullable);
return end + 1;
default: // case 'L':
case 'L':
case 'M':
boolean forceReal = signature.charAt(pos - 1) == 'M';
start = pos;
visited = false;
inner = false;
@@ -162,7 +164,7 @@ public class JetSignatureReader {
if (inner) {
v.visitInnerClassType(name, nullable);
} else {
v.visitClassType(name, nullable);
v.visitClassType(name, nullable, forceReal);
}
}
if (c == ';') {
@@ -179,7 +181,7 @@ public class JetSignatureReader {
if (inner) {
v.visitInnerClassType(name, nullable);
} else {
v.visitClassType(name, nullable);
v.visitClassType(name, nullable, forceReal);
}
visited = true;
top: for (;;) {
@@ -205,6 +207,8 @@ public class JetSignatureReader {
}
}
}
default:
throw new IllegalStateException();
}
}
@@ -113,7 +113,7 @@ public interface JetSignatureVisitor {
*
* @param name the internal name of the class or interface.
*/
void visitClassType(String name, boolean nullable);
void visitClassType(String name, boolean nullable, boolean forceReal);
/**
* Visits an inner class.
@@ -145,9 +145,9 @@ public class JetSignatureWriter implements JetSignatureVisitor {
}
@Override
public void visitClassType(final String name, boolean nullable) {
public void visitClassType(final String name, boolean nullable, boolean forceReal) {
visitNullabe(nullable);
buf.append('L');
buf.append(forceReal ? 'M' : 'L');
buf.append(name);
argumentStack *= 2;
}