1 4 package org.terracotta.dso; 5 6 7 import org.eclipse.jdt.core.ElementChangedEvent; 8 import org.eclipse.jdt.core.ICompilationUnit; 9 import org.eclipse.jdt.core.IElementChangedListener; 10 import org.eclipse.jdt.core.IJavaElement; 11 import org.eclipse.jdt.core.IJavaElementDelta; 12 13 22 23 public class ElementChangedListener implements IElementChangedListener { 24 private static final boolean 25 m_debug = Boolean.getBoolean("ElementChangedListener.debug"); 26 27 public void elementChanged(ElementChangedEvent ece) { 28 TcPlugin plugin = TcPlugin.getDefault(); 29 IJavaElementDelta delta = ece.getDelta(); 30 int kind = delta.getKind(); 31 int flags = delta.getFlags(); 32 33 if(m_debug) { 34 dump(delta); 35 } 36 37 switch(kind) { 38 case IJavaElementDelta.CHANGED: 39 case IJavaElementDelta.ADDED: 40 { 41 if((flags & IJavaElementDelta.F_CONTENT) != 0 || 42 (flags & IJavaElementDelta.F_PRIMARY_RESOURCE) != 0 || 43 ((flags & IJavaElementDelta.F_CHILDREN) != 0 && 44 (flags & IJavaElementDelta.F_FINE_GRAINED) != 0)) 45 { 46 IJavaElement elem = delta.getElement(); 47 48 if(plugin.hasTerracottaNature(elem)) { 49 if(elem instanceof ICompilationUnit) { 50 TcPlugin.getDefault().inspect((ICompilationUnit)elem); 51 } 52 } 53 } 54 } 55 } 56 } 57 58 private static void dump(IJavaElementDelta delta) { 59 int kind = delta.getKind(); 60 int flags = delta.getFlags(); 61 StringBuffer sb = new StringBuffer (); 62 63 sb.append(delta); 64 65 switch(kind) { 66 case IJavaElementDelta.ADDED: 67 sb.append(" ADDED"); 68 IJavaElement movedFrom = delta.getMovedFromElement(); 69 if(movedFrom != null) { 70 sb.append("moved_from: " + movedFrom); 71 } 72 break; 73 case IJavaElementDelta.REMOVED: 74 sb.append(" REMOVED"); 75 IJavaElement movedTo = delta.getMovedToElement(); 76 if(movedTo != null) { 77 sb.append("moved_to: " + movedTo); 78 } 79 break; 80 case IJavaElementDelta.CHANGED: 81 sb.append(" CHANGED"); 82 break; 83 } 84 85 if((flags & IJavaElementDelta.F_CONTENT) != 0) { 86 sb.append(" F_CONTENT"); 87 } 88 if((flags & IJavaElementDelta.F_MODIFIERS) != 0) { 89 sb.append(" F_MODIFIERS"); 90 } 91 if((flags & IJavaElementDelta.F_CHILDREN) != 0) { 92 sb.append(" F_CHILDREN"); 93 94 IJavaElementDelta[] children = delta.getAffectedChildren(); 95 if(children != null && children.length > 0) { 96 sb.append("\n"); 97 if(children.length == 2) { 98 if(children[0].getKind() == IJavaElementDelta.ADDED && 99 children[1].getKind() == IJavaElementDelta.REMOVED) 100 { 101 IJavaElement fromElem = children[1].getElement(); 102 IJavaElement toElem = children[0].getElement(); 103 104 if(fromElem.getElementType() == toElem.getElementType()) { 105 sb.append(fromElem.getElementName() + " moved to " + toElem.getElementName()); 106 } 107 } 108 } 109 for(int i = 0; i < children.length; i++) { 110 dump(children[i]); 111 } 112 } 113 } 114 if((flags & IJavaElementDelta.F_MOVED_FROM) == IJavaElementDelta.F_MOVED_FROM) { 115 sb.append(" F_MOVED_FROM"); 116 } 117 if((flags & IJavaElementDelta.F_MOVED_TO) == IJavaElementDelta.F_MOVED_TO) { 118 sb.append(" F_MOVED_TO"); 119 } 120 if((flags & IJavaElementDelta.F_ADDED_TO_CLASSPATH) != 0) { 121 sb.append(" F_ADDED_TO_CLASSPATH"); 122 } 123 if((flags & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) != 0) { 124 sb.append(" F_REMOVED_FROM_CLASSPATH"); 125 } 126 if((flags & IJavaElementDelta.F_REORDER) != 0) { 127 sb.append(" F_REORDER"); 128 } 129 if((flags & IJavaElementDelta.F_OPENED) != 0) { 130 sb.append(" F_OPENED"); 131 } 132 if((flags & IJavaElementDelta.F_CLOSED) != 0) { 133 sb.append(" F_CLOSED"); 134 } 135 if((flags & IJavaElementDelta.F_SUPER_TYPES) != 0) { 136 sb.append(" F_SUPER_TYPES"); 137 } 138 if((flags & IJavaElementDelta.F_SOURCEATTACHED) != 0) { 139 sb.append(" F_SOURCEATTACHED"); 140 } 141 if((flags & IJavaElementDelta.F_SOURCEDETACHED) != 0) { 142 sb.append(" F_SOURCEDETACHED"); 143 } 144 if((flags & IJavaElementDelta.F_FINE_GRAINED) != 0) { 145 sb.append(" F_FINE_GRAINED"); 146 } 147 if((flags & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) != 0) { 148 sb.append(" F_ARCHIVE_CONTENT_CHANGED"); 149 } 150 if((flags & IJavaElementDelta.F_PRIMARY_WORKING_COPY) != 0) { 151 sb.append(" F_PRIMARY_WORKING_COPY"); 152 } 153 if((flags & IJavaElementDelta.F_CLASSPATH_CHANGED) != 0) { 154 sb.append(" F_CLASSPATH_CHANGED"); 155 } 156 if((flags & IJavaElementDelta.F_PRIMARY_RESOURCE) != 0) { 157 sb.append(" F_PRIMARY_RESOURCE"); 158 } 159 160 System.out.println(sb.toString()); 161 } 162 } 163 | Popular Tags |