GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — processing4/java/src/processing/mode/java/ASTViewer.java at main · D-I-R-M/processing4 Expand file tree/ Copy pathASTViewer.javaMore file actions 135 lines (115 loc) · 4.02 KB / Copy pathASTViewer.javaFile metadata and controls135 lines (115 loc) · 4.02 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 package processing.mode.java; import java.awt.EventQueue; import java.awt.Rectangle; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.util.ArrayDeque; import java.util.Deque; import java.util.function.Consumer; import javax.swing.JDialog; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.WindowConstants; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.CompilationUnit; import processing.app.Messages; import processing.app.ui.ZoomTreeCellRenderer; class ASTViewer { final JDialog window; final JTree tree; final Consumer<PreprocSketch> updateListener; ASTViewer(JavaEditor editor, PreprocService pps) { updateListener = this::buildAndUpdateTree; window = new JDialog(editor); tree = new JTree() { @Override public String convertValueToText(Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value instanceof DefaultMutableTreeNode) { DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) value; Object o = treeNode.getUserObject(); if (o instanceof ASTNode) { ASTNode node = (ASTNode) o; return CompletionGenerator.getNodeAsString(node); } } return super.convertValueToText(value, selected, expanded, leaf, row, hasFocus); } }; tree.setCellRenderer(new ZoomTreeCellRenderer()); window.addComponentListener(new ComponentAdapter() { @Override public void componentHidden(ComponentEvent e) { pps.unregisterListener(updateListener); tree.setModel(null); } }); window.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); window.setBounds(new Rectangle(680, 100, 460, 620)); window.setTitle("AST View - " + editor.getSketch().getName()); JScrollPane sp = new JScrollPane(); sp.setViewportView(tree); window.add(sp); pps.whenDone(updateListener); pps.registerListener(updateListener); tree.addTreeSelectionListener(e -> { if (tree.getLastSelectedPathComponent() != null) { DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (treeNode.getUserObject() instanceof ASTNode) { ASTNode node = (ASTNode) treeNode.getUserObject(); pps.whenDone(ps -> { SketchInterval si = ps.mapJavaToSketch(node); if (!ps.inRange(si)) return; EventQueue.invokeLater(() -> editor.highlight(si.tabIndex, si.startTabOffset, si.stopTabOffset)); }); } } }); } void dispose() { if (window != null) { window.dispose(); } } // Thread: worker void buildAndUpdateTree(PreprocSketch ps) { CompilationUnit cu = ps.compilationUnit; if (cu.types().isEmpty()){ Messages.err("No Type found in CU"); return; } Deque<DefaultMutableTreeNode> treeNodeStack = new ArrayDeque<>(); ASTNode type0 = (ASTNode) cu.types().get(0); type0.accept(new ASTVisitor() { @Override public boolean preVisit2(ASTNode node) { treeNodeStack.push(new DefaultMutableTreeNode(node)); return super.preVisit2(node); } @Override public void postVisit(ASTNode node) { if (treeNodeStack.size() > 1) { DefaultMutableTreeNode treeNode = treeNodeStack.pop(); treeNodeStack.peek().add(treeNode); } } }); DefaultMutableTreeNode codeTree = treeNodeStack.pop(); EventQueue.invokeLater(() -> { if (tree.hasFocus() || window.hasFocus()) { return; } tree.setModel(new DefaultTreeModel(codeTree)); ((DefaultTreeModel) tree.getModel()).reload(); tree.validate(); if (!window.isVisible()) { window.setVisible(true); } }); } } |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |