fix erased parameters codegen and parsing
This commit is contained in:
@@ -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 ");
|
||||
|
||||
Reference in New Issue
Block a user