11package checker .framework .errorcentric .view .views ;
22
3- import java .lang .reflect .Field ;
4- import java .util .Map ;
5-
63import org .eclipse .core .commands .operations .IOperationHistory ;
74import org .eclipse .core .commands .operations .IOperationHistoryListener ;
5+ import org .eclipse .core .commands .operations .IUndoContext ;
6+ import org .eclipse .core .commands .operations .IUndoableOperation ;
87import org .eclipse .core .commands .operations .OperationHistoryEvent ;
9- import org .eclipse .core .commands .operations .TriggeredOperations ;
10- import org .eclipse .ltk .core .refactoring .ContentStamp ;
11- import org .eclipse .ltk .core .refactoring .TextFileChange ;
12- import org .eclipse .ltk .core .refactoring .UndoTextFileChange ;
13- import org .eclipse .ltk .internal .core .refactoring .UndoableOperation2ChangeAdapter ;
14-
15- import static com .google .common .collect .Maps .newHashMap ;
168
179public class ChangeUndoRedoSupporter {
10+ private class MarkerResolutionTreeNodeContext implements IUndoContext {
11+ private MarkerResolutionTreeNode markerResolutionTreeNode ;
12+
13+ public MarkerResolutionTreeNodeContext (
14+ MarkerResolutionTreeNode markerResolutionTreeNode ) {
15+ this .markerResolutionTreeNode = markerResolutionTreeNode ;
16+ }
17+
18+ public MarkerResolutionTreeNode getMarkerResolutionTreeNode () {
19+ return markerResolutionTreeNode ;
20+ }
21+
22+ @ Override
23+ public String getLabel () {
24+ return markerResolutionTreeNode .getName ();
25+ }
26+
27+ @ Override
28+ public boolean matches (IUndoContext context ) {
29+ if (context instanceof MarkerResolutionTreeNodeContext ) {
30+ MarkerResolutionTreeNodeContext other = (MarkerResolutionTreeNodeContext ) context ;
31+ return this .markerResolutionTreeNode
32+ .equals (other .markerResolutionTreeNode );
33+ }
34+ return false ;
35+ }
36+
37+ }
38+
1839 private MarkerResolutionTreeNode resolutionTreeNode ;
19- private Map <ContentStamp , MarkerResolutionTreeNode > operationMap ;
2040
2141 private IOperationHistory operationHistory ;
2242 private ChangeStateViewer changeStateViewer ;
2343
2444 public ChangeUndoRedoSupporter (IOperationHistory operationHistory ,
2545 ChangeStateViewer changeStateViewer ) {
26- this .operationMap = newHashMap ();
2746 this .operationHistory = operationHistory ;
2847 this .changeStateViewer = changeStateViewer ;
2948 }
@@ -35,106 +54,34 @@ public void initialize() {
3554 public void historyNotification (OperationHistoryEvent event ) {
3655
3756 if (event .getEventType () == OperationHistoryEvent .ABOUT_TO_UNDO ) {
38- TriggeredOperations to = (TriggeredOperations ) event
39- .getOperation ();
40- UndoableOperation2ChangeAdapter triggeringOperation = (UndoableOperation2ChangeAdapter ) to
41- .getTriggeringOperation ();
42- UndoTextFileChange undoTextFileChange = (UndoTextFileChange ) triggeringOperation
43- .getChange ();
44- try {
45- Field declaredField = UndoTextFileChange .class
46- .getDeclaredField ("fContentStampToRestore" );
47- declaredField .setAccessible (true );
48- ; // NoSuchFieldException
49- ContentStamp contentStampToRestore = (ContentStamp ) declaredField
50- .get (undoTextFileChange );
51-
52- MarkerResolutionTreeNode markerResolutionTreeNode = operationMap
53- .get (contentStampToRestore );
54- if (markerResolutionTreeNode != null ) {
57+ IUndoContext [] contexts = event .getOperation ()
58+ .getContexts ();
59+ for (IUndoContext context : contexts ) {
60+ if (context instanceof MarkerResolutionTreeNodeContext ) {
61+ MarkerResolutionTreeNode markerResolutionTreeNode = ((MarkerResolutionTreeNodeContext ) context )
62+ .getMarkerResolutionTreeNode ();
5563 changeStateViewer
5664 .enableChange (markerResolutionTreeNode );
5765 }
58- } catch (IllegalArgumentException e ) {
59- // TODO Auto-generated catch block
60- e .printStackTrace ();
61- } catch (IllegalAccessException e ) {
62- // TODO Auto-generated catch block
63- e .printStackTrace ();
64- } catch (NoSuchFieldException e ) {
65- // TODO Auto-generated catch block
66- e .printStackTrace ();
67- } catch (SecurityException e ) {
68- // TODO Auto-generated catch block
69- e .printStackTrace ();
7066 }
7167 } else if (event .getEventType () == OperationHistoryEvent .REDONE ) {
72- TriggeredOperations to = (TriggeredOperations ) event
73- .getOperation ();
74- UndoableOperation2ChangeAdapter triggeringOperation = (UndoableOperation2ChangeAdapter ) to
75- .getTriggeringOperation ();
76- UndoTextFileChange undoTextFileChange = (UndoTextFileChange ) triggeringOperation
77- .getChange ();
78- try {
79- Field declaredField = UndoTextFileChange .class
80- .getDeclaredField ("fContentStampToRestore" );
81- declaredField .setAccessible (true );
82- ; // NoSuchFieldException
83- ContentStamp contentStampToRestore = (ContentStamp ) declaredField
84- .get (undoTextFileChange );
85-
86- MarkerResolutionTreeNode markerResolutionTreeNode = operationMap
87- .get (contentStampToRestore );
88- if (markerResolutionTreeNode != null ) {
68+ IUndoContext [] contexts = event .getOperation ()
69+ .getContexts ();
70+ for (IUndoContext context : contexts ) {
71+ if (context instanceof MarkerResolutionTreeNodeContext ) {
72+ MarkerResolutionTreeNode markerResolutionTreeNode = ((MarkerResolutionTreeNodeContext ) context )
73+ .getMarkerResolutionTreeNode ();
8974 changeStateViewer
9075 .disableChange (markerResolutionTreeNode );
91-
9276 }
93- } catch (IllegalArgumentException e ) {
94- // TODO Auto-generated catch block
95- e .printStackTrace ();
96- } catch (IllegalAccessException e ) {
97- // TODO Auto-generated catch block
98- e .printStackTrace ();
99- } catch (NoSuchFieldException e ) {
100- // TODO Auto-generated catch block
101- e .printStackTrace ();
102- } catch (SecurityException e ) {
103- // TODO Auto-generated catch block
104- e .printStackTrace ();
10577 }
10678 } else if (event .getEventType () == OperationHistoryEvent .ABOUT_TO_EXECUTE ) {
107- TriggeredOperations operation = (TriggeredOperations ) event
108- .getOperation ();
109- UndoableOperation2ChangeAdapter triggeringOperation = (UndoableOperation2ChangeAdapter ) operation
110- .getTriggeringOperation ();
111- TextFileChange change = (TextFileChange ) triggeringOperation
112- .getChange ();
113-
114- Field declaredField ;
115- try {
116- declaredField = TextFileChange .class
117- .getDeclaredField ("fContentStamp" );
118- declaredField .setAccessible (true );
119- ; // NoSuchFieldException
120- ContentStamp contentStamp = (ContentStamp ) declaredField
121- .get (change );
122- if (resolutionTreeNode != null ) {
123- operationMap .put (contentStamp ,
124- resolutionTreeNode );
125- }
126- } catch (NoSuchFieldException e ) {
127- // TODO Auto-generated catch block
128- e .printStackTrace ();
129- } catch (SecurityException e ) {
130- // TODO Auto-generated catch block
131- e .printStackTrace ();
132- } catch (IllegalArgumentException e ) {
133- // TODO Auto-generated catch block
134- e .printStackTrace ();
135- } catch (IllegalAccessException e ) {
136- // TODO Auto-generated catch block
137- e .printStackTrace ();
79+ if (resolutionTreeNode != null ) {
80+ IUndoableOperation operation = event
81+ .getOperation ();
82+ operation
83+ .addContext (new MarkerResolutionTreeNodeContext (
84+ resolutionTreeNode ));
13885 }
13986 } else if (event .getEventType () == OperationHistoryEvent .DONE ) {
14087 if (resolutionTreeNode != null ) {
0 commit comments