reading varargs

generics do not work yet:

===
fun <P> varargGeneric(a: Int, vararg b: P) = 1
===
This commit is contained in:
Stepan Koltsov
2011-12-20 23:28:46 +04:00
parent 6bee77715d
commit c858de758e
4 changed files with 24 additions and 4 deletions
@@ -1,17 +1,18 @@
package org.jetbrains.jet.lang.resolve.java; package org.jetbrains.jet.lang.resolve.java;
import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.rt.signature.JetSignatureVisitor;
import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.ErrorUtils;
import org.jetbrains.jet.lang.types.JetStandardClasses; import org.jetbrains.jet.lang.types.JetStandardClasses;
import org.jetbrains.jet.lang.types.JetStandardLibrary; import org.jetbrains.jet.lang.types.JetStandardLibrary;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.JetTypeImpl; import org.jetbrains.jet.lang.types.JetTypeImpl;
import org.jetbrains.jet.lang.types.TypeProjection; import org.jetbrains.jet.lang.types.TypeProjection;
import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.lang.types.Variance; import org.jetbrains.jet.lang.types.Variance;
import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter;
import org.jetbrains.jet.rt.signature.JetSignatureVisitor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -119,6 +120,17 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd
}; };
} }
@Override
public JetSignatureVisitor visitArrayType(final boolean nullable) {
return new JetTypeJetSignatureReader(javaDescriptorResolver, jetStandardLibrary) {
@Override
protected void done(@NotNull JetType jetType) {
JetType arrayType = TypeUtils.makeNullableAsSpecified(jetStandardLibrary.getArrayType(jetType), nullable);
JetTypeJetSignatureReader.this.done(arrayType);
}
};
}
@Override @Override
public void visitEnd() { public void visitEnd() {
JetType jetType = new JetTypeImpl( JetType jetType = new JetTypeImpl(
@@ -0,0 +1,3 @@
namespace test
fun varargCharSequence(a: Int, vararg b: java.lang.CharSequence) = 1
@@ -0,0 +1,3 @@
namespace test
fun varargInt(a: Int, vararg b: Int) = 1
@@ -256,11 +256,13 @@ public class ReadClassDataTest extends UsefulTestCase {
} }
private void serialize(ValueParameterDescriptor valueParameter, StringBuilder sb) { private void serialize(ValueParameterDescriptor valueParameter, StringBuilder sb) {
if (valueParameter.getVarargElementType() != null) {
sb.append("vararg ");
}
sb.append(valueParameter.getName()); sb.append(valueParameter.getName());
sb.append(": "); sb.append(": ");
if (valueParameter.getVarargElementType() != null) { if (valueParameter.getVarargElementType() != null) {
sb.append("vararg "); serialize(valueParameter.getVarargElementType(), sb);
serialize(valueParameter.getVarargElementType());
} else { } else {
serialize(valueParameter.getOutType(), sb); serialize(valueParameter.getOutType(), sb);
} }