Skip to content

Commit 86ec6f5

Browse files
author
Amarin Phaosawasdi
committed
Fixed #72. Used IUndoContext.
1 parent efa9a81 commit 86ec6f5

File tree

1 file changed

+49
-102
lines changed

1 file changed

+49
-102
lines changed

plugins/checker.framework.errorcentric.view/src/checker/framework/errorcentric/view/views/ChangeUndoRedoSupporter.java

Lines changed: 49 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,48 @@
11
package checker.framework.errorcentric.view.views;
22

3-
import java.lang.reflect.Field;
4-
import java.util.Map;
5-
63
import org.eclipse.core.commands.operations.IOperationHistory;
74
import org.eclipse.core.commands.operations.IOperationHistoryListener;
5+
import org.eclipse.core.commands.operations.IUndoContext;
6+
import org.eclipse.core.commands.operations.IUndoableOperation;
87
import 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

179
public 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

Comments
 (0)