Skip to content

Package: AssignNode

AssignNode

nameinstructionbranchcomplexitylinemethod
AssignNode(AbstractNode)
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
AssignNode(AbstractNode, AbstractNode)
M: 0 C: 10
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
AssignNode(AbstractNode, AbstractNode, AbstractNode)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
equals(Object)
M: 0 C: 11
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
hashCode()
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
interpret(CommunicationManager)
M: 0 C: 69
100%
M: 0 C: 8
100%
M: 0 C: 5
100%
M: 0 C: 15
100%
M: 0 C: 1
100%
toString()
M: 0 C: 12
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%

Coverage

1: package pruefskript.parser.nodes;
2:
3: import basic.PruefskriptConstants;
4: import model.assignment.VariableAssignment;
5: import pruefskript.CommunicationManager;
6: import pruefskript.parser.exceptions.AssignmentException;
7: import pruefskript.parser.exceptions.CheckScriptException;
8: import pruefskript.parser.exceptions.WrongNodeException;
9: import pruefskript.parser.values.AbstractReturnValue;
10: import pruefskript.parser.values.VoidValue;
11:
12: /**
13: * AssignNode setzt die Variable auf den mitgegebenen Wert oder erstellt sie, wenn sie noch nicht
14: * existiert.
15: *
16: * @author B5
17: *
18: */
19: public class AssignNode extends AbstractTrinaryOperationNode {
20:
21:         /**
22:          * AssignNode. Setzt eine boolesche Variable auf "yes".
23:          *
24:          * @param operand
25:          * AbstractNode
26:          */
27:         public AssignNode(final AbstractNode operand) {
28:                 super(operand, new NumNode(0), new StringNode(PruefskriptConstants.TRUEVALUE));
29:         }
30:
31:         /**
32:          * AssignNode.
33:          *
34:          * @param operand1
35:          * AbstractNode
36:          * @param operand2
37:          * AbstractNode
38:          */
39:         public AssignNode(final AbstractNode operand1, final AbstractNode operand2) {
40:                 super(operand1, new NumNode(0), operand2);
41:         }
42:
43:         /**
44:          * AssignNode.
45:          *
46:          * @param operand1
47:          * AbstractNode
48:          * @param operand2
49:          * AbstractNode
50:          * @param operand3
51:          * AbstractNode
52:          */
53:         public AssignNode(final AbstractNode operand1, final AbstractNode operand2,
54:                         final AbstractNode operand3) {
55:                 super(operand1, operand2, operand3);
56:         }
57:
58:         @Override
59:         public String toString() {
60:                 return PruefskriptConstants.ASSIGNNODETITLE + PruefskriptConstants.BRACKET_OPEN
61:                                 + super.toString() + PruefskriptConstants.BRACKET_CLOSE;
62:         }
63:
64:         @Override
65:         public boolean equals(final Object obj) {
66:•                return super.equals(obj) && obj instanceof AssignNode;
67:
68:         }
69:
70:         @Override
71:         public int hashCode() {
72:                 return super.hashCode() + PruefskriptConstants.ASSIGNNODE_HASHCODE;
73:         }
74:
75:         @Override
76:         public VoidValue interpret(final CommunicationManager mgr) throws CheckScriptException {
77:                 final String name;
78:•                if (getOperand1().isIDNode()) {
79:                         name = getOperand1().toIDNode().getName();
80:•                } else if (getOperand1().isIDSetNode()) {
81:                         name = getOperand1().toIDSetNode().getName();
82:                 } else {
83:                         throw new WrongNodeException(PruefskriptConstants.UNEXPECTED_ID);
84:                 }
85:                 final VariableAssignment assign = mgr.getVariableAssignment(name);
86:•                if (assign != null) {
87:                         throw new AssignmentException(name);
88:                 }
89:                 final AbstractReturnValue op2 = getOperand2().interpret(mgr);
90:•                if (op2.isNumericValue()) {
91:                         final Integer index = op2.toNumericValue().getValue();
92:                         mgr.addValue(name, index, getOperand3().interpret(mgr));
93:                 } else {
94:                         throw new WrongNodeException(PruefskriptConstants.UNEXPECTED_NUM_OPERATION);
95:                 }
96:                 return new VoidValue();
97:         }
98: }