aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-10 14:16:07 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-10 14:16:07 +0100
commit5116bf791a6360627e6683d818623b49e25900a5 (patch)
tree1b74dfcfdba4ee8989ddaf4cb49d86e87ccbdc9f /src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java
parent854993655d4318d565226413645268f0885df0cb (diff)
Move project classes into correct package
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java b/src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java
new file mode 100644
index 0000000..7206b1a
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java
@@ -0,0 +1,56 @@
+package org.zwobble.couscous.interpreter;
+
+import java.util.Map;
+
+import org.zwobble.couscous.ast.TypeName;
+import org.zwobble.couscous.interpreter.values.ConcreteType;
+
+import com.google.common.collect.ImmutableMap;
+
+import lombok.val;
+
+public class MapBackedProject implements Project {
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private final ImmutableMap.Builder<TypeName, ConcreteType> classes;
+
+ private Builder() {
+ classes = ImmutableMap.builder();
+ }
+
+ public Builder addClass(ConcreteType clazz) {
+ classes.put(clazz.getName(), clazz);
+ return this;
+ }
+
+ public Builder addClasses(Iterable<ConcreteType> classes) {
+ for (val clazz : classes) {
+ addClass(clazz);
+ }
+ return this;
+ }
+
+ public Project build() {
+ return new MapBackedProject(classes.build());
+ }
+ }
+
+ private Map<TypeName, ConcreteType> classes;
+
+ public MapBackedProject(Map<TypeName, ConcreteType> classes) {
+ this.classes = classes;
+ }
+
+ @Override
+ public ConcreteType findClass(TypeName name) {
+ if (classes.containsKey(name)) {
+ return classes.get(name);
+ } else {
+ throw new IllegalArgumentException("Cannot find class: " + name);
+ }
+
+ }
+}