dummy implementation of method type parameters reader and refactoring

This commit is contained in:
Stepan Koltsov
2011-12-15 03:04:21 +04:00
committed by Nikolay Krasko
parent 778fa2ed63
commit eff7903b56
15 changed files with 178 additions and 60 deletions
+6
View File
@@ -22,6 +22,12 @@ public @interface JetMethod {
*/
JetTypeProjection[] returnTypeProjections() default {};
/**
* Serialized method type parameters.
* @return
*/
String typeParameters() default "";
/**
* @return is this type returnTypeNullable
*/
@@ -71,52 +71,56 @@ class TypeInfoParser {
signature.varNames = new HashMap<String, Integer>();
signature.superTypes = new ArrayList<TypeInfo>();
new JetSignatureReader(annotationValue).accept(new JetSignatureExceptionsAdapter() {
int varIndex = 0;
@Override
public void visitFormalTypeParameter(String name, final TypeInfoVariance variance) {
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance) {
final TypeInfoVar typeInfoVar = new TypeInfoVar(signature, signature.variables.size());
signature.varNames.put(name, signature.variables.size());
TypeInfoProjection typeInfoProjection = new TypeInfoProjection() {
@Override
public TypeInfoVariance getVariance() {
return variance;
}
@Override
public TypeInfo getType() {
return typeInfoVar;
}
@Override
public String toString() {
return typeInfoVar.toString();
}
};
signature.variables.add(typeInfoProjection);
// TODO: supers
// TODO: nullability
}
@Override
public JetSignatureVisitor visitClassBound() {
return new SignatureParserJetSignatureAdapter(signature.klazz.getClassLoader(), signature) {
return new JetSignatureExceptionsAdapter() {
@Override
protected void done(TypeInfo typeInfo) {
// TODO
public JetSignatureVisitor visitClassBound() {
return new SignatureParserJetSignatureAdapter(signature.klazz.getClassLoader(), signature) {
@Override
protected void done(TypeInfo typeInfo) {
// TODO
}
};
}
};
}
@Override
public JetSignatureVisitor visitInterfaceBound() {
return new SignatureParserJetSignatureAdapter(signature.klazz.getClassLoader(), signature) {
@Override
protected void done(TypeInfo typeInfo) {
// TODO
public JetSignatureVisitor visitInterfaceBound() {
return new SignatureParserJetSignatureAdapter(signature.klazz.getClassLoader(), signature) {
@Override
protected void done(TypeInfo typeInfo) {
// TODO
}
};
}
@Override
public void visitFormalTypeParameterEnd() {
final TypeInfoVar typeInfoVar = new TypeInfoVar(signature, signature.variables.size());
signature.varNames.put(name, signature.variables.size());
TypeInfoProjection typeInfoProjection = new TypeInfoProjection() {
@Override
public TypeInfoVariance getVariance() {
return variance;
}
@Override
public TypeInfo getType() {
return typeInfoVar;
}
@Override
public String toString() {
return typeInfoVar.toString();
}
};
signature.variables.add(typeInfoProjection);
}
};
}
@@ -7,7 +7,12 @@ import jet.typeinfo.TypeInfoVariance;
*/
public class JetSignatureAdapter implements JetSignatureVisitor {
@Override
public void visitFormalTypeParameter(String name, TypeInfoVariance variance) {
public JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance) {
return this;
}
@Override
public void visitFormalTypeParameterEnd() {
}
@Override
@@ -7,7 +7,12 @@ import jet.typeinfo.TypeInfoVariance;
*/
public class JetSignatureExceptionsAdapter implements JetSignatureVisitor {
@Override
public void visitFormalTypeParameter(String name, TypeInfoVariance variance) {
public JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance) {
throw new IllegalStateException();
}
@Override
public void visitFormalTypeParameterEnd() {
throw new IllegalStateException();
}
@@ -59,17 +59,19 @@ public class JetSignatureReader {
if (end < 0) {
throw new IllegalStateException();
}
v.visitFormalTypeParameter(signature.substring(pos, end), variance);
JetSignatureVisitor parameterVisitor = v.visitFormalTypeParameter(signature.substring(pos, end), variance);
pos = end + 1;
c = signature.charAt(pos);
if (c == 'L' || c == '[' || c == 'T' || c == '?') {
pos = parseType(signature, pos, v.visitClassBound());
pos = parseType(signature, pos, parameterVisitor.visitClassBound());
}
while ((c = signature.charAt(pos++)) == ':') {
pos = parseType(signature, pos, v.visitInterfaceBound());
pos = parseType(signature, pos, parameterVisitor.visitInterfaceBound());
}
parameterVisitor.visitFormalTypeParameterEnd();
} while (c != '>');
} else {
pos = 0;
@@ -30,7 +30,9 @@ public interface JetSignatureVisitor {
*
* @param name the name of the formal parameter.
*/
void visitFormalTypeParameter(String name, TypeInfoVariance variance);
JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance);
void visitFormalTypeParameterEnd();
/**
* Visits the class bound of the last visited formal type parameter.
@@ -43,7 +43,7 @@ public class JetSignatureWriter implements JetSignatureVisitor {
// ------------------------------------------------------------------------
@Override
public void visitFormalTypeParameter(final String name, TypeInfoVariance variance) {
public JetSignatureVisitor visitFormalTypeParameter(final String name, TypeInfoVariance variance) {
if (!hasFormals) {
hasFormals = true;
buf.append('<');
@@ -62,6 +62,11 @@ public class JetSignatureWriter implements JetSignatureVisitor {
}
buf.append(name);
buf.append(':');
return this;
}
@Override
public void visitFormalTypeParameterEnd() {
}
@Override