Actual conversion ParametersBuilder.java->ParametersBuilder.kt

This commit is contained in:
Michael Bogdanov
2015-09-29 10:52:45 +03:00
parent 345b21b3eb
commit 79fce388b3
@@ -14,147 +14,122 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.codegen.inline; package org.jetbrains.kotlin.codegen.inline
import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.codegen.StackValue
import org.jetbrains.annotations.Nullable; import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.kotlin.codegen.StackValue;
import org.jetbrains.org.objectweb.asm.Type;
import java.util.ArrayList; import java.util.ArrayList
import java.util.Collections; import java.util.Collections
import java.util.List;
public class ParametersBuilder { class ParametersBuilder {
private final List<ParameterInfo> params = new ArrayList<ParameterInfo>(); private val params = ArrayList<ParameterInfo>()
private final List<CapturedParamInfo> capturedParams = new ArrayList<CapturedParamInfo>(); private val capturedParams = ArrayList<CapturedParamInfo>()
private int nextIndex = 0; var nextValueParameterIndex = 0
private int nextCaptured = 0; private set
private var nextCaptured = 0
@NotNull fun addThis(type: Type, skipped: Boolean): ParameterInfo {
public static ParametersBuilder newBuilder() { val info = ParameterInfo(type, skipped, nextValueParameterIndex, -1)
return new ParametersBuilder(); addParameter(info)
return info
} }
@NotNull fun addNextParameter(type: Type, skipped: Boolean, remapValue: StackValue?): ParameterInfo {
public ParameterInfo addThis(@NotNull Type type, boolean skipped) { return addParameter(ParameterInfo(type, skipped, nextValueParameterIndex, remapValue))
ParameterInfo info = new ParameterInfo(type, skipped, nextIndex, -1);
addParameter(info);
return info;
} }
@NotNull fun addCapturedParam(
public ParameterInfo addNextParameter(@NotNull Type type, boolean skipped, @Nullable StackValue remapValue) { original: CapturedParamInfo,
return addParameter(new ParameterInfo(type, skipped, nextIndex, remapValue)); newFieldName: String): CapturedParamInfo {
val info = CapturedParamInfo(original.desc, newFieldName, original.isSkipped, nextCaptured, original.getIndex())
info.setLambda(original.getLambda())
return addCapturedParameter(info)
} }
@NotNull fun addCapturedParam(
public CapturedParamInfo addCapturedParam( desc: CapturedParamDesc,
@NotNull CapturedParamInfo original, newFieldName: String): CapturedParamInfo {
@NotNull String newFieldName val info = CapturedParamInfo(desc, newFieldName, false, nextCaptured, null)
) { return addCapturedParameter(info)
CapturedParamInfo info = new CapturedParamInfo(original.desc, newFieldName, original.isSkipped, nextCaptured, original.getIndex());
info.setLambda(original.getLambda());
return addCapturedParameter(info);
} }
@NotNull fun addCapturedParamCopy(
public CapturedParamInfo addCapturedParam( copyFrom: CapturedParamInfo): CapturedParamInfo {
@NotNull CapturedParamDesc desc, val info = copyFrom.newIndex(nextCaptured)
@NotNull String newFieldName return addCapturedParameter(info)
) {
CapturedParamInfo info = new CapturedParamInfo(desc, newFieldName, false, nextCaptured, null);
return addCapturedParameter(info);
} }
@NotNull fun addCapturedParam(
public CapturedParamInfo addCapturedParamCopy( containingLambda: CapturedParamOwner,
@NotNull CapturedParamInfo copyFrom fieldName: String,
) { type: Type,
CapturedParamInfo info = copyFrom.newIndex(nextCaptured); skipped: Boolean,
return addCapturedParameter(info); original: ParameterInfo?): CapturedParamInfo {
} val info = CapturedParamInfo(CapturedParamDesc.createDesc(containingLambda, fieldName, type), skipped, nextCaptured,
if (original != null) original.getIndex() else -1)
@NotNull
public CapturedParamInfo addCapturedParam(
@NotNull CapturedParamOwner containingLambda,
@NotNull String fieldName,
@NotNull Type type,
boolean skipped,
@Nullable ParameterInfo original
) {
CapturedParamInfo info =
new CapturedParamInfo(CapturedParamDesc.createDesc(containingLambda, fieldName, type), skipped, nextCaptured,
original != null ? original.getIndex() : -1);
if (original != null) { if (original != null) {
info.setLambda(original.getLambda()); info.setLambda(original.getLambda())
} }
return addCapturedParameter(info); return addCapturedParameter(info)
} }
@NotNull private fun addParameter(info: ParameterInfo): ParameterInfo {
private ParameterInfo addParameter(ParameterInfo info) { params.add(info)
params.add(info); nextValueParameterIndex += info.getType().size
nextIndex += info.getType().getSize(); return info
return info;
} }
@NotNull private fun addCapturedParameter(info: CapturedParamInfo): CapturedParamInfo {
private CapturedParamInfo addCapturedParameter(CapturedParamInfo info) { capturedParams.add(info)
capturedParams.add(info); nextCaptured += info.getType().size
nextCaptured += info.getType().getSize(); return info
return info;
} }
@NotNull fun listNotCaptured(): List<ParameterInfo> {
public List<ParameterInfo> listNotCaptured() { return Collections.unmodifiableList(params)
return Collections.unmodifiableList(params);
} }
@NotNull fun listCaptured(): List<CapturedParamInfo> {
public List<CapturedParamInfo> listCaptured() { return Collections.unmodifiableList(capturedParams)
return Collections.unmodifiableList(capturedParams);
} }
@NotNull fun listAllParams(): List<ParameterInfo> {
public List<ParameterInfo> listAllParams() { val list = ArrayList(params)
List<ParameterInfo> list = new ArrayList<ParameterInfo>(params); list.addAll(capturedParams)
list.addAll(capturedParams); return list
return list;
} }
@NotNull private fun buildWithStubs(): List<ParameterInfo> {
private List<ParameterInfo> buildWithStubs() { return Parameters.addStubs(listNotCaptured())
return Parameters.addStubs(listNotCaptured());
} }
private List<CapturedParamInfo> buildCapturedWithStubs() { private fun buildCapturedWithStubs(): List<CapturedParamInfo> {
return Parameters.shiftAndAddStubs(listCaptured(), nextIndex); return Parameters.shiftAndAddStubs(listCaptured(), nextValueParameterIndex)
} }
public Parameters buildParameters() { fun buildParameters(): Parameters {
return new Parameters(buildWithStubs(), buildCapturedWithStubs()); return Parameters(buildWithStubs(), buildCapturedWithStubs())
} }
public int getNextValueParameterIndex() { companion object {
return nextIndex;
}
public static ParametersBuilder initializeBuilderFrom(@NotNull Type objectType, @NotNull String descriptor) { @JvmStatic fun newBuilder(): ParametersBuilder {
return initializeBuilderFrom(objectType, descriptor, null); return ParametersBuilder()
} }
public static ParametersBuilder initializeBuilderFrom(@NotNull Type objectType, @NotNull String descriptor, @Nullable LambdaInfo inlineLambda) { @JvmOverloads @JvmStatic fun initializeBuilderFrom(objectType: Type, descriptor: String, inlineLambda: LambdaInfo? = null): ParametersBuilder {
ParametersBuilder builder = newBuilder(); val builder = newBuilder()
//skipped this for inlined lambda cause it will be removed //skipped this for inlined lambda cause it will be removed
builder.addThis(objectType, inlineLambda != null).setLambda(inlineLambda); builder.addThis(objectType, inlineLambda != null).setLambda(inlineLambda)
Type[] types = Type.getArgumentTypes(descriptor); val types = Type.getArgumentTypes(descriptor)
for (Type type : types) { for (type in types) {
builder.addNextParameter(type, false, null); builder.addNextParameter(type, false, null)
}
return builder
} }
return builder;
} }
} }