Representation of assign statements. @param type of lvalue. @param type of rvalue.
| 37 | * @param <R> type of rvalue. |
| 38 | */ |
| 39 | public abstract class AssignStmt<L extends LValue, R extends RValue> |
| 40 | extends DefinitionStmt<L, R> { |
| 41 | |
| 42 | private final L lvalue; |
| 43 | |
| 44 | private final R rvalue; |
| 45 | |
| 46 | public AssignStmt(L lvalue, R rvalue) { |
| 47 | this.lvalue = lvalue; |
| 48 | this.rvalue = rvalue; |
| 49 | } |
| 50 | |
| 51 | @Override |
| 52 | @Nonnull |
| 53 | public L getLValue() { |
| 54 | return lvalue; |
| 55 | } |
| 56 | |
| 57 | @Override |
| 58 | public R getRValue() { |
| 59 | return rvalue; |
| 60 | } |
| 61 | |
| 62 | @Override |
| 63 | public Optional<LValue> getDef() { |
| 64 | return Optional.of(lvalue); |
| 65 | } |
| 66 | |
| 67 | @Override |
| 68 | public Set<RValue> getUses() { |
| 69 | Set<RValue> lUses = lvalue.getUses(); |
| 70 | Set<RValue> rUses = rvalue.getUses(); |
| 71 | Set<RValue> uses = new ArraySet<>(lUses.size() + rUses.size() + 1); |
| 72 | uses.addAll(lUses); |
| 73 | uses.addAll(rUses); |
| 74 | uses.add(rvalue); |
| 75 | return uses; |
| 76 | } |
| 77 | |
| 78 | @Override |
| 79 | public String toString() { |
| 80 | return lvalue + " = " + rvalue; |
| 81 | } |
| 82 | } |
nothing calls this directly
no outgoing calls
no test coverage detected