diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-13 14:53:32 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-13 14:53:32 +0000 |
| commit | bac463d6b411c2108d56190b5766c9c92eade69d (patch) | |
| tree | 1fc35105e655846cb8ead1e96781d4b9e65e4726 /src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java | |
| parent | d5c90f5ff00b3ccfb6c2c95bf2176e133c5102fa (diff) | |
Distinguish static and instance fields when checking field exists
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java index fc082a5..df33d60 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java @@ -8,18 +8,26 @@ import java.util.HashMap; import java.util.Map; public class InterpreterFields { - // TODO: distinguish static and non-static fields + public static InterpreterFields forClass(ConcreteType type) { + return new InterpreterFields(true, type); + } + + public static InterpreterFields forInstanceOf(ConcreteType type) { + return new InterpreterFields(false, type); + } + private final boolean isStatic; private final ConcreteType type; private final Map<String, InterpreterValue> fields; - public InterpreterFields(ConcreteType type) { + private InterpreterFields(boolean isStatic, ConcreteType type) { + this.isStatic = isStatic; this.type = type; this.fields = new HashMap<>(); } public InterpreterValue getField(String fieldName) { - type.getField(fieldName).orElseThrow(() -> new NoSuchField(fieldName)); + getFieldDefinition(fieldName); if (fields.containsKey(fieldName)) { return fields.get(fieldName); } else { @@ -28,9 +36,13 @@ public class InterpreterFields { } public void setField(String fieldName, InterpreterValue value) { - FieldValue field = type.getField(fieldName) - .orElseThrow(() -> new NoSuchField(fieldName)); + FieldValue field = getFieldDefinition(fieldName); InterpreterTypes.checkIsInstance(field.getType(), value); fields.put(fieldName, value); } + + private FieldValue getFieldDefinition(String fieldName) { + return type.getField(isStatic, fieldName) + .orElseThrow(() -> new NoSuchField(fieldName)); + } } |
