FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

moving more classes out, yech · cluder/processing@7478e23 · GitHub

Repository navigation

Commit 7478e23

Browse files
committed
moving more classes out, yech
1 parent f3dd18e commit 7478e23

4 files changed

Lines changed: 478 additions & 470 deletions

File tree

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package processing.mode.java.pdex;
2+
3+
import java.awt.EventQueue;
4+
import java.awt.Rectangle;
5+
import java.awt.event.ComponentAdapter;
6+
import java.awt.event.ComponentEvent;
7+
import java.util.ArrayDeque;
8+
import java.util.Deque;
9+
import java.util.function.Consumer;
10+
11+
import javax.swing.JDialog;
12+
import javax.swing.JFrame;
13+
import javax.swing.JScrollPane;
14+
import javax.swing.JTree;
15+
import javax.swing.tree.DefaultMutableTreeNode;
16+
import javax.swing.tree.DefaultTreeModel;
17+
18+
import org.eclipse.jdt.core.dom.ASTNode;
19+
import org.eclipse.jdt.core.dom.ASTVisitor;
20+
import org.eclipse.jdt.core.dom.CompilationUnit;
21+
22+
import processing.app.Messages;
23+
import processing.app.ui.ZoomTreeCellRenderer;
24+
import processing.mode.java.JavaEditor;
25+
import processing.mode.java.pdex.PreprocessedSketch.SketchInterval;
26+
27+
class DebugTree {
28+
final JDialog window;
29+
final JTree tree;
30+
final Consumer<PreprocessedSketch> updateListener;
31+
32+
33+
DebugTree(JavaEditor editor, PreprocessingService pps) {
34+
updateListener = this::buildAndUpdateTree;
35+
36+
window = new JDialog(editor);
37+
38+
tree = new JTree() {
39+
@Override
40+
public String convertValueToText(Object value, boolean selected,
41+
boolean expanded, boolean leaf,
42+
int row, boolean hasFocus) {
43+
if (value instanceof DefaultMutableTreeNode) {
44+
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) value;
45+
Object o = treeNode.getUserObject();
46+
if (o instanceof ASTNode) {
47+
ASTNode node = (ASTNode) o;
48+
return CompletionGenerator.getNodeAsString(node);
49+
}
50+
}
51+
return super.convertValueToText(value, selected, expanded, leaf, row, hasFocus);
52+
}
53+
};
54+
tree.setCellRenderer(new ZoomTreeCellRenderer(editor.getMode()));
55+
window.addComponentListener(new ComponentAdapter() {
56+
@Override
57+
public void componentHidden(ComponentEvent e) {
58+
pps.unregisterListener(updateListener);
59+
tree.setModel(null);
60+
}
61+
});
62+
window.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
63+
window.setBounds(new Rectangle(680, 100, 460, 620));
64+
window.setTitle("AST View - " + editor.getSketch().getName());
65+
JScrollPane sp = new JScrollPane();
66+
sp.setViewportView(tree);
67+
window.add(sp);
68+
pps.whenDone(updateListener);
69+
pps.registerListener(updateListener);
70+
71+
tree.addTreeSelectionListener(e -> {
72+
if (tree.getLastSelectedPathComponent() != null) {
73+
DefaultMutableTreeNode tnode =
74+
(DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
75+
if (tnode.getUserObject() instanceof ASTNode) {
76+
ASTNode node = (ASTNode) tnode.getUserObject();
77+
pps.whenDone(ps -> {
78+
SketchInterval si = ps.mapJavaToSketch(node);
79+
if (!ps.inRange(si)) return;
80+
EventQueue.invokeLater(() -> {
81+
editor.highlight(si.tabIndex, si.startTabOffset, si.stopTabOffset);
82+
});
83+
});
84+
}
85+
}
86+
});
87+
}
88+
89+
90+
void dispose() {
91+
if (window != null) {
92+
window.dispose();
93+
}
94+
}
95+
96+
97+
// Thread: worker
98+
void buildAndUpdateTree(PreprocessedSketch ps) {
99+
CompilationUnit cu = ps.compilationUnit;
100+
if (cu.types().isEmpty()){
101+
Messages.loge("No Type found in CU");
102+
return;
103+
}
104+
105+
Deque<DefaultMutableTreeNode> treeNodeStack = new ArrayDeque<>();
106+
107+
ASTNode type0 = (ASTNode) cu.types().get(0);
108+
type0.accept(new ASTVisitor() {
109+
@Override
110+
public boolean preVisit2(ASTNode node) {
111+
treeNodeStack.push(new DefaultMutableTreeNode(node));
112+
return super.preVisit2(node);
113+
}
114+
115+
@Override
116+
public void postVisit(ASTNode node) {
117+
if (treeNodeStack.size() > 1) {
118+
DefaultMutableTreeNode treeNode = treeNodeStack.pop();
119+
treeNodeStack.peek().add(treeNode);
120+
}
121+
}
122+
});
123+
124+
DefaultMutableTreeNode codeTree = treeNodeStack.pop();
125+
126+
EventQueue.invokeLater(() -> {
127+
if (tree.hasFocus() || window.hasFocus()) {
128+
return;
129+
}
130+
tree.setModel(new DefaultTreeModel(codeTree));
131+
((DefaultTreeModel) tree.getModel()).reload();
132+
tree.validate();
133+
if (!window.isVisible()) {
134+
window.setVisible(true);
135+
}
136+
});
137+
}
138+
}

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL