1 11 package org.eclipse.jdt.internal.core.dom.rewrite; 12 13 import java.util.ArrayList ; 14 import java.util.List ; 15 16 import org.eclipse.jdt.core.dom.ASTNode; 17 18 21 public class ListRewriteEvent extends RewriteEvent { 22 23 public final static int NEW= 1; 24 public final static int OLD= 2; 25 public final static int BOTH= NEW | OLD; 26 27 28 private List originalNodes; 29 30 31 private List listEntries; 32 33 38 public ListRewriteEvent(List originalNodes) { 39 this.originalNodes= new ArrayList (originalNodes); 40 } 41 42 46 public ListRewriteEvent(RewriteEvent[] children) { 47 this.listEntries= new ArrayList (children.length * 2); 48 this.originalNodes= new ArrayList (children.length * 2); 49 for (int i= 0; i < children.length; i++) { 50 RewriteEvent curr= children[i]; 51 this.listEntries.add(curr); 52 if (curr.getOriginalValue() != null) { 53 this.originalNodes.add(curr.getOriginalValue()); 54 } 55 } 56 } 57 58 private List getEntries() { 59 if (this.listEntries == null) { 60 int nNodes= this.originalNodes.size(); 62 this.listEntries= new ArrayList (nNodes * 2); 63 for (int i= 0; i < nNodes; i++) { 64 ASTNode node= (ASTNode) this.originalNodes.get(i); 65 this.listEntries.add(new NodeRewriteEvent(node, node)); 67 } 68 } 69 return this.listEntries; 70 } 71 72 75 public int getChangeKind() { 76 if (this.listEntries != null) { 77 for (int i= 0; i < this.listEntries.size(); i++) { 78 RewriteEvent curr= (RewriteEvent) this.listEntries.get(i); 79 if (curr.getChangeKind() != UNCHANGED) { 80 return CHILDREN_CHANGED; 81 } 82 } 83 } 84 return UNCHANGED; 85 } 86 87 90 public boolean isListRewrite() { 91 return true; 92 } 93 94 97 public RewriteEvent[] getChildren() { 98 List entries= getEntries(); 99 return (RewriteEvent[]) entries.toArray(new RewriteEvent[entries.size()]); 100 } 101 102 105 public Object getOriginalValue() { 106 return this.originalNodes; 107 } 108 109 112 public Object getNewValue() { 113 List entries= getEntries(); 114 ArrayList res= new ArrayList (entries.size()); 115 for (int i= 0; i < entries.size(); i++) { 116 RewriteEvent curr= (RewriteEvent) entries.get(i); 117 Object newVal= curr.getNewValue(); 118 if (newVal != null) { 119 res.add(newVal); 120 } 121 } 122 return res; 123 } 124 125 127 public RewriteEvent removeEntry(ASTNode originalEntry) { 128 return replaceEntry(originalEntry, null); 129 } 130 131 public RewriteEvent replaceEntry(ASTNode originalEntry, ASTNode newEntry) { 132 if (originalEntry == null) { 133 throw new IllegalArgumentException (); 134 } 135 136 List entries= getEntries(); 137 int nEntries= entries.size(); 138 for (int i= 0; i < nEntries; i++) { 139 NodeRewriteEvent curr= (NodeRewriteEvent) entries.get(i); 140 if (curr.getOriginalValue() == originalEntry) { 141 curr.setNewValue(newEntry); 142 return curr; 143 } 144 } 145 return null; 146 } 147 148 public void revertChange(NodeRewriteEvent event) { 149 Object originalValue = event.getOriginalValue(); 150 if(originalValue == null) { 151 List entries= getEntries(); 152 entries.remove(event); 153 } else { 154 event.setNewValue(originalValue); 155 } 156 } 157 158 public int getIndex(ASTNode node, int kind) { 159 List entries= getEntries(); 160 for (int i= entries.size() - 1; i >= 0; i--) { 161 RewriteEvent curr= (RewriteEvent) entries.get(i); 162 if (((kind & OLD) != 0) && (curr.getOriginalValue() == node)) { 163 return i; 164 } 165 if (((kind & NEW) != 0) && (curr.getNewValue() == node)) { 166 return i; 167 } 168 } 169 return -1; 170 } 171 172 public RewriteEvent insert(ASTNode insertedNode, int insertIndex) { 173 NodeRewriteEvent change= new NodeRewriteEvent(null, insertedNode); 174 if (insertIndex != -1) { 175 getEntries().add(insertIndex, change); 176 } else { 177 getEntries().add(change); 178 } 179 return change; 180 } 181 182 public void setNewValue(ASTNode newValue, int insertIndex) { 183 NodeRewriteEvent curr= (NodeRewriteEvent) getEntries().get(insertIndex); 184 curr.setNewValue(newValue); 185 } 186 187 public int getChangeKind(int index) { 188 return ((NodeRewriteEvent) getEntries().get(index)).getChangeKind(); 189 } 190 191 194 public String toString() { 195 StringBuffer buf= new StringBuffer (); 196 buf.append(" [list change\n\t"); 198 RewriteEvent[] events= getChildren(); 199 for (int i= 0; i < events.length; i++) { 200 if (i != 0) { 201 buf.append("\n\t"); } 203 buf.append(events[i]); 204 } 205 buf.append("\n]"); return buf.toString(); 207 } 208 209 210 211 } 212 | Popular Tags |