Actual ArgumentGenerator.java convertion

This commit is contained in:
Michael Bogdanov
2015-09-25 15:36:36 +03:00
parent c9b5753ff3
commit 8104c10c5a
2 changed files with 40 additions and 43 deletions
@@ -14,73 +14,70 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.codegen; package org.jetbrains.kotlin.codegen
import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument
import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument; import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument
import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument; import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument
import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument; import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument
import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument;
import java.util.ArrayList; import java.util.ArrayList
import java.util.Collections; import java.util.Collections
import java.util.List;
import java.util.Map;
public abstract class ArgumentGenerator { abstract class ArgumentGenerator {
/** /**
* @return a {@code List} of bit masks of default arguments that should be passed as last arguments to $default method, if there were * @return a `List` of bit masks of default arguments that should be passed as last arguments to $default method, if there were
* any default arguments, or an empty {@code List} if there were none * * any default arguments, or an empty `List` if there were none
* @see kotlin.reflect.jvm.internal.KCallableImpl#callBy(Map...) * *
* @see kotlin.reflect.jvm.internal.KCallableImpl.callBy
*/ */
@NotNull open fun generate(valueArguments: List<ResolvedValueArgument>): List<Int> {
public List<Integer> generate(@NotNull List<ResolvedValueArgument> valueArguments) { val masks = ArrayList<Int>(1)
List<Integer> masks = new ArrayList<Integer>(1); var mask = 0
int mask = 0; val n = valueArguments.size()
int n = valueArguments.size(); for (i in 0..n - 1) {
for (int i = 0; i < n; i++) {
if (i != 0 && i % Integer.SIZE == 0) { if (i != 0 && i % Integer.SIZE == 0) {
masks.add(mask); masks.add(mask)
mask = 0; mask = 0
} }
ResolvedValueArgument argument = valueArguments.get(i); val argument = valueArguments.get(i)
if (argument instanceof ExpressionValueArgument) { if (argument is ExpressionValueArgument) {
generateExpression(i, (ExpressionValueArgument) argument); generateExpression(i, argument)
} }
else if (argument instanceof DefaultValueArgument) { else if (argument is DefaultValueArgument) {
mask |= 1 << (i % Integer.SIZE); mask = mask or (1 shl (i % Integer.SIZE))
generateDefault(i, (DefaultValueArgument) argument); generateDefault(i, argument)
} }
else if (argument instanceof VarargValueArgument) { else if (argument is VarargValueArgument) {
generateVararg(i, (VarargValueArgument) argument); generateVararg(i, argument)
} }
else { else {
generateOther(i, argument); generateOther(i, argument)
} }
} }
if (mask == 0 && masks.isEmpty()) { if (mask == 0 && masks.isEmpty()) {
return Collections.emptyList(); return emptyList()
} }
masks.add(mask); masks.add(mask)
return masks; return masks
} }
protected void generateExpression(int i, @NotNull ExpressionValueArgument argument) { protected open fun generateExpression(i: Int, argument: ExpressionValueArgument) {
throw new UnsupportedOperationException("Unsupported expression value argument #" + i + ": " + argument); throw UnsupportedOperationException("Unsupported expression value argument #$i: $argument")
} }
protected void generateDefault(int i, @NotNull DefaultValueArgument argument) { protected open fun generateDefault(i: Int, argument: DefaultValueArgument) {
throw new UnsupportedOperationException("Unsupported default value argument #" + i + ": " + argument); throw UnsupportedOperationException("Unsupported default value argument #$i: $argument")
} }
protected void generateVararg(int i, @NotNull VarargValueArgument argument) { protected open fun generateVararg(i: Int, argument: VarargValueArgument) {
throw new UnsupportedOperationException("Unsupported vararg value argument #" + i + ": " + argument); throw UnsupportedOperationException("Unsupported vararg value argument #$i: $argument")
} }
@SuppressWarnings("MethodMayBeStatic") // is supposed to be overridden @SuppressWarnings("MethodMayBeStatic") // is supposed to be overridden
protected void generateOther(int i, @NotNull ResolvedValueArgument argument) { protected fun generateOther(i: Int, argument: ResolvedValueArgument) {
throw new UnsupportedOperationException("Unsupported value argument #" + i + ": " + argument); throw UnsupportedOperationException("Unsupported value argument #$i: $argument")
} }
} }
@@ -53,7 +53,7 @@ public class CallBasedArgumentGenerator extends ArgumentGenerator {
@NotNull @NotNull
@Override @Override
public List<Integer> generate(@NotNull List<ResolvedValueArgument> valueArguments) { public List<Integer> generate(@NotNull List<? extends ResolvedValueArgument> valueArguments) {
boolean shouldMarkLineNumbers = codegen.isShouldMarkLineNumbers(); boolean shouldMarkLineNumbers = codegen.isShouldMarkLineNumbers();
codegen.setShouldMarkLineNumbers(false); codegen.setShouldMarkLineNumbers(false);
List<Integer> masks = super.generate(valueArguments); List<Integer> masks = super.generate(valueArguments);