Container of value parameter is always a callable
This commit is contained in:
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||
import org.jetbrains.kotlin.codegen.when.SwitchCodegen;
|
||||
import org.jetbrains.kotlin.codegen.when.SwitchCodegenUtil;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ScriptCodeDescriptor;
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils;
|
||||
import org.jetbrains.kotlin.diagnostics.Errors;
|
||||
import org.jetbrains.kotlin.lexer.JetTokens;
|
||||
@@ -2036,11 +2037,14 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
return localOrCaptured;
|
||||
}
|
||||
|
||||
if (descriptor instanceof ValueParameterDescriptor && descriptor.getContainingDeclaration() instanceof ScriptDescriptor) {
|
||||
ScriptDescriptor scriptDescriptor = (ScriptDescriptor) descriptor.getContainingDeclaration();
|
||||
DeclarationDescriptor container = descriptor.getContainingDeclaration();
|
||||
if (descriptor instanceof ValueParameterDescriptor && container instanceof ScriptCodeDescriptor) {
|
||||
ScriptCodeDescriptor scriptCodeDescriptor = (ScriptCodeDescriptor) container;
|
||||
ScriptDescriptor scriptDescriptor = (ScriptDescriptor) scriptCodeDescriptor.getContainingDeclaration();
|
||||
Type scriptClassType = asmTypeForScriptDescriptor(bindingContext, scriptDescriptor);
|
||||
ValueParameterDescriptor valueParameterDescriptor = (ValueParameterDescriptor) descriptor;
|
||||
ClassDescriptor scriptClass = bindingContext.get(CLASS_FOR_SCRIPT, scriptDescriptor);
|
||||
//noinspection ConstantConditions
|
||||
StackValue script = StackValue.thisOrOuter(this, scriptClass, false, false);
|
||||
Type fieldType = typeMapper.mapType(valueParameterDescriptor);
|
||||
return StackValue.field(fieldType, scriptClassType, valueParameterDescriptor.getName().getIdentifier(), false, script,
|
||||
|
||||
@@ -345,18 +345,7 @@ public class DescriptorResolver {
|
||||
|
||||
@NotNull
|
||||
public ValueParameterDescriptorImpl resolveValueParameterDescriptor(
|
||||
JetScope scope, DeclarationDescriptor declarationDescriptor,
|
||||
JetParameter valueParameter, int index, JetType type, BindingTrace trace
|
||||
) {
|
||||
return resolveValueParameterDescriptor(declarationDescriptor, valueParameter, index, type, trace,
|
||||
annotationResolver.resolveAnnotationsWithoutArguments(scope, valueParameter.getModifierList(), trace));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private ValueParameterDescriptorImpl resolveValueParameterDescriptor(
|
||||
DeclarationDescriptor declarationDescriptor,
|
||||
JetParameter valueParameter, int index, JetType type, BindingTrace trace,
|
||||
Annotations annotations
|
||||
JetScope scope, FunctionDescriptor owner, JetParameter valueParameter, int index, JetType type, BindingTrace trace
|
||||
) {
|
||||
JetType varargElementType = null;
|
||||
JetType variableType = type;
|
||||
@@ -365,10 +354,10 @@ public class DescriptorResolver {
|
||||
variableType = getVarargParameterType(type);
|
||||
}
|
||||
ValueParameterDescriptorImpl valueParameterDescriptor = new ValueParameterDescriptorImpl(
|
||||
declarationDescriptor,
|
||||
owner,
|
||||
null,
|
||||
index,
|
||||
annotations,
|
||||
annotationResolver.resolveAnnotationsWithoutArguments(scope, valueParameter.getModifierList(), trace),
|
||||
JetPsiUtil.safeName(valueParameter.getName()),
|
||||
variableType,
|
||||
valueParameter.hasDefaultValue(),
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.ScriptDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement;
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ScriptCodeDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.kotlin.parsing.JetScriptDefinition;
|
||||
import org.jetbrains.kotlin.parsing.JetScriptDefinitionProvider;
|
||||
@@ -35,7 +36,7 @@ public final class ScriptParameterResolver {
|
||||
@NotNull
|
||||
public static List<ValueParameterDescriptor> resolveScriptParameters(
|
||||
@NotNull JetScript declaration,
|
||||
@NotNull ScriptDescriptor scriptDescriptor
|
||||
@NotNull ScriptCodeDescriptor scriptCodeDescriptor
|
||||
) {
|
||||
List<ValueParameterDescriptor> valueParameters = Lists.newArrayList();
|
||||
|
||||
@@ -44,23 +45,16 @@ public final class ScriptParameterResolver {
|
||||
|
||||
int index = 0;
|
||||
for (AnalyzerScriptParameter scriptParameter : scriptDefinition.getScriptParameters()) {
|
||||
ValueParameterDescriptor parameter = resolveScriptParameter(scriptParameter, index, scriptDescriptor);
|
||||
ValueParameterDescriptor parameter = new ValueParameterDescriptorImpl(
|
||||
scriptCodeDescriptor, null, index, Annotations.EMPTY, scriptParameter.getName(),
|
||||
scriptParameter.getType(), false, null, SourceElement.NO_SOURCE
|
||||
);
|
||||
valueParameters.add(parameter);
|
||||
++index;
|
||||
}
|
||||
return valueParameters;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static ValueParameterDescriptor resolveScriptParameter(
|
||||
@NotNull AnalyzerScriptParameter scriptParameter,
|
||||
int index,
|
||||
@NotNull ScriptDescriptor script
|
||||
) {
|
||||
return new ValueParameterDescriptorImpl(script, null, index, Annotations.EMPTY, scriptParameter.getName(),
|
||||
scriptParameter.getType(), false, null, SourceElement.NO_SOURCE);
|
||||
}
|
||||
|
||||
private ScriptParameterResolver() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,8 +148,7 @@ object DynamicCallableDescriptors {
|
||||
)
|
||||
}
|
||||
|
||||
private fun createValueParameters(owner: DeclarationDescriptor, call: Call): List<ValueParameterDescriptor> {
|
||||
|
||||
private fun createValueParameters(owner: FunctionDescriptor, call: Call): List<ValueParameterDescriptor> {
|
||||
val parameters = ArrayList<ValueParameterDescriptor>()
|
||||
|
||||
fun addParameter(arg : ValueArgument, outType: JetType, varargElementType: JetType?) {
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ public class LazyScriptDescriptor(
|
||||
val result = ScriptCodeDescriptor(this)
|
||||
result.initialize(
|
||||
implicitReceiver,
|
||||
ScriptParameterResolver.resolveScriptParameters(jetScript, this),
|
||||
ScriptParameterResolver.resolveScriptParameters(jetScript, result),
|
||||
DeferredType.create(resolveSession.getStorageManager(), resolveSession.getTrace()) {
|
||||
scriptBodyResolver.resolveScriptReturnType(jetScript, this, resolveSession.getTrace())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user