diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-08 08:42:49 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-08 08:42:49 +0000 |
| commit | 0577f8637123c92fa6c1d4e27e0d2281c9a6b519 (patch) | |
| tree | edaa735a2582030b1d6da5a66eef15e90bcc40bc /src/main/java/org | |
| parent | 17072b4d14dad00acac247508e35b52c0233170b (diff) | |
Use list() to create lists of fixed size
Diffstat (limited to 'src/main/java/org')
19 files changed, 94 insertions, 65 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java index ba50f17..076ac9e 100644 --- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java @@ -10,6 +10,7 @@ import java.util.function.Function; import static java.util.Arrays.asList; import static org.zwobble.couscous.util.ExtraLists.eagerMap; +import static org.zwobble.couscous.util.ExtraLists.list; public class MethodCallNode implements ExpressionNode { public static ExpressionNode not(ExpressionNode value) { @@ -41,7 +42,7 @@ public class MethodCallNode implements ExpressionNode { } public static MethodCallNode integerOperation(String methodName, ExpressionNode left, ExpressionNode right) { - return methodCall(left, methodName, asList(right), IntegerValue.REF); + return methodCall(left, methodName, list(right), IntegerValue.REF); } public static ExpressionNode equal(ExpressionNode left, ExpressionNode right) { @@ -69,7 +70,7 @@ public class MethodCallNode implements ExpressionNode { } private static ExpressionNode booleanOperation(String methodName, ExpressionNode left, ExpressionNode right) { - return methodCall(left, methodName, asList(right), BooleanValue.REF); + return methodCall(left, methodName, list(right), BooleanValue.REF); } public static MethodCallNode methodCall( diff --git a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java index 5302f0a..4676b67 100644 --- a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java @@ -12,10 +12,11 @@ import org.zwobble.couscous.values.ObjectValues; import static java.util.Arrays.asList; import static org.zwobble.couscous.ast.TypeCoercionNode.typeCoercion; import static org.zwobble.couscous.util.ExtraLists.eagerMap; +import static org.zwobble.couscous.util.ExtraLists.list; public class StaticMethodCallNode implements ExpressionNode { public static ExpressionNode same(ExpressionNode left, ExpressionNode right) { - return staticMethodCall(InternalCouscousValue.REF, "same", asList(left, right), BooleanValue.REF); + return staticMethodCall(InternalCouscousValue.REF, "same", list(left, right), BooleanValue.REF); } public static ExpressionNode boxInt(ExpressionNode value) { diff --git a/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java b/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java index 29a33eb..0c0d047 100644 --- a/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java +++ b/src/main/java/org/zwobble/couscous/ast/identifiers/Identifier.java @@ -4,8 +4,10 @@ import com.google.common.collect.ImmutableList; import java.util.List; +import static org.zwobble.couscous.util.ExtraLists.list; + public class Identifier { - public static final Identifier TOP = new Identifier(ImmutableList.of()); + public static final Identifier TOP = new Identifier(list()); private final List<String> parts; diff --git a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java index d2f89ba..cc2ec06 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java @@ -22,6 +22,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonBinaryOperation.pyt import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall; import static org.zwobble.couscous.backends.python.ast.PythonGetSliceNode.pythonGetSlice; import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference; +import static org.zwobble.couscous.util.ExtraLists.list; public class PrimitiveMethods { private static final Map<String, PrimitiveMethodGenerator> STRING_METHODS = @@ -30,7 +31,7 @@ public class PrimitiveMethods { .put("length", (receiver, arguments) -> pythonCall( pythonVariableReference("len"), - asList(receiver))) + list(receiver))) .put("substring", (receiver, arguments) -> pythonGetSlice(receiver, arguments)) @@ -51,7 +52,7 @@ public class PrimitiveMethods { ImmutableMap.Builder<String, PrimitiveMethodGenerator> methods = ImmutableMap.builder(); methods.put("toString", (receiver, arguments) -> - pythonCall(pythonVariableReference("str"), ImmutableList.of(receiver))); + pythonCall(pythonVariableReference("str"), list(receiver))); addOperation(methods, Operator.ADD.getMethodName(), "+"); addOperation(methods, Operator.SUBTRACT.getMethodName(), "-"); @@ -60,11 +61,11 @@ public class PrimitiveMethods { methods.put(Operator.DIVIDE.getMethodName(), (receiver, arguments) -> pythonCall( internalReference("_div_round_to_zero"), - asList(receiver, arguments.get(0)))); + list(receiver, arguments.get(0)))); methods.put(Operator.MOD.getMethodName(), (receiver, arguments) -> pythonCall( internalReference("_mod_round_to_zero"), - asList(receiver, arguments.get(0)))); + list(receiver, arguments.get(0)))); addOperation(methods, Operator.EQUALS.getMethodName(), "=="); addOperation(methods, Operator.NOT_EQUALS.getMethodName(), "!="); diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java index f30beed..de36ed6 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java @@ -8,6 +8,7 @@ import java.nio.file.Path; import java.util.List; import java.util.stream.Stream; +import com.google.common.collect.ImmutableList; import org.zwobble.couscous.Backend; import org.zwobble.couscous.ast.ClassNode; @@ -16,9 +17,10 @@ import com.google.common.io.Resources; import static java.util.Arrays.asList; import static org.zwobble.couscous.backends.python.PythonCodeGenerator.generateCode; import static org.zwobble.couscous.backends.python.PythonSerializer.serialize; +import static org.zwobble.couscous.util.ExtraLists.list; public class PythonBackend implements Backend { - private static final List<String> RUNTIME_FILES = asList( + private static final List<String> RUNTIME_FILES = ImmutableList.of( "java.lang.Object", "java.lang.Boolean", "java.lang.Integer", @@ -63,7 +65,7 @@ public class PythonBackend implements Backend { Path path = destinationPathForModule(name); Files.createDirectories(path.getParent()); createPythonPackages(path.getParent()); - Files.write(path, asList(contents)); + Files.write(path, list(contents)); } private void createPythonPackages(Path packagePath) throws IOException { diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java index 104854c..96fc544 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java @@ -40,6 +40,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonReturnNode.pythonRe import static org.zwobble.couscous.backends.python.ast.PythonStringLiteralNode.pythonStringLiteral; import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference; import static org.zwobble.couscous.backends.python.ast.PythonWhileNode.pythonWhile; +import static org.zwobble.couscous.util.ExtraLists.list; public class PythonCodeGenerator { public static PythonModuleNode generateCode(ClassNode classNode) { @@ -47,7 +48,7 @@ public class PythonCodeGenerator { PythonImportNode internalsImport = pythonImport( importPathToRoot(classNode), - asList(pythonImportAlias("_couscous"))); + list(pythonImportAlias("_couscous"))); PythonFunctionDefinitionNode constructor = generateConstructor(classNode.getConstructor()); @@ -58,7 +59,7 @@ public class PythonCodeGenerator { PythonClassNode pythonClass = pythonClass( classNode.getSimpleName(), - ImmutableList.copyOf(Iterables.concat(asList(constructor), pythonMethods))); + ImmutableList.copyOf(Iterables.concat(list(constructor), pythonMethods))); return pythonModule(ImmutableList.copyOf(Iterators.concat( singletonIterator(pythonClass), @@ -70,7 +71,7 @@ public class PythonCodeGenerator { Set<TypeName> classes = findReferencedClasses(classNode); return classes.stream() .filter(name -> !name.equals(InternalCouscousValue.REF)) - .map(name -> pythonImport(importPathToRoot(classNode) + name.getQualifiedName(), asList(pythonImportAlias(name.getSimpleName())))); + .map(name -> pythonImport(importPathToRoot(classNode) + name.getQualifiedName(), list(pythonImportAlias(name.getSimpleName())))); } private static String importPathToRoot(ClassNode classNode) { @@ -131,7 +132,7 @@ public class PythonCodeGenerator { private static PythonFunctionDefinitionNode generateConstructor(ConstructorNode constructor) { Iterable<String> explicitArgumentNames = transform(constructor.getArguments(), argument -> argument.getName()); - Iterable<String> argumentNames = Iterables.concat(asList("self"), explicitArgumentNames); + Iterable<String> argumentNames = Iterables.concat(list("self"), explicitArgumentNames); List<PythonStatementNode> pythonBody = constructor.getBody().stream().map(PythonCodeGenerator::generateStatement).collect(Collectors.toList()); return pythonFunctionDefinition("__init__", ImmutableList.copyOf(argumentNames), new PythonBlock(pythonBody)); } @@ -139,7 +140,7 @@ public class PythonCodeGenerator { private static PythonFunctionDefinitionNode generateFunction(MethodNode method) { Iterable<String> explicitArgumentNames = transform(method.getArguments(), argument -> argument.getName()); Iterable<String> argumentNames = Iterables.concat( - method.isStatic() ? Collections.<String>emptyList() : asList("self"), + method.isStatic() ? Collections.<String>emptyList() : list("self"), explicitArgumentNames); List<PythonStatementNode> pythonBody = generateStatements(method.getBody()); return pythonFunctionDefinition(toName(method.signature()), ImmutableList.copyOf(argumentNames), new PythonBlock(pythonBody)); @@ -270,7 +271,7 @@ public class PythonCodeGenerator { PythonExpressionNode value = generateExpression(typeCoercion.getExpression()); if (isIntegerBox(typeCoercion)) { // TODO: replace with direct access to java.lang.Integer - return internalMethod("boxInt", asList(value)); + return internalMethod("boxInt", list(value)); } else if (isIntegerUnbox(typeCoercion)) { return pythonAttributeAccess(value, "_value"); } else { @@ -297,7 +298,7 @@ public class PythonCodeGenerator { public static String toName(MethodSignature signature) { return Joiner.on("__").join(Iterables.concat( - ImmutableList.of(signature.getName()), + list(signature.getName()), transform(signature.getArguments(), argument -> argument.getQualifiedName().replace('.', '_')))); } diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java index 8bc7132..b1889a7 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java @@ -6,13 +6,14 @@ import java.util.List; import com.google.common.collect.ImmutableList; import static java.util.Arrays.asList; +import static org.zwobble.couscous.util.ExtraLists.list; public class PythonBlock implements Iterable<PythonStatementNode> { private final List<PythonStatementNode> statements; public PythonBlock(List<? extends PythonStatementNode> statements) { if (statements.isEmpty()) { - this.statements = asList(PythonPassNode.PASS); + this.statements = list(PythonPassNode.PASS); } else { this.statements = ImmutableList.copyOf(statements); } diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionMethodReferenceReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionMethodReferenceReader.java index d9a55e3..ab78bdb 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionMethodReferenceReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionMethodReferenceReader.java @@ -16,6 +16,7 @@ import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall; import static org.zwobble.couscous.ast.sugar.Lambda.lambda; import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf; import static org.zwobble.couscous.util.ExtraLists.eagerMap; +import static org.zwobble.couscous.util.ExtraLists.list; public class JavaExpressionMethodReferenceReader { private final JavaReader javaReader; @@ -30,7 +31,7 @@ public class JavaExpressionMethodReferenceReader { return lambda( formalArguments, - ImmutableList.of(returns(JavaExpressionReader.coerceExpression( + list(returns(JavaExpressionReader.coerceExpression( typeOf(functionalInterfaceMethod.getReturnType()), generateValue(scope, expression, formalArguments))))); } diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java index 0e910a1..67c1e04 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java @@ -18,6 +18,7 @@ import static org.zwobble.couscous.ast.TypeCoercionNode.typeCoercion; import static org.zwobble.couscous.frontends.java.JavaOperators.readOperator; import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf; import static org.zwobble.couscous.util.ExtraLists.concat; +import static org.zwobble.couscous.util.ExtraLists.list; public class JavaExpressionReader { private final Scope scope; @@ -261,7 +262,7 @@ public class JavaExpressionReader { MethodCallNode.methodCall( readExpression(IntegerValue.REF, expression.getOperand()), operator.getMethodName(), - asList(literal(1)), + list(literal(1)), IntegerValue.REF)); } } @@ -295,7 +296,7 @@ public class JavaExpressionReader { return MethodCallNode.methodCall( left, operator.getMethodName(), - asList(right), + list(right), operator.isBoolean() ? BooleanValue.REF : left.getType()); } diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java index c8b5f4c..ee4fc06 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java @@ -14,6 +14,7 @@ import static org.zwobble.couscous.ast.ReturnNode.returns; import static org.zwobble.couscous.ast.sugar.Lambda.lambda; import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf; import static org.zwobble.couscous.util.ExtraLists.eagerMap; +import static org.zwobble.couscous.util.ExtraLists.list; public class JavaLambdaExpressionReader { private final JavaReader reader; @@ -50,7 +51,7 @@ public class JavaLambdaExpressionReader { return reader.readStatements(scope, statements, Optional.of(returnType)); } else { Expression body = (Expression) expression.getBody(); - return asList(returns(reader.readExpression(scope, returnType, body))); + return list(returns(reader.readExpression(scope, returnType, body))); } } } diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java index 9de85cc..e1addd3 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java @@ -1,5 +1,12 @@ package org.zwobble.couscous.frontends.java; +import com.google.common.base.Charsets; +import com.google.common.collect.Iterables; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.dom.AST; +import org.eclipse.jdt.core.dom.ASTParser; +import org.eclipse.jdt.core.dom.CompilationUnit; + import java.io.IOException; import java.nio.ByteBuffer; import java.nio.CharBuffer; @@ -8,17 +15,10 @@ import java.nio.file.Path; import java.util.Hashtable; import java.util.List; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTParser; -import org.eclipse.jdt.core.dom.CompilationUnit; -import com.google.common.base.Charsets; - import static com.google.common.collect.Iterables.concat; import static com.google.common.collect.Iterables.transform; import static java.util.Arrays.asList; +import static org.zwobble.couscous.util.ExtraLists.list; public class JavaParser { private final ASTParser parser; @@ -41,7 +41,7 @@ public class JavaParser { String[] sourcePathArguments = Iterables.toArray( concat( - ImmutableList.of("/usr/lib/jvm/java-8-openjdk-amd64/jre/src.zip"), + list("/usr/lib/jvm/java-8-openjdk-amd64/jre/src.zip"), transform(sourcePaths, Object::toString)), String.class); diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java index 04aa3b8..6c1f503 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -4,8 +4,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import org.eclipse.jdt.core.dom.*; import org.zwobble.couscous.ast.*; -import org.zwobble.couscous.ast.VariableDeclaration; -import org.zwobble.couscous.ast.identifiers.Identifier; import org.zwobble.couscous.ast.sugar.Lambda; import org.zwobble.couscous.util.ExtraLists; @@ -19,7 +17,6 @@ import java.util.function.Function; import static com.google.common.collect.Iterables.concat; import static com.google.common.collect.Iterables.transform; -import static com.google.common.collect.Maps.immutableEntry; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static org.zwobble.couscous.ast.AnnotationNode.annotation; @@ -27,13 +24,11 @@ import static org.zwobble.couscous.ast.AssignmentNode.assignStatement; import static org.zwobble.couscous.ast.ConstructorNode.constructor; import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.FieldDeclarationNode.field; -import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; import static org.zwobble.couscous.ast.ThisReferenceNode.thisReference; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.frontends.java.FreeVariables.findFreeVariables; import static org.zwobble.couscous.frontends.java.JavaTypes.*; import static org.zwobble.couscous.util.ExtraLists.*; -import static org.zwobble.couscous.util.ExtraMaps.toMap; public class JavaReader { public static List<ClassNode> readClassFromFile(List<Path> sourcePaths, Path sourcePath) throws IOException { @@ -99,7 +94,7 @@ public class JavaReader { name, superTypesAndSelf(functionalInterfaceMethod.getDeclaringClass()), emptyList(), - ImmutableList.of(method)); + list(method)); classes.add(closure.getClassNode()); return closure; diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java index 6a12a72..41809b7 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java @@ -35,16 +35,16 @@ class JavaStatementReader { return readBlock((Block)statement); case ASTNode.RETURN_STATEMENT: - return asList(readReturnStatement((ReturnStatement)statement)); + return list(readReturnStatement((ReturnStatement)statement)); case ASTNode.EXPRESSION_STATEMENT: - return asList(readExpressionStatement((ExpressionStatement)statement)); + return list(readExpressionStatement((ExpressionStatement)statement)); case ASTNode.IF_STATEMENT: - return asList(readIfStatement((IfStatement)statement)); + return list(readIfStatement((IfStatement)statement)); case ASTNode.WHILE_STATEMENT: - return asList(readWhileStatement((WhileStatement)statement)); + return list(readWhileStatement((WhileStatement)statement)); case ASTNode.FOR_STATEMENT: return readForStatement((ForStatement)statement); diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java index 9bf6a51..bc3ef80 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java @@ -6,6 +6,7 @@ import org.zwobble.couscous.values.ObjectValues; import org.zwobble.couscous.values.StringValue; import static java.util.Arrays.asList; +import static org.zwobble.couscous.util.ExtraLists.list; public class BoxedIntegerInterpreterValue { public static ObjectInterpreterValue of(int value) { @@ -21,19 +22,19 @@ public class BoxedIntegerInterpreterValue { public static final ConcreteType TYPE = ConcreteType.classBuilder("java.lang.Integer") .field("value", IntegerValue.REF) - .staticMethod("parseInt", asList(StringValue.REF), + .staticMethod("parseInt", list(StringValue.REF), (environment, arguments) -> { StringInterpreterValue value = (StringInterpreterValue)arguments.get(0); return new IntegerInterpreterValue(Integer.parseInt(value.getValue())); }) - .staticMethod("valueOf", asList(IntegerValue.REF), + .staticMethod("valueOf", list(IntegerValue.REF), (environment, arguments) -> { IntegerInterpreterValue value = (IntegerInterpreterValue)arguments.get(0); return of(value); }) - .method(Operator.EQUALS.getMethodName(), asList(ObjectValues.OBJECT), + .method(Operator.EQUALS.getMethodName(), list(ObjectValues.OBJECT), (environment, arguments) -> { InterpreterValue right = arguments.getPositionalArguments().get(0); if (right.getType().getName().equals(ObjectValues.BOXED_INT)) { @@ -45,7 +46,7 @@ public class BoxedIntegerInterpreterValue { } }) - .method("toString", asList(), + .method("toString", list(), (environment, arguments) -> { IntegerInterpreterValue value = (IntegerInterpreterValue)arguments.getReceiver().getField("value"); return new StringInterpreterValue(Integer.toString(value.getValue())); diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java index 9c688ab..b3f9eb1 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java @@ -1,15 +1,19 @@ package org.zwobble.couscous.interpreter.values; +import com.google.common.collect.ImmutableMap; +import org.zwobble.couscous.ast.ClassNode; +import org.zwobble.couscous.ast.FormalArgumentNode; +import org.zwobble.couscous.ast.MethodSignature; +import org.zwobble.couscous.ast.TypeName; +import org.zwobble.couscous.interpreter.*; +import org.zwobble.couscous.util.Casts; + import java.util.*; import java.util.function.BiFunction; import java.util.stream.Collectors; -import org.zwobble.couscous.ast.*; -import org.zwobble.couscous.interpreter.*; -import org.zwobble.couscous.util.Casts; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import static java.util.stream.Collectors.toMap; +import static org.zwobble.couscous.util.ExtraLists.list; public class ConcreteType { @@ -27,7 +31,7 @@ public class ConcreteType { public static class Builder<T> { private final ImmutableMap.Builder<String, FieldValue> fields = ImmutableMap.builder(); - private MethodValue constructor = new MethodValue(ImmutableList.of(), (environment, arguments) -> InterpreterValues.UNIT); + private MethodValue constructor = new MethodValue(list(), (environment, arguments) -> InterpreterValues.UNIT); private final ImmutableMap.Builder<MethodSignature, MethodValue> methods = ImmutableMap.builder(); private final ImmutableMap.Builder<MethodSignature, StaticMethodValue> staticMethods = ImmutableMap.builder(); private final Class<T> interpreterValueType; diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java index 3e80a21..4349d5d 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java @@ -11,20 +11,21 @@ import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; import static java.util.Arrays.asList; +import static org.zwobble.couscous.util.ExtraLists.list; public final class IntegerInterpreterValue implements InterpreterValue { public static final ConcreteType TYPE = ConcreteType.builder(IntegerInterpreterValue.class, IntegerValue.REF) - .method(Operator.ADD.getMethodName(), asList(IntegerValue.REF), + .method(Operator.ADD.getMethodName(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left + right)) - .method(Operator.SUBTRACT.getMethodName(), asList(IntegerValue.REF), + .method(Operator.SUBTRACT.getMethodName(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left - right)) - .method(Operator.MULTIPLY.getMethodName(), asList(IntegerValue.REF), + .method(Operator.MULTIPLY.getMethodName(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left * right)) - .method(Operator.DIVIDE.getMethodName(), asList(IntegerValue.REF), + .method(Operator.DIVIDE.getMethodName(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left / right)) - .method(Operator.MOD.getMethodName(), asList(IntegerValue.REF), + .method(Operator.MOD.getMethodName(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left % right)) - .method(Operator.EQUALS.getMethodName(), asList(ObjectValues.OBJECT), + .method(Operator.EQUALS.getMethodName(), list(ObjectValues.OBJECT), (environment, arguments) -> { InterpreterValue right = arguments.getPositionalArguments().get(0); if (right instanceof IntegerInterpreterValue) { @@ -33,20 +34,20 @@ public final class IntegerInterpreterValue implements InterpreterValue { return new BooleanInterpreterValue(false); } }) - .method(Operator.EQUALS.getMethodName(), asList(IntegerValue.REF), + .method(Operator.EQUALS.getMethodName(), list(IntegerValue.REF), (environment, arguments) -> { IntegerInterpreterValue right = (IntegerInterpreterValue)arguments.getPositionalArguments().get(0); return integerEquals(arguments, right); }) - .method(Operator.NOT_EQUALS.getMethodName(), asList(IntegerValue.REF), + .method(Operator.NOT_EQUALS.getMethodName(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> !left.equals(right))) - .method(Operator.GREATER_THAN.getMethodName(), asList(IntegerValue.REF), + .method(Operator.GREATER_THAN.getMethodName(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> left > right)) - .method(Operator.GREATER_THAN_OR_EQUAL.getMethodName(), asList(IntegerValue.REF), + .method(Operator.GREATER_THAN_OR_EQUAL.getMethodName(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> left >= right)) - .method(Operator.LESS_THAN.getMethodName(), asList(IntegerValue.REF), + .method(Operator.LESS_THAN.getMethodName(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> left < right)) - .method(Operator.LESS_THAN_OR_EQUAL.getMethodName(), asList(IntegerValue.REF), + .method(Operator.LESS_THAN_OR_EQUAL.getMethodName(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> left <= right)) .build(); diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java index 7231d0b..023dec7 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java @@ -5,10 +5,11 @@ import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.ObjectValues; import static java.util.Arrays.asList; +import static org.zwobble.couscous.util.ExtraLists.list; public class InternalCouscousInterpreterValue { public static final ConcreteType TYPE = ConcreteType.classBuilder("_couscous") - .staticMethod("same", asList(ObjectValues.OBJECT, ObjectValues.OBJECT), + .staticMethod("same", list(ObjectValues.OBJECT, ObjectValues.OBJECT), (environment, arguments) -> new BooleanInterpreterValue(arguments.get(0) == arguments.get(1))) diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java index 42ee713..bbc9f6c 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java @@ -7,9 +7,10 @@ import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; import org.zwobble.couscous.values.StringValue; import static java.util.Arrays.asList; +import static org.zwobble.couscous.util.ExtraLists.list; public final class StringInterpreterValue implements InterpreterValue { - public static final ConcreteType TYPE = ConcreteType.builder(StringInterpreterValue.class, StringValue.REF).method("length", asList(), (environment, arguments) -> new IntegerInterpreterValue(arguments.getReceiver().value.length())).method("substring", asList(IntegerValue.REF, IntegerValue.REF), (environment, arguments) -> { + public static final ConcreteType TYPE = ConcreteType.builder(StringInterpreterValue.class, StringValue.REF).method("length", list(), (environment, arguments) -> new IntegerInterpreterValue(arguments.getReceiver().value.length())).method("substring", list(IntegerValue.REF, IntegerValue.REF), (environment, arguments) -> { IntegerInterpreterValue startIndex = (IntegerInterpreterValue)arguments.get(0); IntegerInterpreterValue endIndex = (IntegerInterpreterValue)arguments.get(1); return new StringInterpreterValue(arguments.getReceiver().value.substring(startIndex.getValue(), endIndex.getValue())); diff --git a/src/main/java/org/zwobble/couscous/util/ExtraLists.java b/src/main/java/org/zwobble/couscous/util/ExtraLists.java index e0c183a..dda2479 100644 --- a/src/main/java/org/zwobble/couscous/util/ExtraLists.java +++ b/src/main/java/org/zwobble/couscous/util/ExtraLists.java @@ -1,5 +1,7 @@ package org.zwobble.couscous.util; +import com.google.common.collect.ImmutableList; + import java.util.List; import java.util.function.Function; import java.util.function.Predicate; @@ -8,6 +10,18 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; public class ExtraLists { + public static <T> List<T> list() { + return ImmutableList.of(); + } + + public static <T> List<T> list(T value1) { + return ImmutableList.of(value1); + } + + public static <T> List<T> list(T value1, T value2) { + return ImmutableList.of(value1, value2); + } + public static <T> List<T> cons(T value, List<T> list) { return Stream.concat(Stream.of(value), list.stream()).collect(Collectors.toList()); } |
