ParameterBuilder refactoring
This commit is contained in:
+1
-11
@@ -82,15 +82,6 @@ public class AnonymousObjectTransformer {
|
||||
typeRemapper = new TypeRemapper(inliningContext.typeMapping);
|
||||
}
|
||||
|
||||
private void buildInvokeParamsFor(@NotNull ParametersBuilder builder, @NotNull MethodNode node) {
|
||||
builder.addThis(oldObjectType, false);
|
||||
|
||||
Type[] types = Type.getArgumentTypes(node.desc);
|
||||
for (Type type : types) {
|
||||
builder.addNextParameter(type, false, null);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public InlineResult doTransform(@NotNull AnonymousObjectGeneration anonymousObjectGen, @NotNull FieldRemapper parentRemapper) {
|
||||
ClassBuilder classBuilder = createClassBuilder();
|
||||
@@ -346,8 +337,7 @@ public class AnonymousObjectTransformer {
|
||||
@NotNull ParametersBuilder capturedBuilder,
|
||||
@NotNull MethodNode sourceNode
|
||||
) {
|
||||
ParametersBuilder builder = ParametersBuilder.newBuilder();
|
||||
buildInvokeParamsFor(builder, sourceNode);
|
||||
ParametersBuilder builder = ParametersBuilder.initializeBuilderFrom(oldObjectType, sourceNode.desc);
|
||||
for (CapturedParamInfo param : capturedBuilder.listCaptured()) {
|
||||
builder.addCapturedParamCopy(param);
|
||||
}
|
||||
|
||||
@@ -24,12 +24,11 @@ import org.jetbrains.kotlin.codegen.context.EnclosedValueDescriptor;
|
||||
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.kotlin.psi.JetExpression;
|
||||
import org.jetbrains.kotlin.psi.JetFunctionLiteralExpression;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.jvm.AsmTypes;
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
|
||||
import org.jetbrains.org.objectweb.asm.Type;
|
||||
import org.jetbrains.org.objectweb.asm.tree.FieldInsnNode;
|
||||
|
||||
@@ -152,22 +151,9 @@ public class LambdaInfo implements CapturedParamOwner, LabelOwner {
|
||||
|
||||
@NotNull
|
||||
public Parameters addAllParameters(FieldRemapper remapper) {
|
||||
ParametersBuilder builder = ParametersBuilder.newBuilder();
|
||||
//add skipped this cause inlined lambda doesn't have it
|
||||
builder.addThis(AsmTypes.OBJECT_TYPE, true).setLambda(this);
|
||||
|
||||
FunctionDescriptor lambdaDescriptor = getFunctionDescriptor();
|
||||
ReceiverParameterDescriptor extensionParameter = lambdaDescriptor.getExtensionReceiverParameter();
|
||||
if (extensionParameter != null) {
|
||||
Type type = typeMapper.mapType(extensionParameter.getType());
|
||||
builder.addNextParameter(type, false, null);
|
||||
}
|
||||
|
||||
List<ValueParameterDescriptor> valueParameters = lambdaDescriptor.getValueParameters();
|
||||
for (ValueParameterDescriptor parameter : valueParameters) {
|
||||
Type type = typeMapper.mapType(parameter.getType());
|
||||
builder.addNextParameter(type, false, null);
|
||||
}
|
||||
JvmMethodSignature signature = typeMapper.mapSignature(getFunctionDescriptor());
|
||||
ParametersBuilder builder =
|
||||
ParametersBuilder.initializeBuilderFrom(AsmTypes.OBJECT_TYPE, signature.getAsmMethod().getDescriptor(), this);
|
||||
|
||||
for (CapturedParamDesc info : getCapturedVars()) {
|
||||
CapturedParamInfo field = remapper.findField(new FieldInsnNode(0, info.getContainingLambdaName(), info.getFieldName(), ""));
|
||||
|
||||
@@ -82,7 +82,7 @@ class ParameterInfo {
|
||||
return lambda;
|
||||
}
|
||||
|
||||
public void setLambda(LambdaInfo lambda) {
|
||||
public void setLambda(@Nullable LambdaInfo lambda) {
|
||||
this.lambda = lambda;
|
||||
}
|
||||
|
||||
|
||||
@@ -141,4 +141,20 @@ public class ParametersBuilder {
|
||||
public int getNextValueParameterIndex() {
|
||||
return nextIndex;
|
||||
}
|
||||
|
||||
public static ParametersBuilder initializeBuilderFrom(@NotNull Type objectType, @NotNull String descriptor) {
|
||||
return initializeBuilderFrom(objectType, descriptor, null);
|
||||
}
|
||||
|
||||
public static ParametersBuilder initializeBuilderFrom(@NotNull Type objectType, @NotNull String descriptor, @Nullable LambdaInfo inlineLambda) {
|
||||
ParametersBuilder builder = newBuilder();
|
||||
//skipped this for inlined lambda cause it will be removed
|
||||
builder.addThis(objectType, inlineLambda != null).setLambda(inlineLambda);
|
||||
|
||||
Type[] types = Type.getArgumentTypes(descriptor);
|
||||
for (Type type : types) {
|
||||
builder.addNextParameter(type, false, null);
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user