Saving and loading projection kind of array element type in bytecode.

This commit is contained in:
Evgeny Gerashchenko
2012-11-20 16:45:44 +04:00
parent 21e97b408c
commit d37bdbc07d
16 changed files with 72 additions and 13 deletions
@@ -75,7 +75,7 @@ public class JetSignatureAdapter implements JetSignatureVisitor {
}
@Override
public JetSignatureVisitor visitArrayType(boolean nullable) {
public JetSignatureVisitor visitArrayType(boolean nullable, JetSignatureVariance wildcard) {
return this;
}
@@ -78,7 +78,7 @@ public class JetSignatureExceptionsAdapter implements JetSignatureVisitor {
}
@Override
public JetSignatureVisitor visitArrayType(boolean nullable) {
public JetSignatureVisitor visitArrayType(boolean nullable, JetSignatureVariance wildcard) {
throw new IllegalStateException();
}
@@ -172,7 +172,13 @@ public class JetSignatureReader {
return pos;
case '[':
return parseType(signature, pos, v.visitArrayType(nullable));
switch (c = signature.charAt(pos)) {
case '+':
case '-':
return parseType(signature, pos + 1, v.visitArrayType(nullable, JetSignatureVariance.parseVariance(c)));
default:
return parseType(signature, pos, v.visitArrayType(nullable, JetSignatureVariance.INVARIANT));
}
case 'T':
end = signature.indexOf(';', pos);
@@ -123,7 +123,7 @@ public interface JetSignatureVisitor {
* @return a non null visitor to visit the signature of the array element
* type.
*/
JetSignatureVisitor visitArrayType(boolean nullable);
JetSignatureVisitor visitArrayType(boolean nullable, JetSignatureVariance wildcard);
/**
* Starts the visit of a signature corresponding to a class or interface
@@ -157,9 +157,12 @@ public class JetSignatureWriter implements JetSignatureVisitor {
}
@Override
public JetSignatureWriter visitArrayType(boolean nullable) {
public JetSignatureWriter visitArrayType(boolean nullable, JetSignatureVariance wildcard) {
visitNullabe(nullable);
buf.append('[');
if (wildcard != JetSignatureVariance.INVARIANT) {
buf.append(wildcard.getC());
}
return this;
}
@@ -195,7 +198,7 @@ public class JetSignatureWriter implements JetSignatureVisitor {
++argumentStack;
buf.append('<');
}
if (variance.getC() != '=') {
if (variance != JetSignatureVariance.INVARIANT) {
buf.append(variance.getC());
}
return this;