git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@7155 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Brian Remedios
2010-10-05 03:54:40 +00:00
parent b00759052e
commit 25093cb56c
3 changed files with 128 additions and 33 deletions

View File

@ -7,7 +7,6 @@ import net.sourceforge.pmd.eclipse.ui.views.AbstractResourceView;
import net.sourceforge.pmd.eclipse.ui.views.AbstractStructureInspectorPage;
import net.sourceforge.pmd.eclipse.ui.views.actions.CollapseAllAction;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.ui.IWorkbenchPart;

View File

@ -4,6 +4,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sourceforge.pmd.eclipse.ui.BasicTableLabelProvider;
import net.sourceforge.pmd.eclipse.ui.editors.SyntaxManager;
import net.sourceforge.pmd.eclipse.ui.model.FileRecord;
import net.sourceforge.pmd.eclipse.ui.views.AbstractStructureInspectorPage;
@ -16,7 +17,10 @@ import net.sourceforge.pmd.lang.rule.xpath.XPathRuleQuery;
import net.sourceforge.pmd.util.StringUtil;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.StyledText;
@ -28,7 +32,6 @@ import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.TextLayout;
import org.eclipse.swt.graphics.TextStyle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
@ -38,6 +41,7 @@ import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbenchPart;
@ -64,7 +68,7 @@ public class ASTViewPage extends AbstractStructureInspectorPage {
private TextStyle derivedStyle;
private StyledText xpathField;
private StyledText outputField;
private TableViewer resultsViewer;
private Button goButton;
private Node classNode;
@ -170,17 +174,33 @@ public class ASTViewPage extends AbstractStructureInspectorPage {
}
} );
outputField = new StyledText(xpathTestPanel, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
// outputField = new StyledText(xpathTestPanel, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
gridData = new GridData(GridData.FILL_BOTH);
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalSpan = 2;
outputField.setLayoutData(gridData);
SyntaxManager.adapt(outputField, "xpath", null);
registerListeners();
showFirstMethod();
}
// outputField.setLayoutData(gridData);
// SyntaxManager.adapt(outputField, "xpath", null);
IStructuredContentProvider contentProvider = new IStructuredContentProvider() {
public void dispose() { }
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { }
public Object[] getElements(Object inputElement) { return (Node[])inputElement; }
};
BasicTableLabelProvider labelProvider = new BasicTableLabelProvider(NodeColumnUI.VisibleColumns);
resultsViewer = new TableViewer(xpathTestPanel, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
Table table = resultsViewer.getTable();
table.setLayoutData(gridData);
resultsViewer.setLabelProvider(labelProvider);
resultsViewer.setContentProvider(contentProvider);
table.setHeaderVisible(true);
labelProvider.addColumnsTo(table);
registerListeners();
showFirstMethod();
}
private void addXPathValidator() {
@ -206,23 +226,18 @@ public class ASTViewPage extends AbstractStructureInspectorPage {
goButton.setEnabled(true);
}
private static void displayOn(Node node, StringBuilder sb) {
sb.append(node);
String imgData = node.getImage();
if (imgData != null ) sb.append(" ").append( imgData );
}
// private static void displayOn(Node node, StringBuilder sb) {
//
// sb.append(node);
//
// String imgData = node.getImage();
//
// if (imgData != null ) sb.append(" ").append( imgData );
// }
private void evaluateXPath() {
outputField.setText("");
if (StringUtil.isEmpty(xpathField.getText())) {
outputField.setText("XPath query field is empty.");
return;
}
if (! setupTest() ) return;
List<Node> results = null;
try {
@ -232,21 +247,45 @@ public class ASTViewPage extends AbstractStructureInspectorPage {
XPathRuleQuery.XPATH_1_0 // TODO derive from future combo widget
);
} catch (ParseException pe) {
outputField.setText(pe.fillInStackTrace().getMessage());
showError(pe.fillInStackTrace().getMessage());
return;
}
show(results);
}
private boolean setupTest() {
// outputField.setText("");
resultsViewer.getTable().clearAll();
if (StringUtil.isEmpty(xpathField.getText())) {
//outputField.setText("XPath query field is empty.");
return false;
}
return true;
}
private void showError(String message) {
//outputField.setText(message);
}
private void show(List<Node> results) {
if (results.isEmpty()) {
outputField.setText("No matching nodes found");
//outputField.setText("No matching nodes found");
return;
}
StringBuilder sb = new StringBuilder();
for (Node node : results) {
displayOn(node, sb);
sb.append('\n');
}
outputField.setText( sb.toString() );
// StringBuilder sb = new StringBuilder();
// for (int i=0; i<results.size(); i++) {
// displayOn(results.get(i), i+1, sb);
// sb.append('\n');
// }
// outputField.setText( sb.toString() );
resultsViewer.setInput( results.toArray(new Node[results.size()]) );
}
private TextLayout layoutFor(TreeItem item) {

View File

@ -0,0 +1,57 @@
package net.sourceforge.pmd.eclipse.ui.views.ast;
import net.sourceforge.pmd.eclipse.ui.ItemColumnDescriptor;
import net.sourceforge.pmd.eclipse.ui.ItemFieldAccessor;
import net.sourceforge.pmd.eclipse.ui.ItemFieldAccessorAdapter;
import net.sourceforge.pmd.eclipse.ui.nls.StringKeys;
import net.sourceforge.pmd.lang.ast.Node;
import org.eclipse.swt.SWT;
/**
*
* @author Brian Remedios
*/
public interface NodeColumnUI {
ItemFieldAccessor<String, Node> typeNameAcc = new ItemFieldAccessorAdapter<String, Node>() {
public String valueFor(Node node) { return node.toString(); }
};
ItemFieldAccessor<String, Node> imageAcc = new ItemFieldAccessorAdapter<String, Node>() {
public String valueFor(Node node) { return node.getImage(); }
};
ItemFieldAccessor<Integer, Node> beginLineNumAcc = new ItemFieldAccessorAdapter<Integer, Node>() {
public Integer valueFor(Node node) { return node.getBeginLine(); }
};
ItemFieldAccessor<Integer, Node> endLineNumAcc = new ItemFieldAccessorAdapter<Integer, Node>() {
public Integer valueFor(Node node) { return node.getEndLine(); }
};
ItemFieldAccessor<Integer, Node> beginColumnAcc = new ItemFieldAccessorAdapter<Integer, Node>() {
public Integer valueFor(Node node) { return node.getBeginColumn(); }
};
ItemFieldAccessor<Integer, Node> endColumnAcc = new ItemFieldAccessorAdapter<Integer, Node>() {
public Integer valueFor(Node node) { return node.getEndColumn(); }
};
ItemFieldAccessor<String, Node> derivedAcc = new ItemFieldAccessorAdapter<String, Node>() {
public String valueFor(Node node) { return NodeImageDeriver.derivedTextFor(node); }
};
ItemFieldAccessor<String, Node> imageOrDerivedAcc = new ItemFieldAccessorAdapter<String, Node>() {
public String valueFor(Node node) { return node.getImage() == null ? NodeImageDeriver.derivedTextFor(node) : node.getImage(); }
};
ItemColumnDescriptor typeName = new ItemColumnDescriptor("", StringKeys.NODE_COLUMN_NAME, SWT.LEFT, 85, true, typeNameAcc);
ItemColumnDescriptor imageData = new ItemColumnDescriptor("", StringKeys.NODE_IMAGE_DATA, SWT.LEFT, 25, true, imageAcc);
ItemColumnDescriptor lineNum = new ItemColumnDescriptor("", StringKeys.NODE_LINE_NUM, SWT.RIGHT, 35, true, beginLineNumAcc);
ItemColumnDescriptor derived = new ItemColumnDescriptor("", StringKeys.NODE_DERIVED, SWT.LEFT, 25, true, derivedAcc);
ItemColumnDescriptor imageOrDerived = new ItemColumnDescriptor("", StringKeys.NODE_IMG_OR_DERIVED, SWT.LEFT, 25, true, imageOrDerivedAcc);
ItemColumnDescriptor[] VisibleColumns = new ItemColumnDescriptor[] { lineNum, typeName, imageOrDerived };
}