fix for NPE

This commit is contained in:
Alex Tkachman
2012-02-24 18:01:10 +02:00
parent a6b29094c0
commit 8faf1e62d3
2 changed files with 12 additions and 1 deletions
@@ -124,7 +124,7 @@ public class CallableMethod implements Callable {
} }
public boolean isNeedsThis() { public boolean isNeedsThis() {
return thisClass != null; return thisClass != null && generateCalleeType == null;
} }
public boolean isNeedsReceiver() { public boolean isNeedsReceiver() {
@@ -91,6 +91,7 @@ public class ClosureCodegen extends ObjectOrClosureCodegen {
if (fd.getReceiverParameter().exists()) { if (fd.getReceiverParameter().exists()) {
result.setNeedsReceiver(fd); result.setNeedsReceiver(fd);
} }
result.setNeedsThis(getInternalType(fd));
result.requestGenerateCallee(Type.getObjectType(getInternalClassName(fd))); result.requestGenerateCallee(Type.getObjectType(getInternalClassName(fd)));
return result; return result;
} }
@@ -337,6 +338,16 @@ public class ClosureCodegen extends ObjectOrClosureCodegen {
} }
} }
public static ClassDescriptor getInternalType(FunctionDescriptor descriptor) {
final int paramCount = descriptor.getValueParameters().size();
if (descriptor.getReceiverParameter().exists()) {
return JetStandardClasses.getReceiverFunction(paramCount);
}
else {
return JetStandardClasses.getFunction(paramCount);
}
}
private void appendType(SignatureWriter signatureWriter, JetType type, char variance) { private void appendType(SignatureWriter signatureWriter, JetType type, char variance) {
signatureWriter.visitTypeArgument(variance); signatureWriter.visitTypeArgument(variance);