KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > terracotta > dso > ElementChangedListener


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

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 /**
14  * Invoked when a Java module is changed in an editor. If the module
15  * is part of a Terracotta project and the changed element is an
16  * ICompilationUnit, inspect it.
17  *
18  * @see TcPlugin.inspect
19  * @see org.eclipse.jdt.core.JavaCore.addElementChangedListener
20  * @see org.eclipse.jdt.core.IElementChangedListener
21  */

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 JavaDoc sb = new StringBuffer JavaDoc();
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