This commit is contained in:
Alex Tkachman
2012-09-15 14:13:52 +03:00
parent f0e096aba6
commit 325ed0073d
@@ -27,6 +27,7 @@ import org.jetbrains.asm4.commons.InstructionAdapter;
import org.jetbrains.asm4.commons.Method; import org.jetbrains.asm4.commons.Method;
import org.jetbrains.jet.codegen.context.CodegenContext; import org.jetbrains.jet.codegen.context.CodegenContext;
import org.jetbrains.jet.codegen.context.MethodContext; import org.jetbrains.jet.codegen.context.MethodContext;
import org.jetbrains.jet.codegen.signature.JvmMethodParameterSignature;
import org.jetbrains.jet.codegen.signature.JvmMethodSignature; import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
import org.jetbrains.jet.codegen.signature.kotlin.JetMethodAnnotationWriter; import org.jetbrains.jet.codegen.signature.kotlin.JetMethodAnnotationWriter;
import org.jetbrains.jet.codegen.signature.kotlin.JetValueParameterAnnotationWriter; import org.jetbrains.jet.codegen.signature.kotlin.JetValueParameterAnnotationWriter;
@@ -301,10 +302,10 @@ public class FunctionCodegen extends GenerationStateAware {
} }
public static void genJetAnnotations( public static void genJetAnnotations(
GenerationState state, @NotNull GenerationState state,
FunctionDescriptor functionDescriptor, @NotNull FunctionDescriptor functionDescriptor,
JvmMethodSignature jvmSignature, @NotNull JvmMethodSignature jvmSignature,
String propertyTypeSignature, @Nullable String propertyTypeSignature,
MethodVisitor mv MethodVisitor mv
) { ) {
List<ValueParameterDescriptor> paramDescrs = functionDescriptor.getValueParameters(); List<ValueParameterDescriptor> paramDescrs = functionDescriptor.getValueParameters();
@@ -313,6 +314,7 @@ public class FunctionCodegen extends GenerationStateAware {
int start = 0; int start = 0;
if (functionDescriptor instanceof PropertyAccessorDescriptor) { if (functionDescriptor instanceof PropertyAccessorDescriptor) {
assert propertyTypeSignature != null;
PropertyCodegen.generateJetPropertyAnnotation(mv, propertyTypeSignature, jvmSignature.getKotlinTypeParameter(), PropertyCodegen.generateJetPropertyAnnotation(mv, propertyTypeSignature, jvmSignature.getKotlinTypeParameter(),
((PropertyAccessorDescriptor) functionDescriptor) ((PropertyAccessorDescriptor) functionDescriptor)
.getCorrespondingProperty(), .getCorrespondingProperty(),
@@ -331,6 +333,7 @@ public class FunctionCodegen extends GenerationStateAware {
} }
aw.writeFlags(kotlinFlags); aw.writeFlags(kotlinFlags);
aw.writeKind(DescriptorKindUtils.kindToInt(functionDescriptor.getKind())); aw.writeKind(DescriptorKindUtils.kindToInt(functionDescriptor.getKind()));
//noinspection ConstantConditions
aw.writeNullableReturnType(functionDescriptor.getReturnType().isNullable()); aw.writeNullableReturnType(functionDescriptor.getReturnType().isNullable());
aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter()); aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter());
aw.writeReturnType(jvmSignature.getKotlinReturnType()); aw.writeReturnType(jvmSignature.getKotlinReturnType());
@@ -340,13 +343,16 @@ public class FunctionCodegen extends GenerationStateAware {
throw new IllegalStateException(); throw new IllegalStateException();
} }
final List<JvmMethodParameterSignature> kotlinParameterTypes = jvmSignature.getKotlinParameterTypes();
assert kotlinParameterTypes != null;
if (receiverParameter.exists()) { if (receiverParameter.exists()) {
JetValueParameterAnnotationWriter av = JetValueParameterAnnotationWriter.visitParameterAnnotation(mv, start++); JetValueParameterAnnotationWriter av = JetValueParameterAnnotationWriter.visitParameterAnnotation(mv, start++);
av.writeName("this$receiver"); av.writeName("this$receiver");
av.writeNullable(receiverParameter.getType().isNullable()); av.writeNullable(receiverParameter.getType().isNullable());
av.writeReceiver(); av.writeReceiver();
if (jvmSignature.getKotlinParameterTypes() != null && jvmSignature.getKotlinParameterTypes().get(0) != null) { if (kotlinParameterTypes.get(0) != null) {
av.writeType(jvmSignature.getKotlinParameterTypes().get(0).getKotlinSignature()); av.writeType(kotlinParameterTypes.get(0).getKotlinSignature());
} }
av.visitEnd(); av.visitEnd();
} }
@@ -357,8 +363,8 @@ public class FunctionCodegen extends GenerationStateAware {
av.writeName(parameterDescriptor.getName().getName()); av.writeName(parameterDescriptor.getName().getName());
av.writeHasDefaultValue(parameterDescriptor.declaresDefaultValue()); av.writeHasDefaultValue(parameterDescriptor.declaresDefaultValue());
av.writeNullable(parameterDescriptor.getType().isNullable()); av.writeNullable(parameterDescriptor.getType().isNullable());
if (jvmSignature.getKotlinParameterTypes() != null && jvmSignature.getKotlinParameterTypes().get(i) != null) { if (kotlinParameterTypes.get(i) != null) {
av.writeType(jvmSignature.getKotlinParameterTypes().get(i + start).getKotlinSignature()); av.writeType(kotlinParameterTypes.get(i + start).getKotlinSignature());
} }
av.visitEnd(); av.visitEnd();
} }