fix erased parameters codegen and parsing

This commit is contained in:
Stepan Koltsov
2012-01-24 23:11:14 +04:00
parent 745759861d
commit 309b6b3e0e
12 changed files with 40 additions and 15 deletions
@@ -74,7 +74,7 @@ class TypeInfoParser {
new JetSignatureReader(annotationValue).accept(new JetSignatureExceptionsAdapter() {
@Override
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance) {
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance, boolean reified) {
// TODO: nullability
@@ -7,7 +7,7 @@ import jet.typeinfo.TypeInfoVariance;
*/
public class JetSignatureAdapter implements JetSignatureVisitor {
@Override
public JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance) {
public JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance, boolean reified) {
return this;
}
@@ -7,7 +7,7 @@ import jet.typeinfo.TypeInfoVariance;
*/
public class JetSignatureExceptionsAdapter implements JetSignatureVisitor {
@Override
public JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance) {
public JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance, boolean reified) {
throw new IllegalStateException();
}
@@ -49,6 +49,12 @@ public class JetSignatureReader {
pos = 1;
do {
TypeInfoVariance variance;
boolean reified = true;
if (signature.substring(pos).startsWith("erased ")) {
reified = false;
pos += "erased ".length();
}
if (signature.substring(pos).startsWith("in ")) {
variance = TypeInfoVariance.IN;
pos += "in ".length();
@@ -67,7 +73,7 @@ public class JetSignatureReader {
if (typeParameterName.isEmpty()) {
throw new IllegalStateException("incorrect signature: " + signature);
}
JetSignatureVisitor parameterVisitor = v.visitFormalTypeParameter(typeParameterName, variance);
JetSignatureVisitor parameterVisitor = v.visitFormalTypeParameter(typeParameterName, variance, reified);
pos = end + 1;
c = signature.charAt(pos);
@@ -28,9 +28,11 @@ public interface JetSignatureVisitor {
/**
* Visits a formal type parameter.
*
* TODO should not store reified flag in signature
*
* @param name the name of the formal parameter.
*/
JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance);
JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance, boolean reified);
void visitFormalTypeParameterEnd();
@@ -43,11 +43,14 @@ public class JetSignatureWriter implements JetSignatureVisitor {
// ------------------------------------------------------------------------
@Override
public JetSignatureVisitor visitFormalTypeParameter(final String name, TypeInfoVariance variance) {
public JetSignatureVisitor visitFormalTypeParameter(final String name, TypeInfoVariance variance, boolean reified) {
if (!hasFormals) {
hasFormals = true;
buf.append('<');
}
if (!reified) {
buf.append("erased ");
}
switch (variance) {
case OUT:
buf.append("out ");