parse method in/out parameters
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
package org.jetbrains.jet.codegen;
|
package org.jetbrains.jet.codegen;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfoVariance;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.JetSignatureUtils;
|
||||||
import org.jetbrains.jet.rt.signature.JetSignatureAdapter;
|
import org.jetbrains.jet.rt.signature.JetSignatureAdapter;
|
||||||
import org.jetbrains.jet.rt.signature.JetSignatureReader;
|
import org.jetbrains.jet.rt.signature.JetSignatureReader;
|
||||||
import org.jetbrains.jet.rt.signature.JetSignatureWriter;
|
import org.jetbrains.jet.rt.signature.JetSignatureWriter;
|
||||||
@@ -184,21 +184,12 @@ public class BothSignatureWriter {
|
|||||||
signatureVisitor().visitTypeVariable(name);
|
signatureVisitor().visitTypeVariable(name);
|
||||||
jetSignatureWriter.visitTypeVariable(name, nullable);
|
jetSignatureWriter.visitTypeVariable(name, nullable);
|
||||||
}
|
}
|
||||||
|
|
||||||
private TypeInfoVariance translateVariance(Variance variance) {
|
|
||||||
switch (variance) {
|
|
||||||
case IN_VARIANCE: return TypeInfoVariance.IN;
|
|
||||||
case OUT_VARIANCE: return TypeInfoVariance.OUT;
|
|
||||||
case INVARIANT: return TypeInfoVariance.INVARIANT;
|
|
||||||
default: throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeFormalTypeParameter(final String name, Variance variance) {
|
public void writeFormalTypeParameter(final String name, Variance variance) {
|
||||||
checkTopLevel();
|
checkTopLevel();
|
||||||
|
|
||||||
signatureVisitor().visitFormalTypeParameter(name);
|
signatureVisitor().visitFormalTypeParameter(name);
|
||||||
jetSignatureWriter.visitFormalTypeParameter(name, translateVariance(variance));
|
jetSignatureWriter.visitFormalTypeParameter(name, JetSignatureUtils.translateVariance(variance));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeFormalTypeParameterEnd() {
|
public void writeFormalTypeParameterEnd() {
|
||||||
|
|||||||
+2
-2
@@ -547,7 +547,7 @@ public class JavaDescriptorResolver {
|
|||||||
final List<TypeParameterDescriptor> r = new ArrayList<TypeParameterDescriptor>();
|
final List<TypeParameterDescriptor> r = new ArrayList<TypeParameterDescriptor>();
|
||||||
new JetSignatureReader(jetSignature).acceptFormalTypeParametersOnly(new JetSignatureExceptionsAdapter() {
|
new JetSignatureReader(jetSignature).acceptFormalTypeParametersOnly(new JetSignatureExceptionsAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public JetSignatureVisitor visitFormalTypeParameter(final String name, TypeInfoVariance variance) {
|
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance) {
|
||||||
|
|
||||||
return new JetSignatureExceptionsAdapter() {
|
return new JetSignatureExceptionsAdapter() {
|
||||||
int index = 0;
|
int index = 0;
|
||||||
@@ -578,7 +578,7 @@ public class JavaDescriptorResolver {
|
|||||||
functionDescriptor,
|
functionDescriptor,
|
||||||
Collections.<AnnotationDescriptor>emptyList(), // TODO: wrong
|
Collections.<AnnotationDescriptor>emptyList(), // TODO: wrong
|
||||||
true, // TODO: wrong
|
true, // TODO: wrong
|
||||||
Variance.INVARIANT, // TOOD: wrong
|
JetSignatureUtils.translateVariance(variance),
|
||||||
name,
|
name,
|
||||||
++index);
|
++index);
|
||||||
r.add(typeParameter);
|
r.add(typeParameter);
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package org.jetbrains.jet.lang.resolve.java;
|
||||||
|
|
||||||
|
import jet.typeinfo.TypeInfoVariance;
|
||||||
|
import org.jetbrains.jet.lang.types.Variance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Stepan Koltsov
|
||||||
|
*/
|
||||||
|
public class JetSignatureUtils {
|
||||||
|
|
||||||
|
static {
|
||||||
|
if (Variance.INVARIANT.ordinal() != TypeInfoVariance.INVARIANT.ordinal())
|
||||||
|
throw new IllegalStateException();
|
||||||
|
if (Variance.IN_VARIANCE.ordinal() != TypeInfoVariance.IN.ordinal())
|
||||||
|
throw new IllegalStateException();
|
||||||
|
if (Variance.OUT_VARIANCE.ordinal() != TypeInfoVariance.OUT.ordinal())
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TypeInfoVariance translateVariance(Variance variance) {
|
||||||
|
return TypeInfoVariance.values()[variance.ordinal()];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Variance translateVariance(TypeInfoVariance variance) {
|
||||||
|
return Variance.values()[variance.ordinal()];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
namespace test
|
||||||
|
|
||||||
|
fun <in T> f() = 1
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
namespace test
|
||||||
|
|
||||||
|
fun <out T> f() = 1
|
||||||
@@ -237,7 +237,12 @@ public class ReadClassDataTest extends UsefulTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void serialize(Variance variance, StringBuilder sb) {
|
private void serialize(Variance variance, StringBuilder sb) {
|
||||||
sb.append(variance);
|
if (variance == Variance.INVARIANT) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
sb.append(variance);
|
||||||
|
sb.append(' ');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void serialize(JetType type, StringBuilder sb) {
|
private void serialize(JetType type, StringBuilder sb) {
|
||||||
@@ -318,9 +323,7 @@ public class ReadClassDataTest extends UsefulTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void serialize(TypeParameterDescriptor param, StringBuilder sb) {
|
private void serialize(TypeParameterDescriptor param, StringBuilder sb) {
|
||||||
if (param.getVariance() != Variance.INVARIANT) {
|
serialize(param.getVariance(), sb);
|
||||||
serialize(param.getVariance(), sb);
|
|
||||||
}
|
|
||||||
sb.append(param.getName());
|
sb.append(param.getName());
|
||||||
// TODO: serialize bounds
|
// TODO: serialize bounds
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user