[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] updated DOM AST View and Indexer View
|
***********************
Warning: Your file, new_indexer_icons.zip, contains more than 32 files after decompression and cannot be scanned.
***********************
|
patch includes:
DOM AST View:
- refresh DOM AST View and reload DOM
AST View icons are updated
- properly open external includes similarly
to OpenIncludeAction#run() when clicking on a node in the view
- extracted some String constants
Indexer View:
- new icons
- search on node displays location results
from the index in the Search view (double click on result opens in editor
when 91292 is fixed)
- button to sort results alphabetically
- button to enable/disable long names
found in the index
Note:
- new_dom_icons.zip has 2 new icons
that need to be extracted into org.eclipse.cdt.ui.tests\icons\dom_view
- new_indexer_icons.zip contains all
of the icons for org.eclipse.cdt.ui.tests\icons\indexer_view so existing
icons in this directory should be deleted and replaced with the icons in
the zip file
Devin Steffler
IBM's Eclipse CDT
Ottawa (Palladium), Ontario, Canada
Index: src/org/eclipse/cdt/ui/tests/DOMAST/DOMAST.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/DOMAST/DOMAST.java,v
retrieving revision 1.34
diff -u -r1.34 DOMAST.java
--- src/org/eclipse/cdt/ui/tests/DOMAST/DOMAST.java 6 Apr 2005 18:05:49 -0000 1.34
+++ src/org/eclipse/cdt/ui/tests/DOMAST/DOMAST.java 13 Apr 2005 20:38:30 -0000
@@ -45,6 +45,10 @@
import org.eclipse.cdt.core.filetype.ICFileType;
import org.eclipse.cdt.core.filetype.ICFileTypeConstants;
import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.internal.core.model.CProject;
+import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserUtil;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
@@ -145,20 +149,20 @@
private Action displayNodeSignatureAction;
private Action displayExpressionAction;
private Action displayInitializerAction;
- private Action singleClickAction;
+ protected Action singleClickAction;
private Action loadActiveEditorAction;
private Action refreshAction;
private Action expandAllAction;
private Action collapseAllAction;
private Action clearAction;
private Action searchNamesAction;
- private IFile file = null;
+ protected IFile file = null;
private IEditorPart part = null;
- private ParserLanguage lang = null;
+ protected ParserLanguage lang = null;
private CustomFiltersActionGroup customFiltersActionGroup;
- private static ViewContentProvider.StartInitializingASTView initializeASTViewJob = null;
+ protected static ViewContentProvider.StartInitializingASTView initializeASTViewJob = null;
/*
* The content provider class is responsible for providing objects to the
@@ -173,7 +177,7 @@
private DOMASTNodeParent invisibleRoot;
private DOMASTNodeParent tuTreeParent = null;
private IASTTranslationUnit tu = null;
- private IASTProblem[] astProblems = null;
+ protected IASTProblem[] astProblems = null;
public ViewContentProvider() {
}
@@ -302,7 +306,10 @@
private class InitializeView extends Job {
- private static final String RETRIEVING_PREPROCESSOR_PROBLEMS = "Retrieving all preprocessor problems from TU"; //$NON-NLS-1$
+ private static final String COLON_SPACE = ": "; //$NON-NLS-1$
+ private static final String DOM_AST_VIEW_DONE = "[DOM AST View] done "; //$NON-NLS-1$
+ private static final String DOM_AST_VIEW_FINISHED = "[DOM AST View] finished: "; //$NON-NLS-1$
+ private static final String RETRIEVING_PREPROCESSOR_PROBLEMS = "Retrieving all preprocessor problems from TU"; //$NON-NLS-1$
private static final String RETRIEVING_PREPROCESSOR_STATEMENTS = "Retrieving all preprocessor statements from TU"; //$NON-NLS-1$
private static final String _PREPROCESSOR_PROBLEMS_ = " preprocessor problems"; //$NON-NLS-1$
private static final String _PREPROCESSOR_STATEMENTS_ = " preprocessor statements"; //$NON-NLS-1$
@@ -314,7 +321,7 @@
DOMASTNodeParent root = null;
ViewContentProvider provider = null;
TreeViewer view = null;
- IFile file = null;
+ IFile aFile = null;
/**
* @param name
@@ -325,7 +332,7 @@
setUser(true);
this.provider = provider;
this.view = view;
- this.file = file;
+ this.aFile = file;
}
public DOMASTNodeParent getInvisibleRoot() {
@@ -346,7 +353,7 @@
long start=0;
long overallStart=System.currentTimeMillis();
- if (file == null || lang == null || monitor == null)
+ if (aFile == null || lang == null || monitor == null)
return Status.CANCEL_STATUS;
if (monitor.isCanceled()) return Status.CANCEL_STATUS;
@@ -354,16 +361,16 @@
start=System.currentTimeMillis();
IPopulateDOMASTAction action = null;
- IASTTranslationUnit tu = null;
+ IASTTranslationUnit aTu = null;
try {
monitor.subTask(PARSING_TRANSLATION_UNIT);
start=System.currentTimeMillis();
- tu = CDOM.getInstance().getASTService().getTranslationUnit(
- file,
+ aTu = CDOM.getInstance().getASTService().getTranslationUnit(
+ aFile,
CDOM.getInstance().getCodeReaderFactory(
CDOM.PARSE_SAVED_RESOURCES));
monitor.worked(1);
- System.out.println("[DOM AST View] done " + PARSING_TRANSLATION_UNIT + ": " + (System.currentTimeMillis()- start) );
+ System.out.println(DOM_AST_VIEW_DONE + PARSING_TRANSLATION_UNIT + COLON_SPACE + (System.currentTimeMillis()- start) );
} catch (IASTServiceProvider.UnsupportedDialectException e) {
return Status.CANCEL_STATUS;
}
@@ -372,14 +379,14 @@
monitor.subTask(GENERATING_INITIAL_TREE);
start=System.currentTimeMillis();
if (lang == ParserLanguage.CPP) {
- action = new CPPPopulateASTViewAction(tu, monitor);
- tu.accept( (CPPASTVisitor) action);
+ action = new CPPPopulateASTViewAction(aTu, monitor);
+ aTu.accept( (CPPASTVisitor) action);
} else {
- action = new CPopulateASTViewAction(tu, monitor);
- tu.accept( (CASTVisitor) action);
+ action = new CPopulateASTViewAction(aTu, monitor);
+ aTu.accept( (CASTVisitor) action);
}
monitor.worked(2);
- System.out.println("[DOM AST View] done " + GENERATING_INITIAL_TREE + ": " + (System.currentTimeMillis()- start) );
+ System.out.println(DOM_AST_VIEW_DONE + GENERATING_INITIAL_TREE + COLON_SPACE + (System.currentTimeMillis()- start) );
// display roots
root = new DOMASTNodeParent(null); //$NON-NLS-1$
@@ -387,30 +394,30 @@
if (monitor.isCanceled()) return Status.CANCEL_STATUS;
monitor.subTask(RETRIEVING_PREPROCESSOR_STATEMENTS);
start=System.currentTimeMillis();
- IASTPreprocessorStatement[] statements = tu.getAllPreprocessorStatements();
+ IASTPreprocessorStatement[] statements = aTu.getAllPreprocessorStatements();
monitor.worked(3);
- System.out.println("[DOM AST View] done " + RETRIEVING_PREPROCESSOR_STATEMENTS + ": " + (System.currentTimeMillis()- start) );
+ System.out.println(DOM_AST_VIEW_DONE + RETRIEVING_PREPROCESSOR_STATEMENTS + COLON_SPACE + (System.currentTimeMillis()- start) );
monitor.subTask(MERGING_ + statements.length + _PREPROCESSOR_STATEMENTS_);
start=System.currentTimeMillis();
// merge preprocessor statements to the tree
action.mergePreprocessorStatements(statements);
monitor.worked(4);
- System.out.println("[DOM AST View] done " + MERGING_ + statements.length + _PREPROCESSOR_STATEMENTS_ + ": " + (System.currentTimeMillis()- start) );
+ System.out.println(DOM_AST_VIEW_DONE + MERGING_ + statements.length + _PREPROCESSOR_STATEMENTS_ + COLON_SPACE + (System.currentTimeMillis()- start) );
if (monitor.isCanceled()) return Status.CANCEL_STATUS;
monitor.subTask(RETRIEVING_PREPROCESSOR_PROBLEMS);
start=System.currentTimeMillis();
- IASTProblem[] problems = tu.getPreprocessorProblems();
+ IASTProblem[] problems = aTu.getPreprocessorProblems();
monitor.worked(5);
- System.out.println("[DOM AST View] done " + RETRIEVING_PREPROCESSOR_PROBLEMS + ": " + (System.currentTimeMillis()- start) );
+ System.out.println(DOM_AST_VIEW_DONE + RETRIEVING_PREPROCESSOR_PROBLEMS + COLON_SPACE + (System.currentTimeMillis()- start) );
monitor.subTask(MERGING_ + problems.length + _PREPROCESSOR_PROBLEMS_);
start=System.currentTimeMillis();
// merge preprocessor problems to the tree
action.mergePreprocessorProblems(problems);
monitor.worked(6);
- System.out.println("[DOM AST View] done " + MERGING_ + problems.length + _PREPROCESSOR_PROBLEMS_ + ": " + (System.currentTimeMillis()- start) );
+ System.out.println(DOM_AST_VIEW_DONE + MERGING_ + problems.length + _PREPROCESSOR_PROBLEMS_ + COLON_SPACE + (System.currentTimeMillis()- start) );
if (monitor.isCanceled()) return Status.CANCEL_STATUS;
monitor.subTask(GROUPING_AST);
@@ -418,7 +425,7 @@
// group #includes
action.groupIncludes(statements);
monitor.worked(7);
- System.out.println("[DOM AST View] done " + GROUPING_AST + ": " + (System.currentTimeMillis()- start) );
+ System.out.println(DOM_AST_VIEW_DONE + GROUPING_AST + COLON_SPACE + (System.currentTimeMillis()- start) );
root.addChild(action.getTree());
@@ -432,7 +439,7 @@
monitor.done();
- System.out.println("[DOM AST View] finished: " + (System.currentTimeMillis()- overallStart) );
+ System.out.println(DOM_AST_VIEW_FINISHED + (System.currentTimeMillis()- overallStart) );
return Status.OK_STATUS;
}
@@ -477,7 +484,7 @@
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ public void inputChanged(Viewer aViewer, Object oldInput, Object newInput) {
}
private TreeItem expandTreeToTreeObject(TreeItem[] treeItems, DOMASTNodeLeaf treeObj) {
@@ -549,8 +556,10 @@
class ViewLabelProvider extends LabelProvider {
- public String getText(Object obj) {
- if (obj == null) return "";
+ private static final String BLANK_STRING = ""; //$NON-NLS-1$
+
+ public String getText(Object obj) {
+ if (obj == null) return BLANK_STRING;
return obj.toString();
}
@@ -804,7 +813,7 @@
};
loadActiveEditorAction.setText(LOAD_ACTIVE_EDITOR);
loadActiveEditorAction.setToolTipText(LOAD_ACTIVE_EDITOR);
- loadActiveEditorAction.setImageDescriptor(DOMASTPluginImages.DESC_DEFAULT);
+ loadActiveEditorAction.setImageDescriptor(DOMASTPluginImages.DESC_RELOAD_VIEW);
refreshAction = new Action() {
public void run() {
@@ -817,7 +826,7 @@
};
refreshAction.setText(REFRESH_DOM_AST);
refreshAction.setToolTipText(REFRESH_DOM_AST);
- refreshAction.setImageDescriptor(DOMASTPluginImages.DESC_IASTInitializer);
+ refreshAction.setImageDescriptor(DOMASTPluginImages.DESC_REFRESH_VIEW);
expandAllAction = new Action() {
public void run() {
@@ -934,7 +943,7 @@
singleClickAction = new ASTHighlighterAction(part);
}
- private IEditorPart getActiveEditor() {
+ protected IEditorPart getActiveEditor() {
IEditorPart editor = null;
if (getSite().getPage().isEditorAreaVisible() &&
@@ -948,7 +957,8 @@
}
private class ASTHighlighterAction extends Action {
- IEditorPart aPart = null;
+ private static final String A_PART_INSTANCEOF = "aPart instanceof "; //$NON-NLS-1$
+ IEditorPart aPart = null;
public ASTHighlighterAction(IEditorPart part) {
this.aPart = part;
@@ -993,9 +1003,12 @@
}
} else {
IPath path = new Path( filename );
- FileStorage storage = new FileStorage(null, path);
+
+ ICProject cproject = new CProject(null, file.getProject());
+ ITranslationUnit unit = CoreModel.getDefault().createTranslationUnitFrom(cproject, path);
+ if (unit != null)
try {
- aPart = EditorUtility.openInEditor(storage);
+ aPart = EditorUtility.openInEditor(unit);
} catch (PartInitException e) {
return;
} catch (CModelException e) {
@@ -1009,7 +1022,7 @@
((DOMASTNodeLeaf) obj).getLength());
}
else
- System.out.println( "aPart instanceof " + aPart.getClass().getName() );
+ System.out.println( A_PART_INSTANCEOF + aPart.getClass().getName() );
aPart.getSite().getPage().activate(aPart.getSite().getPage().findView(VIEW_ID));
@@ -1110,6 +1123,7 @@
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
+ if (viewer==null) return;
viewer.getControl().setFocus();
ISelection selection = viewer.getSelection();
Index: src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTPluginImages.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTPluginImages.java,v
retrieving revision 1.6
diff -u -r1.6 DOMASTPluginImages.java
--- src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTPluginImages.java 29 Mar 2005 21:40:34 -0000 1.6
+++ src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTPluginImages.java 13 Apr 2005 20:38:30 -0000
@@ -76,6 +76,8 @@
public static final String IMG_COLLAPSE_ALL = NAME_PREFIX + "collapseall.gif"; //$NON-NLS-1$
public static final String IMG_CLEAR = NAME_PREFIX + "clear.gif"; //$NON-NLS-1$
public static final String IMG_SEARCH_NAMES = NAME_PREFIX + "search_ref_obj.gif"; //$NON-NLS-1$
+ public static final String IMG_REFRESH_VIEW = NAME_PREFIX + "refresh_view.gif"; //$NON-NLS-1$
+ public static final String IMG_RELOAD_VIEW = NAME_PREFIX + "reload_view.gif"; //$NON-NLS-1$
public static final ImageDescriptor DESC_IASTArrayModifier= createManaged(ICON_PREFIX, IMG_IASTArrayModifier);
public static final ImageDescriptor DESC_IASTDeclaration= createManaged(ICON_PREFIX, IMG_IASTDeclaration);
@@ -101,6 +103,8 @@
public static final ImageDescriptor DESC_COLLAPSE_ALL= createManaged(ICON_PREFIX, IMG_COLLAPSE_ALL);
public static final ImageDescriptor DESC_CLEAR= createManaged(ICON_PREFIX, IMG_CLEAR);
public static final ImageDescriptor DESC_SEARCH_NAMES= createManaged(ICON_PREFIX, IMG_SEARCH_NAMES);
+ public static final ImageDescriptor DESC_REFRESH_VIEW= createManaged(ICON_PREFIX, IMG_REFRESH_VIEW);
+ public static final ImageDescriptor DESC_RELOAD_VIEW= createManaged(ICON_PREFIX, IMG_RELOAD_VIEW);
private static ImageDescriptor createManaged(String prefix, String name) {
return createManaged(imageRegistry, prefix, name);
Index: src/org/eclipse/cdt/ui/tests/IndexerView/IndexerNodeLeaf.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/IndexerView/IndexerNodeLeaf.java,v
retrieving revision 1.3
diff -u -r1.3 IndexerNodeLeaf.java
--- src/org/eclipse/cdt/ui/tests/IndexerView/IndexerNodeLeaf.java 8 Apr 2005 06:07:46 -0000 1.3
+++ src/org/eclipse/cdt/ui/tests/IndexerView/IndexerNodeLeaf.java 13 Apr 2005 20:38:30 -0000
@@ -147,9 +147,8 @@
int start = word.indexOf(stringBeforeName) + stringBeforeName.length();
stringBeforeName = stringBeforeName + word.substring(start, start + 2);
}
- int end = word.length();
- if (word.indexOf(IIndexConstants.SEPARATOR, word.indexOf(stringBeforeName) + stringBeforeName.length() ) > 0) end = word.indexOf(IIndexConstants.SEPARATOR, word.indexOf(stringBeforeName) + stringBeforeName.length() );
- name = word.substring(word.indexOf(stringBeforeName) + stringBeforeName.length(), end);
+
+ name = word.substring(word.indexOf(stringBeforeName) + stringBeforeName.length());
}
@@ -291,6 +290,9 @@
}
public String toString() {
+ if (!parent.isDisplayFullName() && name.indexOf(IIndexConstants.SEPARATOR) > 0)
+ return name.substring(0, name.indexOf(IIndexConstants.SEPARATOR));
+
return name;
}
Index: src/org/eclipse/cdt/ui/tests/IndexerView/IndexerNodeParent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/IndexerView/IndexerNodeParent.java,v
retrieving revision 1.2
diff -u -r1.2 IndexerNodeParent.java
--- src/org/eclipse/cdt/ui/tests/IndexerView/IndexerNodeParent.java 30 Mar 2005 19:47:40 -0000 1.2
+++ src/org/eclipse/cdt/ui/tests/IndexerView/IndexerNodeParent.java 13 Apr 2005 20:38:30 -0000
@@ -32,6 +32,9 @@
private boolean firstDisplay=true;
private IndexerFilterManager filterManager = null;
private IndexerView.ViewContentProvider view=null;
+ private boolean sort=true;
+ private boolean displayFullName=true;
+ private boolean navigate=false;
public IndexerNodeParent(IEntryResult result, File indexerFile, IndexerView.ViewContentProvider view) {
super(result, indexerFile);
@@ -52,6 +55,14 @@
public IndexerNodeLeaf[] getChildren() {
// if there is nothing to display return an empty list
if (children.length == 0) return EMPTY_INDEXER_NODE_LEAVES;
+
+ // navigate is used to determine if the array should be traversed or not (button pressed or first loading)
+ if (!navigate) {
+ return (IndexerNodeLeaf[])ArrayUtil.removeNulls(IndexerNodeLeaf.class, childrenToDisplay);
+ } else {
+ navigate = false;
+ }
+
// obey the bounds of the list!
if (!firstDisplay && (!isForward && lastBackwardDisplayed==0 ||
isForward && lastForwardDisplayed==children.length-1)) {
@@ -63,6 +74,14 @@
return (IndexerNodeLeaf[])ArrayUtil.removeNulls(IndexerNodeLeaf.class, childrenToDisplay);
}
+ if (firstDisplay && children.length > 1) {
+ if (sort) {// sort children based on name
+ quickSort(children, 0, children.length - 1, true);
+ } else {// sort children based on word
+ quickSort(children, 0, children.length - 1, false);
+ }
+ }
+
int start=0;
if (isForward) {
if (lastForwardDisplayed==0) start=0;
@@ -139,6 +158,57 @@
return (IndexerNodeLeaf[])ArrayUtil.removeNulls(IndexerNodeLeaf.class, childrenToDisplay);
}
+ private static void quickSort(IndexerNodeLeaf[] list, int left, int right, boolean sortName) {
+ int original_left= left;
+ int original_right= right;
+ String mid=null;
+ if (sortName) {
+ mid= list[(left + right) / 2].getName().toUpperCase();
+ } else {
+ mid= new String(list[(left + right) / 2].getResult().getWord()).toUpperCase();
+ }
+ do {
+ String compareL = null;
+ String compareR = null;
+ if (sortName) {
+ compareL = list[left].getName().toUpperCase();
+ compareR = list[right].getName().toUpperCase();
+ } else {
+ compareL = new String(list[left].getResult().getWord()).toUpperCase();
+ compareR = new String(list[right].getResult().getWord()).toUpperCase();
+ }
+ while (compareL.compareTo(mid) < 0) {
+ left++;
+ if (sortName) {
+ compareL = list[left].getName().toUpperCase();
+ } else {
+ compareL = new String(list[left].getResult().getWord()).toUpperCase();
+ }
+ }
+ while (mid.compareTo(compareR) < 0) {
+ right--;
+ if (sortName) {
+ compareR = list[right].getName().toUpperCase();
+ } else {
+ compareR = new String(list[right].getResult().getWord()).toUpperCase();
+ }
+ }
+ if (left <= right) {
+ IndexerNodeLeaf tmp= list[left];
+ list[left]= list[right];
+ list[right]= tmp;
+ left++;
+ right--;
+ }
+ } while (left <= right);
+ if (original_left < right) {
+ quickSort(list, original_left, right, sortName);
+ }
+ if (left < original_right) {
+ quickSort(list, left, original_right, sortName);
+ }
+ }
+
public void setChildren(IndexerNodeLeaf[] children) {
this.children = children;
}
@@ -160,6 +230,7 @@
}
public void reset() {
+ navigate=true;
lastBackwardDisplayed = 0;
lastForwardDisplayed=0;
isForward=true;
@@ -182,4 +253,28 @@
}
return filteredCount;
}
+
+ public boolean isSort() {
+ return sort;
+ }
+
+ public void setSort(boolean sort) {
+ this.sort = sort;
+ }
+
+ public boolean isDisplayFullName() {
+ return displayFullName;
+ }
+
+ public void setDisplayFullName(boolean displayFullName) {
+ this.displayFullName = displayFullName;
+ }
+
+ public boolean isNavigate() {
+ return navigate;
+ }
+
+ public void setNavigate(boolean navigate) {
+ this.navigate = navigate;
+ }
}
Index: src/org/eclipse/cdt/ui/tests/IndexerView/IndexerView.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/IndexerView/IndexerView.java,v
retrieving revision 1.2
diff -u -r1.2 IndexerView.java
--- src/org/eclipse/cdt/ui/tests/IndexerView/IndexerView.java 30 Mar 2005 19:47:40 -0000 1.2
+++ src/org/eclipse/cdt/ui/tests/IndexerView/IndexerView.java 13 Apr 2005 20:38:30 -0000
@@ -13,7 +13,6 @@
import java.io.IOException;
import org.eclipse.cdt.core.index.ICDTIndexer;
-import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.core.search.ICSearchConstants;
import org.eclipse.cdt.internal.core.index.IEntryResult;
import org.eclipse.cdt.internal.core.index.IIndex;
@@ -36,12 +35,14 @@
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.search.ui.NewSearchUI;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
@@ -57,6 +58,10 @@
* @author dsteffle
*/
public class IndexerView extends ViewPart {
+ private static final int DEFAULT_INDEXER_SIZE = 1;
+ private static final String SWITCH_FULL_NAMES = "Switch Full Names"; //$NON-NLS-1$
+ private static final String SORT_RESULTS = "Sort Results"; //$NON-NLS-1$
+ private static final String SEARCH_LOCATIONS = "Search Locations"; //$NON-NLS-1$
private static final String _TOTAL_IENTRYRESULTS = " total IEntryResults"; //$NON-NLS-1$
private static final String _FILTERED_IENTRY_RESULTS_ = " filtered IEntry Results\n"; //$NON-NLS-1$
private static final String INDEXER_STATS = "Indexer Stats"; //$NON-NLS-1$
@@ -70,14 +75,17 @@
private static final String PROPERTIES_VIEW = "org.eclipse.ui.views.PropertySheet"; //$NON-NLS-1$
protected static final String BLANK_STRING = ""; //$NON-NLS-1$
static TableViewer viewer;
+ protected Action searchLocationAction;
protected Action previousPageAction;
protected Action nextPageAction;
protected Action singleClickAction;
protected Action setFiltersAction;
+ protected Action sortAction;
+ protected Action displayFullNameAction;
protected Action displayStatsAction;
- protected IIndexer[] indexers = new IIndexer[CTestPlugin.getWorkspace().getRoot().getProjects().length];
+ protected IIndexer[] indexers = new IIndexer[DEFAULT_INDEXER_SIZE]; // support 1 indexer for now new IIndexer[CTestPlugin.getWorkspace().getRoot().getProjects().length];
protected IProject project = null;
-
+
protected static ViewContentProvider.StartInitializingIndexerView initializeIndexerViewJob = null;
public class ViewContentProvider implements IStructuredContentProvider,
@@ -143,7 +151,6 @@
invisibleRoot.setIsForward(true); // initial display direction is forward
} catch (IOException e) {
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -167,7 +174,8 @@
*/
public void run() {
if (!updateView) return;
-
+
+ enableButtons(false);
view.refresh();
if (view.getTable().getItems().length > 0) {
@@ -178,6 +186,7 @@
view.getTable().setSelection(selection);
}
+ enableButtons(true);
previousPageAction.setEnabled(displayBackwards);
nextPageAction.setEnabled(displayForwards);
}
@@ -234,6 +243,7 @@
initializeIndexerViewJob.schedule();
}
+ invisibleRoot.reset();
this.displayForwards=displayForwards;
this.displayBackwards=displayBackwards;
}
@@ -247,7 +257,7 @@
public void dispose() {}
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ public void inputChanged(Viewer aViewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
@@ -381,12 +391,25 @@
contributeToActionBars();
}
+ protected void enableButtons(boolean value) {
+ setFiltersAction.setEnabled(value);
+ setFiltersAction.setEnabled(value);
+ sortAction.setEnabled(value);
+ displayFullNameAction.setEnabled(value);
+ }
+
private void makeActions() {
+ searchLocationAction = new SearchLocationsAction();
+ searchLocationAction.setText(SEARCH_LOCATIONS);
+ searchLocationAction.setToolTipText(SEARCH_LOCATIONS);
+ searchLocationAction.setImageDescriptor(IndexerViewPluginImages.DESC_SEARCH_LOCATION);
+
previousPageAction = new Action() {
public void run() {
if (viewer.getContentProvider() instanceof ViewContentProvider) {
IndexerNodeParent root = ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot();
root.setIsForward(false);
+ root.setNavigate(true);
}
viewer.refresh();
@@ -403,6 +426,7 @@
if (viewer.getContentProvider() instanceof ViewContentProvider) {
IndexerNodeParent root = ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot();
root.setIsForward(true);
+ root.setNavigate(true);
}
viewer.refresh();
@@ -422,11 +446,9 @@
int result = dialog.open();
if (result == IDialogConstants.OK_ID) {
- viewer.setContentProvider(new ViewContentProvider(((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot(), true, true));
- ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().setView((ViewContentProvider)viewer.getContentProvider()); // update the root's content provider
-
- previousPageAction.setEnabled(((ViewContentProvider)viewer.getContentProvider()).isDisplayBackwards());
- nextPageAction.setEnabled(((ViewContentProvider)viewer.getContentProvider()).isDisplayForwards());
+ // reset the view but remember the buttons being displayed from the old content provider
+ ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().reset();
+ viewer.refresh();
}
}
};
@@ -434,6 +456,48 @@
setFiltersAction.setToolTipText(SET_FILTERS);
setFiltersAction.setImageDescriptor(IndexerViewPluginImages.DESC_FILTER_BUTTON);
+ sortAction = new Action() {
+ public void run() {
+ if (viewer.getContentProvider() instanceof ViewContentProvider) {
+ enableButtons(false);
+ if (((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().isSort()) {
+ ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().setSort(false);
+ ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().reset();
+ viewer.refresh();
+ this.setImageDescriptor(IndexerViewPluginImages.DESC_SORT);
+ } else {
+ ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().setSort(true);
+ ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().reset();
+ viewer.refresh();
+ this.setImageDescriptor(IndexerViewPluginImages.DESC_SORTED);
+ }
+ enableButtons(true);
+ }
+ }
+ };
+ sortAction.setText(SORT_RESULTS);
+ sortAction.setToolTipText(SORT_RESULTS);
+ sortAction.setImageDescriptor(IndexerViewPluginImages.DESC_SORTED);
+
+ displayFullNameAction = new Action() {
+ public void run() {
+ if (viewer.getContentProvider() instanceof ViewContentProvider) {
+ if (((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().isDisplayFullName()) {
+ ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().setDisplayFullName(false);
+ viewer.refresh();
+ this.setImageDescriptor(IndexerViewPluginImages.DESC_DISPLAY_FULL_NAME);
+ } else {
+ ((ViewContentProvider)viewer.getContentProvider()).getInvisibleRoot().setDisplayFullName(true);
+ viewer.refresh();
+ this.setImageDescriptor(IndexerViewPluginImages.DESC_FULL_NAME_DISPLAYED);
+ }
+ }
+ }
+ };
+ displayFullNameAction.setText(SWITCH_FULL_NAMES);
+ displayFullNameAction.setToolTipText(SWITCH_FULL_NAMES);
+ displayFullNameAction.setImageDescriptor(IndexerViewPluginImages.DESC_FULL_NAME_DISPLAYED);
+
displayStatsAction = new Action() {
public void run() {
CTestPlugin.getStandardDisplay().asyncExec(new Runnable() {
@@ -454,7 +518,7 @@
singleClickAction = new IndexerHighlighterAction();
}
-
+
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager(_INDEXER_MENU_MANAGER);
menuMgr.setRemoveAllWhenShown(true);
@@ -473,6 +537,8 @@
}
void fillContextMenu(IMenuManager manager) {
+ manager.add(searchLocationAction);
+ manager.add(new Separator());
// Other plug-ins can contribute there actions here
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
@@ -502,13 +568,14 @@
fillLocalToolBar(bars.getToolBarManager());
}
- private void fillLocalPullDown(IMenuManager manager) {
- }
+ private void fillLocalPullDown(IMenuManager manager) {}
private void fillLocalToolBar(IToolBarManager manager) {
manager.add(previousPageAction);
manager.add(nextPageAction);
manager.add(new Separator());
+ manager.add(sortAction);
+ manager.add(displayFullNameAction);
manager.add(setFiltersAction);
manager.add(new Separator());
manager.add(displayStatsAction);
@@ -523,11 +590,14 @@
}
public void appendIndexer(IIndexer indexer) {
- indexers = (IIndexer[])ArrayUtil.append(IIndexer.class, indexers, indexer);
+// indexers = (IIndexer[])ArrayUtil.append(IIndexer.class, indexers, indexer);
+ // only support 1 indexer for now
+ indexers[0] = indexer;
}
public void clearIndexers() {
- indexers = new IIndexer[CTestPlugin.getWorkspace().getRoot().getProjects().length];
+ // for now only support 1 indexer at a time
+ indexers = new IIndexer[1];
}
public void setContentProvider(ViewContentProvider provider) {
@@ -548,4 +618,22 @@
return project.getName();
}
+
+ private class SearchLocationsAction extends Action {
+ private static final String LOCATIONS = "Locations"; //$NON-NLS-1$
+ private static final String INDEX = "Index"; //$NON-NLS-1$
+ protected void displayLocations(IndexerNodeLeaf leaf, String queryLabel, String pattern) {
+ IndexerQuery job = new IndexerQuery(leaf, queryLabel, pattern);
+ NewSearchUI.activateSearchResultView();
+ NewSearchUI.runQuery(job);
+ }
+
+ public void run() {
+ if (viewer.getSelection() instanceof IStructuredSelection &&
+ ((IStructuredSelection)viewer.getSelection()).getFirstElement() instanceof IndexerNodeLeaf) {
+ displayLocations((IndexerNodeLeaf)((IStructuredSelection)viewer.getSelection()).getFirstElement(),
+ INDEX, LOCATIONS);
+ }
+ }
+ }
}
Index: src/org/eclipse/cdt/ui/tests/IndexerView/IndexerViewPluginImages.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/IndexerView/IndexerViewPluginImages.java,v
retrieving revision 1.2
diff -u -r1.2 IndexerViewPluginImages.java
--- src/org/eclipse/cdt/ui/tests/IndexerView/IndexerViewPluginImages.java 30 Mar 2005 19:47:40 -0000 1.2
+++ src/org/eclipse/cdt/ui/tests/IndexerView/IndexerViewPluginImages.java 13 Apr 2005 20:38:30 -0000
@@ -90,6 +90,11 @@
public static final String IMG_GROUPED_DECL= NAME_PREFIX + "grouped_decl.gif"; //$NON-NLS-1$
public static final String IMG_GROUPED_REF= NAME_PREFIX + "grouped_ref.gif"; //$NON-NLS-1$
public static final String IMG_GROUPED_TYPE= NAME_PREFIX + "grouped_type.gif"; //$NON-NLS-1$
+ public static final String IMG_SEARCH_LOCATION= NAME_PREFIX + "search_decl_obj.gif"; //$NON-NLS-1$
+ public static final String IMG_SORT= NAME_PREFIX + "alphab_sort.gif"; //$NON-NLS-1$
+ public static final String IMG_SORTED= NAME_PREFIX + "alphab_sorted.gif"; //$NON-NLS-1$
+ public static final String IMG_FULL_NAME_DISPLAYED= NAME_PREFIX + "full_name_displayed.gif"; //$NON-NLS-1$
+ public static final String IMG_DISPLAY_FULL_NAME= NAME_PREFIX + "display_full_name.gif"; //$NON-NLS-1$
public static final ImageDescriptor DESC_REF= createManaged(ICON_PREFIX, IMG_REF);
public static final ImageDescriptor DESC_TYPE_REF= createManaged(ICON_PREFIX, IMG_TYPE_REF);
@@ -129,6 +134,11 @@
public static final ImageDescriptor DESC_GROUPED_DECL= createManaged(ICON_PREFIX, IMG_GROUPED_DECL);
public static final ImageDescriptor DESC_GROUPED_REF= createManaged(ICON_PREFIX, IMG_GROUPED_REF);
public static final ImageDescriptor DESC_GROUPED_TYPE= createManaged(ICON_PREFIX, IMG_GROUPED_TYPE);
+ public static final ImageDescriptor DESC_SEARCH_LOCATION= createManaged(ICON_PREFIX, IMG_SEARCH_LOCATION);
+ public static final ImageDescriptor DESC_SORT= createManaged(ICON_PREFIX, IMG_SORT);
+ public static final ImageDescriptor DESC_SORTED= createManaged(ICON_PREFIX, IMG_SORTED);
+ public static final ImageDescriptor DESC_FULL_NAME_DISPLAYED= createManaged(ICON_PREFIX, IMG_FULL_NAME_DISPLAYED);
+ public static final ImageDescriptor DESC_DISPLAY_FULL_NAME= createManaged(ICON_PREFIX, IMG_DISPLAY_FULL_NAME);
private static ImageDescriptor createManaged(String prefix, String name) {
return createManaged(imageRegistry, prefix, name);
Index: src/org/eclipse/cdt/ui/tests/IndexerView/IndexerQuery.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/IndexerView/IndexerQuery.java
diff -N src/org/eclipse/cdt/ui/tests/IndexerView/IndexerQuery.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/IndexerView/IndexerQuery.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,213 @@
+/**********************************************************************
+ * Copyright (c) 2005 IBM Canada and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ *
+ * Contributors:
+ * IBM Rational Software - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.cdt.ui.tests.IndexerView;
+
+import java.io.IOException;
+
+import org.eclipse.cdt.core.browser.PathUtil;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.parser.util.ArrayUtil;
+import org.eclipse.cdt.core.search.BasicSearchMatch;
+import org.eclipse.cdt.core.search.IMatch;
+import org.eclipse.cdt.internal.core.index.IEntryResult;
+import org.eclipse.cdt.internal.core.index.cindexstorage.IndexedFileEntry;
+import org.eclipse.cdt.internal.core.index.cindexstorage.io.BlocksIndexInput;
+import org.eclipse.cdt.internal.core.index.cindexstorage.io.IndexInput;
+import org.eclipse.cdt.internal.ui.search.CSearchQuery;
+import org.eclipse.cdt.internal.ui.search.CSearchResult;
+import org.eclipse.cdt.internal.ui.search.NewSearchResultCollector;
+import org.eclipse.cdt.ui.testplugin.CTestPlugin;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.search.ui.ISearchQuery;
+import org.eclipse.search.ui.ISearchResult;
+
+/**
+ * @author dsteffle
+ */
+public class IndexerQuery extends CSearchQuery implements ISearchQuery {
+ private static final int DEFAULT_MATCH_INFO_SIZE = 4;
+ private static final String BLANK_STRING = ""; //$NON-NLS-1$
+ private CSearchResult _result;
+ private IndexerNodeLeaf leaf=null;
+ private String queryLabel = null;
+
+ /**
+ *
+ */
+ public IndexerQuery(IndexerNodeLeaf leaf, String queryLabel, String pattern) {
+ super(CTestPlugin.getWorkspace(), pattern, false, null, null, null, queryLabel, null);
+ this.leaf = leaf;
+ this.queryLabel = queryLabel;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.search.ui.ISearchQuery#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public IStatus run(IProgressMonitor monitor)
+ throws OperationCanceledException {
+
+ final CSearchResult textResult= (CSearchResult) getSearchResult();
+
+ IProgressMonitor mainSearchPM= new SubProgressMonitor(monitor, 1000);
+ NewSearchResultCollector collector = new NewSearchResultCollector(textResult, mainSearchPM);
+
+ collector.aboutToStart();
+
+ MatchInfo[] matches = generateMatchInfo();
+ for (int i=0; i<matches.length; i++) {
+ try {
+ if ( matches[i] != null ) {
+ collector.acceptMatch( createMatch(matches[i].getPath(), matches[i].getStart(),
+ matches[i].getEnd(), matches[i].getName(), matches[i].getPath()) );
+ }
+ } catch (CoreException ce) {}
+ }
+
+ mainSearchPM.done();
+ collector.done();
+
+ return new Status(IStatus.OK, CTestPlugin.getPluginId(), 0, BLANK_STRING, null); //$NON-NLS-1$
+ }
+
+ private MatchInfo[] generateMatchInfo() {
+ IndexInput input = new BlocksIndexInput(leaf.indexFile);
+ IEntryResult entryResult = leaf.getResult();
+ MatchInfo[] matches = new MatchInfo[DEFAULT_MATCH_INFO_SIZE];
+ try {
+ input.open();
+
+ int[] references = entryResult.getFileReferences();
+ int[][]offsets = entryResult.getOffsets();
+ int[][]offsetLengths = entryResult.getOffsetLengths();
+ if (offsets != null){
+ for (int j=0; j<offsets.length; j++){
+ for (int k=0; k<offsets[j].length; k++){
+ MatchInfo match = new MatchInfo();
+ if (references.length > j-1) {
+ IndexedFileEntry file = input.getIndexedFile(references[j]);
+ if (file != null)
+ match.setPath(PathUtil.getRawLocation(PathUtil.getWorkspaceRelativePath(file.getPath())));
+ }
+ int start=0;
+ int end=0;
+ try {
+ start=Integer.valueOf(String.valueOf(offsets[j][k]).substring(1)).intValue();
+ end=start+offsetLengths[j][k];
+ } catch (NumberFormatException nfe) {}
+
+ match.setStart(start) ;
+ match.setEnd(end);
+ match.setName(leaf.getName());
+
+ matches = (MatchInfo[])ArrayUtil.append(MatchInfo.class, matches, match);
+ }
+ }
+ }
+
+ } catch (IOException e) {
+ }
+
+ return matches;
+ }
+
+ private class MatchInfo {
+ private IPath path=null;
+ private int start=0;
+ private int end=0;
+ private String name=null;
+ public IPath getPath() {
+ return path;
+ }
+ public void setPath(IPath path) {
+ this.path = path;
+ }
+ public int getEnd() {
+ return end;
+ }
+ public void setEnd(int end) {
+ this.end = end;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public int getStart() {
+ return start;
+ }
+ public void setStart(int start) {
+ this.start = start;
+ }
+ }
+
+ public IMatch createMatch( Object fileResource, int start, int end, String name, IPath referringElement ) {
+ BasicSearchMatch result = new BasicSearchMatch();
+ if( fileResource instanceof IResource )
+ result.resource = (IResource) fileResource;
+ else if( fileResource instanceof IPath )
+ result.path = (IPath) fileResource;
+
+ result.startOffset = start;
+ result.endOffset = end;
+ result.parentName = BLANK_STRING; //$NON-NLS-1$
+ result.referringElement = referringElement;
+
+ result.name = name;
+
+ result.type = ICElement.C_FIELD; // TODO Devin static for now, want something like BasicSearchResultCollector#setElementInfo
+ result.visibility = ICElement.CPP_PUBLIC; // TODO Devin static for now, want something like BasicSearchResultCollector#setElementInfo
+ result.returnType = BLANK_STRING;
+
+ return result;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.search.ui.ISearchQuery#getLabel()
+ */
+ public String getLabel() {
+ return queryLabel;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.search.ui.ISearchQuery#canRerun()
+ */
+ public boolean canRerun() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.search.ui.ISearchQuery#canRunInBackground()
+ */
+ public boolean canRunInBackground() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.search.ui.ISearchQuery#getSearchResult()
+ */
+ public ISearchResult getSearchResult() {
+ if (_result == null)
+ _result= new CSearchResult(this);
+ return _result;
+ }
+
+}
Attachment:
new_dom_icons.zip
Description: Zip archive
Attachment:
new_indexer_icons.zip
Description: Zip archive