Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] DOM Parser test utilities


Here's the patch for the DOM Parser test utilities.

Devin Steffler
IBM's Eclipse CDT
Ottawa (Palladium), Ontario, Canada


Attachment: icons.zip
Description: Zip archive

Index: plugin.xml
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/plugin.xml,v
retrieving revision 1.25
diff -u -r1.25 plugin.xml
--- plugin.xml	22 Dec 2004 19:49:04 -0000	1.25
+++ plugin.xml	26 Jan 2005 16:29:41 -0000
@@ -17,6 +17,9 @@
       <import plugin="org.eclipse.cdt.ui"/>
       <import plugin="org.eclipse.swt"/>
       <import plugin="org.eclipse.ui"/>
+      <import plugin="org.eclipse.ui.editors"/>
+      <import plugin="org.eclipse.ui.views"/>
+      <import plugin="org.eclipse.ui.workbench.texteditor"/>
       <import plugin="org.junit"/>
       <import plugin="org.eclipse.cdt.core"/>
       <import plugin="org.eclipse.cdt.core.tests"/>
@@ -36,6 +39,48 @@
          class="org.eclipse.cdt.ui.tests.chelp.CHelpTestInfoProvider"
          id="org.eclipse.cdt.ui.tests.chelp.extension.3"/>
 
+   </extension>
+   
+      <extension
+         point="org.eclipse.ui.views">
+      <view
+            allowMultiple="false"
+            class="org.eclipse.cdt.ui.tests.DOMAST.DOMAST"
+            icon="icons/sample.gif"
+            category="org.eclipse.cdt.ui.views"
+            name="DOM AST"
+            id="org.eclipse.cdt.ui.tests.DOMAST.DOMAST">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="org.eclipse.ui.resourcePerspective">
+         <view
+               ratio="0.5"
+               relative="org.eclipse.ui.views.TaskList"
+               relationship="right"
+               id="org.eclipse.cdt.ui.tests.DOMAST.DOMAST">
+         </view>
+      </perspectiveExtension>
+   </extension>
+   <extension
+         point="org.eclipse.ui.popupMenus">
+      <viewerContribution
+            targetID="org.eclipse.cdt.ui.CView"
+            id="org.eclipse.cdt.ui.CView">
+         <action
+               label="Show in DOM AST"
+               class="org.eclipse.cdt.ui.tests.DOMAST.OpenDOMViewAction"
+               menubarPath="additions"
+               id="org.eclipse.cdt.ui.tests.DOMAST.OpenDOMViewAction"/>
+         <visibility>
+         	<or>
+				<objectState name="extension" value="cpp"/>
+				<objectState name="extension" value="c"/>				         	
+         	</or>
+         </visibility>
+      </viewerContribution>
    </extension>
Index: src/org/eclipse/cdt/ui/tests/DOMAST/CPPPopulateASTViewAction.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/DOMAST/CPPPopulateASTViewAction.java
diff -N src/org/eclipse/cdt/ui/tests/DOMAST/CPPPopulateASTViewAction.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/DOMAST/CPPPopulateASTViewAction.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,165 @@
+/**********************************************************************
+ * 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.DOMAST;
+
+import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
+import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
+import org.eclipse.cdt.core.dom.ast.IASTExpression;
+import org.eclipse.cdt.core.dom.ast.IASTInitializer;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTStatement;
+import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
+import org.eclipse.cdt.core.dom.ast.IASTTypeId;
+import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction;
+
+/**
+ * @author dsteffle
+ */
+public class CPPPopulateASTViewAction extends CPPBaseVisitorAction implements IPopulateDOMASTAction {
+	{
+		processNames          = true;
+		processDeclarations   = true;
+		processInitializers   = true;
+		processParameterDeclarations = true;
+		processDeclarators    = true;
+		processDeclSpecifiers = true;
+		processExpressions    = true;
+		processStatements     = true;
+		processTypeIds        = true;
+		processEnumerators    = true;
+		processBaseSpecifiers = true;
+		processNamespaces     = true;
+	}
+
+	TreeParent root = null;
+	
+	public CPPPopulateASTViewAction(IASTTranslationUnit tu) {
+		root = new TreeParent(tu);
+	}
+	
+	private void addRoot(IASTNode node) {
+		TreeParent parent = root.findParentOfNode(node);
+		
+		if ( parent != null ) {
+			parent.addChild(new TreeParent(node));
+		} else {
+			root.addChild(new TreeParent(node));
+		}
+			
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration)
+	 */
+	public int processDeclaration(IASTDeclaration declaration) {
+		addRoot(declaration);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processDeclarator(org.eclipse.cdt.core.dom.ast.IASTDeclarator)
+	 */
+	public int processDeclarator(IASTDeclarator declarator) {
+		addRoot(declarator);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processBaseSpecifier(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier)
+	 */
+	public int processBaseSpecifier(ICPPASTBaseSpecifier specifier) {
+		addRoot(specifier);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processDeclSpecifier(org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier)
+	 */
+	public int processDeclSpecifier(IASTDeclSpecifier declSpec) {
+		addRoot(declSpec);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processEnumerator(org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator)
+	 */
+	public int processEnumerator(IASTEnumerator enumerator) {
+		addRoot(enumerator);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processExpression(org.eclipse.cdt.core.dom.ast.IASTExpression)
+	 */
+	public int processExpression(IASTExpression expression) {
+		addRoot(expression);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processInitializer(org.eclipse.cdt.core.dom.ast.IASTInitializer)
+	 */
+	public int processInitializer(IASTInitializer initializer) {
+		addRoot(initializer);
+		return PROCESS_CONTINUE;
+	}
+		
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processName(org.eclipse.cdt.core.dom.ast.IASTName)
+	 */
+	public int processName(IASTName name) {
+		addRoot(name);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processNamespace(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition)
+	 */
+	public int processNamespace(ICPPASTNamespaceDefinition namespace) {
+		addRoot(namespace);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processParameterDeclaration(org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration)
+	 */
+	public int processParameterDeclaration(
+			IASTParameterDeclaration parameterDeclaration) {
+		addRoot(parameterDeclaration);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processStatement(org.eclipse.cdt.core.dom.ast.IASTStatement)
+	 */
+	public int processStatement(IASTStatement statement) {
+		addRoot(statement);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processTypeId(org.eclipse.cdt.core.dom.ast.IASTTypeId)
+	 */
+	public int processTypeId(IASTTypeId typeId) {
+		addRoot(typeId);
+		return PROCESS_CONTINUE;
+	}
+	
+	public TreeParent getTree() {
+		return root;
+	}
+}
Index: src/org/eclipse/cdt/ui/tests/DOMAST/CPopulateASTViewAction.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/DOMAST/CPopulateASTViewAction.java
diff -N src/org/eclipse/cdt/ui/tests/DOMAST/CPopulateASTViewAction.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/DOMAST/CPopulateASTViewAction.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,146 @@
+/**********************************************************************
+ * 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.DOMAST;
+
+import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
+import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
+import org.eclipse.cdt.core.dom.ast.IASTExpression;
+import org.eclipse.cdt.core.dom.ast.IASTInitializer;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTStatement;
+import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
+import org.eclipse.cdt.core.dom.ast.IASTTypeId;
+import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator;
+import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction;
+
+/**
+ * @author dsteffle
+ */
+public class CPopulateASTViewAction extends CBaseVisitorAction implements IPopulateDOMASTAction {
+	{
+		processNames          = true;
+		processDeclarations   = true;
+		processInitializers   = true;
+		processParameterDeclarations = true;
+		processDeclarators    = true;
+		processDeclSpecifiers = true;
+		processExpressions    = true;
+		processStatements     = true;
+		processTypeIds        = true;
+		processEnumerators    = true;
+	}
+
+	TreeParent root = null; // TODO what about using a hashtable/hashmap for the tree?
+	
+	public CPopulateASTViewAction(IASTTranslationUnit tu) {
+		root = new TreeParent(tu);
+	}
+	
+	private void addRoot(IASTNode node) {
+		TreeParent parent = root.findParentOfNode(node);
+		
+		if ( parent != null ) {
+			parent.addChild(new TreeParent(node));
+		} else {
+			root.addChild(new TreeParent(node));
+		}
+			
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration)
+	 */
+	public int processDeclaration(IASTDeclaration declaration) {
+		addRoot(declaration);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction#processDeclarator(org.eclipse.cdt.core.dom.ast.IASTDeclarator)
+	 */
+	public int processDeclarator(IASTDeclarator declarator) {
+		addRoot(declarator);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction#processDeclSpecifier(org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier)
+	 */
+	public int processDeclSpecifier(IASTDeclSpecifier declSpec) {
+		addRoot(declSpec);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction#processEnumerator(org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator)
+	 */
+	public int processEnumerator(IASTEnumerator enumerator) {
+		addRoot(enumerator);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction#processExpression(org.eclipse.cdt.core.dom.ast.IASTExpression)
+	 */
+	public int processExpression(IASTExpression expression) {
+		addRoot(expression);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction#processInitializer(org.eclipse.cdt.core.dom.ast.IASTInitializer)
+	 */
+	public int processInitializer(IASTInitializer initializer) {
+		addRoot(initializer);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction#processName(org.eclipse.cdt.core.dom.ast.IASTName)
+	 */
+	public int processName(IASTName name) {
+		addRoot(name);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction#processParameterDeclaration(org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration)
+	 */
+	public int processParameterDeclaration(
+			IASTParameterDeclaration parameterDeclaration) {
+		addRoot(parameterDeclaration);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction#processStatement(org.eclipse.cdt.core.dom.ast.IASTStatement)
+	 */
+	public int processStatement(IASTStatement statement) {
+		addRoot(statement);
+		return PROCESS_CONTINUE;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction#processTypeId(org.eclipse.cdt.core.dom.ast.IASTTypeId)
+	 */
+	public int processTypeId(IASTTypeId typeId) {
+		addRoot(typeId);
+		return PROCESS_CONTINUE;
+	}
+	
+	public TreeParent getTree() {
+		return root;
+	}
+
+}
Index: src/org/eclipse/cdt/ui/tests/DOMAST/DOMAST.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/DOMAST/DOMAST.java
diff -N src/org/eclipse/cdt/ui/tests/DOMAST/DOMAST.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/DOMAST/DOMAST.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,535 @@
+/**********************************************************************
+ * 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.DOMAST;
+
+import java.io.IOException;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.eclipse.cdt.ui.tests.DOMAST.DOMASTPluginImages;
+import org.eclipse.cdt.ui.tests.DOMAST.CPPPopulateASTViewAction;
+import org.eclipse.cdt.ui.tests.DOMAST.CPopulateASTViewAction;
+import org.eclipse.cdt.ui.tests.DOMAST.IPopulateDOMASTAction;
+import org.eclipse.cdt.ui.tests.DOMAST.TreeObject;
+import org.eclipse.cdt.ui.tests.DOMAST.TreeParent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.*;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.action.*;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ui.*;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.SWT;
+import org.eclipse.cdt.core.parser.CodeReader;
+import org.eclipse.cdt.core.parser.IScannerInfo;
+import org.eclipse.cdt.core.parser.NullLogService;
+import org.eclipse.cdt.core.parser.NullSourceElementRequestor;
+import org.eclipse.cdt.core.parser.ParserFactory;
+import org.eclipse.cdt.core.parser.ParserLanguage;
+import org.eclipse.cdt.core.parser.IScanner;
+import org.eclipse.cdt.core.parser.ParserMode;
+import org.eclipse.cdt.core.parser.ScannerInfo;
+import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
+import org.eclipse.cdt.core.dom.ast.IASTArrayModifier;
+import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
+import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
+import org.eclipse.cdt.core.dom.ast.IASTExpression;
+import org.eclipse.cdt.core.dom.ast.IASTInitializer;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTPointerOperator;
+import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
+import org.eclipse.cdt.core.dom.ast.IASTProblem;
+import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTStatement;
+import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
+import org.eclipse.cdt.core.dom.ast.IASTTypeId;
+import org.eclipse.cdt.core.dom.ast.c.ICASTDesignator;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
+import org.eclipse.cdt.internal.core.dom.parser.AbstractGNUSourceCodeParser;
+import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor;
+import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor.CBaseVisitorAction;
+import org.eclipse.cdt.internal.core.dom.parser.c.GCCParserExtensionConfiguration;
+import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor.CPPBaseVisitorAction;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.GPPParserExtensionConfiguration;
+import org.eclipse.cdt.internal.ui.editor.CEditor;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+
+
+/**
+ * This sample class demonstrates how to plug-in a new
+ * workbench view. The view shows data obtained from the
+ * model. The sample creates a dummy model on the fly,
+ * but a real implementation would connect to the model
+ * available either in this or another plug-in (e.g. the workspace).
+ * The view is connected to the model using a content provider.
+ * <p>
+ * The view uses a label provider to define how model
+ * objects should be presented in the view. Each
+ * view can present the same model objects using
+ * different labels and icons, if needed. Alternatively,
+ * a single label provider can be shared between views
+ * in order to ensure that objects of the same type are
+ * presented in the same way everywhere.
+ * <p>
+ */
+
+public class DOMAST extends ViewPart {
+	private static final String VIEW_NAME = "DOM View"; //$NON-NLS-1$
+	private static final String POPUPMENU = "#PopupMenu"; //$NON-NLS-1$
+	private static final String OPEN_DEFINITIONS = "Open Definitions"; //$NON-NLS-1$
+	private static final String OPEN_REFERENCES = "Open References"; //$NON-NLS-1$
+	private TreeViewer viewer;
+	private DrillDownAdapter drillDownAdapter;
+	private Action action1;
+	private Action action2;
+	private Action singleClickAction;
+	private IFile file = null;
+	private IEditorPart part = null;
+	private ParserLanguage lang = null;
+	
+	/*
+	 * The content provider class is responsible for
+	 * providing objects to the view. It can wrap
+	 * existing objects in adapters or simply return
+	 * objects as-is. These objects may be sensitive
+	 * to the current input of the view, or ignore
+	 * it and always show the same content 
+	 * (like Task List, for example).
+	 */
+	 
+	public class ViewContentProvider implements IStructuredContentProvider, 
+										   ITreeContentProvider {
+		private TreeParent invisibleRoot;
+		private IFile aFile = null;
+		
+		/**
+		 * 
+		 */
+		public ViewContentProvider() {}
+		
+		/**
+		 * 
+		 */
+		public ViewContentProvider(IFile file) {
+			this.aFile = file;
+		}
+
+		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+		}
+		public void dispose() {
+		}
+		public Object[] getElements(Object parent) {
+			if (parent.equals(getViewSite())) {
+				if (invisibleRoot==null) initialize();
+				return getChildren(invisibleRoot);
+			}
+			return getChildren(parent);
+		}
+		public Object getParent(Object child) {
+			if (child instanceof TreeObject) {
+				return ((TreeObject)child).getParent();
+			}
+			return null;
+		}
+		public Object [] getChildren(Object parent) {
+			if (parent instanceof TreeParent) {
+				return ((TreeParent)parent).getChildren();
+			}
+			return new Object[0];
+		}
+		public boolean hasChildren(Object parent) {
+			if (parent instanceof TreeParent)
+				return ((TreeParent)parent).hasChildren();
+			return false;
+		}
+	
+		private void initialize() {
+			if ( aFile == null || lang == null) return;
+			
+			IPopulateDOMASTAction action = null;
+
+			// TODO could use something like below to work with working copy... i.e. refresh button
+//			IProject currentProject = aFile.getProject();
+//			IWorkingCopy workingCopy = null;
+//			if( editor.isDirty() ){
+//				IWorkingCopy [] workingCopies = CUIPlugin.getSharedWorkingCopies();
+//				if( workingCopies != null ){
+//					for( int i = 0; i < workingCopies.length; i++ ){
+//						if( workingCopies[i].getUnderlyingResource().equals( file ) ){
+//							workingCopy = workingCopies[i];
+//							break;
+//						}
+//					}
+//				}
+//			}
+			
+			CodeReader reader = null;
+			try {
+//				if( workingCopy == null )
+					reader = new CodeReader(aFile.getLocation().toOSString(), aFile.getCharset() );
+//				else 
+//					reader = new CodeReader(file.getLocation().toOSString(), workingCopy.getContents());
+			} catch (IOException e) {
+				e.printStackTrace();
+			} catch ( CoreException e ) {
+	            e.printStackTrace();
+	        }
+			
+			// get IFile
+//			IWorkspace workspace= ResourcesPlugin.getWorkspace();
+//			workspace.setDescription(desc);
+//			getWorkbench().getActiveWorkbenchWindow();
+			
+			// parse IFile
+			ParserMode mode = ParserMode.COMPLETE_PARSE;
+			Map definitions = new Hashtable();
+			
+			String [] includePaths = new String[0];
+			IScannerInfo scannerInfo = new ScannerInfo( definitions, includePaths );
+			IScanner scanner = ParserFactory.createScanner(
+					reader,
+					scannerInfo, 		
+					mode, 
+					lang,
+					new NullSourceElementRequestor(), 			 
+					null, 
+					null  );
+			AbstractGNUSourceCodeParser parser = null;
+			if ( lang == ParserLanguage.C ) {
+				parser = new GNUCSourceParser(
+						scanner,
+						mode, 
+						new NullLogService(),
+						new GCCParserExtensionConfiguration()
+						);
+			
+				IASTTranslationUnit tu = parser.parse();
+				
+				action = new CPopulateASTViewAction(tu);
+				CVisitor.visitTranslationUnit(tu, (CBaseVisitorAction)action);
+			} else if ( lang == ParserLanguage.CPP ){
+				parser = new GNUCPPSourceParser(
+				scanner,
+				mode, 
+				new NullLogService(),
+				new GPPParserExtensionConfiguration()
+				);
+				
+				IASTTranslationUnit tu = parser.parse();
+				
+				action = new CPPPopulateASTViewAction(tu);
+				CPPVisitor.visitTranslationUnit(tu, (CPPBaseVisitorAction)action);
+			}
+			
+			// display roots
+			invisibleRoot = new TreeParent(null); //$NON-NLS-1$
+			invisibleRoot.addChild(action.getTree());
+			
+		}
+	}
+	
+	class ViewLabelProvider extends LabelProvider {
+
+		public String getText(Object obj) {
+			return obj.toString();
+		}
+		public Image getImage(Object obj) {
+			String imageKey = DOMASTPluginImages.IMG_DEFAULT;
+			
+			IASTNode node = null;
+			if (obj instanceof TreeObject) {
+				node = ((TreeObject)obj).getNode();
+			}
+			
+			if ( node instanceof IASTArrayModifier ) {
+				imageKey = DOMASTPluginImages.IMG_IASTArrayModifier;
+			} else if ( node instanceof IASTDeclaration ) {
+				imageKey = DOMASTPluginImages.IMG_IASTDeclaration;
+			} else if ( node instanceof IASTDeclarator ) {
+				imageKey = DOMASTPluginImages.IMG_IASTDeclarator;
+			} else if ( node instanceof IASTDeclSpecifier ) {
+				imageKey = DOMASTPluginImages.IMG_IASTDeclSpecifier;
+			} else if ( node instanceof IASTEnumerator ) {
+				imageKey = DOMASTPluginImages.IMG_IASTEnumerator;
+			} else if ( node instanceof IASTExpression ) {
+				imageKey = DOMASTPluginImages.IMG_IASTExpression;
+			} else if ( node instanceof IASTInitializer ) {
+				imageKey = DOMASTPluginImages.IMG_IASTInitializer;
+			} else if ( node instanceof IASTName ) {
+				imageKey = DOMASTPluginImages.IMG_IASTName;
+			} else if ( node instanceof IASTParameterDeclaration ) {
+				imageKey = DOMASTPluginImages.IMG_IASTParameterDeclaration;
+			} else if ( node instanceof IASTPointerOperator ) {
+				imageKey = DOMASTPluginImages.IMG_IASTPointerOperator;
+			} else if ( node instanceof IASTPreprocessorStatement ) {
+				imageKey = DOMASTPluginImages.IMG_IASTPreprocessorStatement;
+			} else if ( node instanceof IASTProblem ) {
+				imageKey = DOMASTPluginImages.IMG_IASTProblem;
+			} else if ( node instanceof IASTSimpleDeclaration ) {
+				imageKey = DOMASTPluginImages.IMG_IASTSimpleDeclaration;
+			} else if ( node instanceof IASTStatement ) {
+				imageKey = DOMASTPluginImages.IMG_IASTStatement;
+			} else if ( node instanceof IASTTranslationUnit ) {
+				imageKey = DOMASTPluginImages.IMG_IASTTranslationUnit;
+			} else if ( node instanceof IASTTypeId ) {
+				imageKey = DOMASTPluginImages.IMG_IASTTypeId;
+			} else if ( node instanceof ICASTDesignator ) {
+				imageKey = DOMASTPluginImages.IMG_ICASTDesignator;
+			} else if ( node instanceof ICPPASTConstructorChainInitializer ) {
+				imageKey = DOMASTPluginImages.IMG_ICPPASTConstructorChainInitializer;
+			} else if ( node instanceof ICPPASTTemplateParameter ) {
+				imageKey = DOMASTPluginImages.IMG_ICPPASTTemplateParameter;
+			}
+			
+			return DOMASTPluginImages.get(imageKey);
+		}
+	}
+	class NameSorter extends ViewerSorter {
+	}
+
+	public DOMAST() {
+		
+	}
+	
+	/**
+	 * This is a callback that will allow us
+	 * to create the viewer and initialize it.
+	 */
+	public void createPartControl(Composite parent) {
+		
+		if (part == null) {
+			IWorkbenchPage[] pages = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPages();
+			
+			if (pages.length == 0) {
+				// TODO determine how to hide view if no pages found and part==null
+			}
+			
+			outerLoop: for(int i=0; i<pages.length; i++) {
+				IEditorReference[] editorRefs = pages[i].getEditorReferences();
+				for (int j=0; j<editorRefs.length; j++) {
+					part = editorRefs[j].getEditor(false);
+					if (part instanceof CEditor) {
+						// TODO set the language properly if implement the above TODO
+						lang = ParserLanguage.CPP;
+						break outerLoop;
+					}
+				}
+			}
+			
+			if (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null &&
+					PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor() != null)			
+				part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+		}
+		
+		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		drillDownAdapter = new DrillDownAdapter(viewer);
+		
+		if (part instanceof CEditor)
+			viewer.setContentProvider( new ViewContentProvider(((CEditor)part).getInputFile()) );
+		else
+			viewer.setContentProvider(new ViewContentProvider(file));
+		
+		viewer.setLabelProvider(new ViewLabelProvider());
+		viewer.setInput(getViewSite());
+		makeActions();
+		hookContextMenu();
+		hookSingleClickAction();
+		contributeToActionBars();
+	}
+	
+	public void setContentProvider(ViewContentProvider vcp) {
+		viewer.setContentProvider(vcp);
+	}
+	
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager(POPUPMENU);
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+				DOMAST.this.fillContextMenu(manager);
+				IContributionItem[] items = manager.getItems();
+				for (int i=0; i<items.length; i++) {
+					// TODO Devin put in the check here if IASTName or not... if it isn't, and item is open declaration (make constant) then hide it
+					if (items[i] instanceof ActionContributionItem &&
+							(((ActionContributionItem)items[i]).getAction().getText().equals(OPEN_REFERENCES) ||
+									((ActionContributionItem)items[i]).getAction().getText().equals(OPEN_DEFINITIONS) )) {
+						if (viewer.getSelection() instanceof StructuredSelection &&
+								((StructuredSelection)viewer.getSelection()).getFirstElement() instanceof TreeObject &&
+								((TreeObject)((StructuredSelection)viewer.getSelection()).getFirstElement()).getNode() instanceof IASTName) {
+							items[i].setVisible(true);							
+						} else {
+							items[i].setVisible(false);
+						}
+					}
+				}
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(menuMgr, viewer);
+	}
+
+	private void contributeToActionBars() {
+		IActionBars bars = getViewSite().getActionBars();
+		fillLocalPullDown(bars.getMenuManager());
+		fillLocalToolBar(bars.getToolBarManager());
+	}
+
+	private void fillLocalPullDown(IMenuManager manager) {
+//		manager.add(action1); // TODO determine the groups/filters to use
+//		manager.add(new Separator());
+//		manager.add(action2);
+	}
+
+	private void fillContextMenu(IMenuManager manager) {
+		manager.add(action1);
+		manager.add(action2);
+		manager.add(new Separator());
+		drillDownAdapter.addNavigationActions(manager);
+		// Other plug-ins can contribute there actions here
+		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+	}
+	
+	private void fillLocalToolBar(IToolBarManager manager) {
+//		manager.add(action1); // TODO determine the groups/filters to use
+//		manager.add(action2);
+//		manager.add(new Separator());
+//		drillDownAdapter.addNavigationActions(manager);
+	}
+
+	private void makeActions() {
+		action1 = new Action() {
+			public void run() {
+				showMessage("Action 1 executed"); // TODO Devin open declarations action ... john probably wants all of them highlighted... wouldn't I have to use annotations then???
+			}
+		};
+		action1.setText(OPEN_REFERENCES);
+		action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+		
+		action2 = new Action() {
+			public void run() {
+				showMessage("Action 2 executed"); // TODO Devin open definitions action ... use annotations to highlight definitions?
+			}
+		};
+		action2.setText(OPEN_DEFINITIONS);
+		action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+				getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+		
+		singleClickAction = new ASTHighlighterAction(part);
+	}
+	
+	private class ASTHighlighterAction extends Action {
+		IEditorPart aPart = null;
+		
+		public ASTHighlighterAction(IEditorPart part) {
+			this.aPart = part;
+		}
+		
+		public void setPart(IEditorPart part) {
+			this.aPart = part;
+		}
+		
+		public void run() {
+			ISelection selection = viewer.getSelection();
+			Object obj = ((IStructuredSelection)selection).getFirstElement();
+			if (aPart instanceof CEditor && obj instanceof TreeObject) {
+				((CEditor)aPart).selectAndReveal(((TreeObject)obj).getOffset(), ((TreeObject)obj).getLength());
+			}
+		}
+	}
+
+	// TODO need to create a new action with the following for annotations (get declarations/references)
+//	ISelection selection = viewer.getSelection();
+//	Object obj = ((IStructuredSelection)selection).getFirstElement();
+//	
+//	if (aPart instanceof CEditor) {
+//		IAnnotationModel aModel = ((CEditor)aPart).getDocumentProvider().getAnnotationModel(aPart.getEditorInput());
+//		if ( aModel != null && obj instanceof TreeObject && !(((TreeObject)obj).getNode() instanceof IASTTranslationUnit) ) {
+//			Iterator itr = aModel.getAnnotationIterator();
+//			while (itr.hasNext()) {
+//				aModel.removeAnnotation((Annotation)itr.next());
+//			}
+//			
+//			ASTViewAnnotation annotation = new ASTViewAnnotation();
+//			annotation.setType(CMarkerAnnotation.WARNING_ANNOTATION_TYPE);
+//			aModel.addAnnotation(annotation, new Position(((TreeObject)obj).getOffset(), ((TreeObject)obj).getLength()));
+//		}
+//	}
+
+	
+	// TODO implement annotation for things like open declarations/references
+//	private class ASTViewAnnotation extends Annotation implements IAnnotationPresentation {
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.text.source.IAnnotationPresentation#getLayer()
+//		 */
+//		public int getLayer() {
+//			return IAnnotationAccessExtension.DEFAULT_LAYER;
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.text.source.IAnnotationPresentation#paint(org.eclipse.swt.graphics.GC, org.eclipse.swt.widgets.Canvas, org.eclipse.swt.graphics.Rectangle)
+//		 */
+//		public void paint(GC gc, Canvas canvas, Rectangle r) {
+//		    // TODO implement this annotation image for 
+//			ImageUtilities.drawImage(ASTViewPluginImages.get(ASTViewPluginImages.IMG_TO_DRAW), gc, canvas, r, SWT.CENTER, SWT.TOP);
+//		}
+//	}
+	
+	private void hookSingleClickAction() {
+		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				// TODO Auto-generated method stub
+				singleClickAction.run();
+			}
+		});
+	}
+	private void showMessage(String message) {
+		MessageDialog.openInformation(
+			viewer.getControl().getShell(),
+			VIEW_NAME,
+			message);
+	}
+
+	/**
+	 * Passing the focus request to the viewer's control.
+	 */
+	public void setFocus() {
+		viewer.getControl().setFocus();
+	}
+	
+	public void setFile(IFile file) {
+		this.file = file;
+		viewer.setContentProvider(new ViewContentProvider(file));
+	}
+	
+	public void setPart(IEditorPart part) {
+		this.part = part;
+		
+		if (singleClickAction instanceof ASTHighlighterAction)
+			((ASTHighlighterAction)singleClickAction).setPart(part);
+	}
+	
+	public void setLang(ParserLanguage lang) {
+		this.lang = lang;
+	}
+	
+}
Index: src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTPluginImages.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTPluginImages.java
diff -N src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTPluginImages.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTPluginImages.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,122 @@
+/**********************************************************************
+ * 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.DOMAST;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.cdt.testplugin.CTestPlugin;
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author dsteffle
+ */
+public class DOMASTPluginImages {
+	private static ImageRegistry imageRegistry = new ImageRegistry(CUIPlugin.getStandardDisplay());
+	
+	/**
+	 * Returns the standard display to be used. The method first checks, if
+	 * the thread calling this method has an associated display. If so, this
+	 * display is returned. Otherwise the method returns the default display.
+	 */
+	public static Display getStandardDisplay() {
+		Display display= Display.getCurrent();
+		if (display == null) {
+			display= Display.getDefault();
+		}
+		return display;		
+	}	
+	
+	// Subdirectory (under the package containing this class) where 16 color images are
+	private static URL fgIconBaseURL;
+
+	static {
+		try {
+			fgIconBaseURL= new URL(CTestPlugin.getDefault().getBundle().getEntry("/"), "icons/" ); //$NON-NLS-1$ //$NON-NLS-2$
+		} catch (MalformedURLException e) {}
+	}	
+	public static final String PLUGIN_ID = "org.eclipse.cdt.testplugin.CTestPlugin"; //$NON-NLS-1$
+	private static final String NAME_PREFIX= PLUGIN_ID + '.';
+	private static final int NAME_PREFIX_LENGTH= NAME_PREFIX.length();
+	public static final String ICON_PREFIX= "used/"; //$NON-NLS-1$
+
+	public static final String IMG_IASTArrayModifier= NAME_PREFIX + "showasarray_co.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTDeclaration= NAME_PREFIX + "cdeclaration_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTDeclarator= NAME_PREFIX + "variable_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTDeclSpecifier= NAME_PREFIX + "var_simple.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTEnumerator= NAME_PREFIX + "enumerator_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTExpression= NAME_PREFIX + "expression_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTInitializer= NAME_PREFIX + "variable_local_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTName= NAME_PREFIX + "tnames_co.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTParameterDeclaration= NAME_PREFIX + "var_declaration_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTPointerOperator= NAME_PREFIX + "var_pointer.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTPreprocessorStatement= NAME_PREFIX + "define_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTProblem= NAME_PREFIX + "warning_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTSimpleDeclaration= NAME_PREFIX + "method_public_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTStatement= NAME_PREFIX + "statement_obj.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTTranslationUnit= NAME_PREFIX + "source_attach_attrib.gif"; //$NON-NLS-1$
+	public static final String IMG_IASTTypeId= NAME_PREFIX + "types.gif"; //$NON-NLS-1$
+	public static final String IMG_ICASTDesignator= NAME_PREFIX + "watch_globals.gif"; //$NON-NLS-1$
+	public static final String IMG_ICPPASTConstructorChainInitializer = NAME_PREFIX + "jump_co.gif"; //$NON-NLS-1$
+	public static final String IMG_ICPPASTTemplateParameter = NAME_PREFIX + "disassembly.gif"; //$NON-NLS-1$
+	public static final String IMG_DEFAULT = NAME_PREFIX + "brkpd_obj.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);
+	public static final ImageDescriptor DESC_IASTDeclarator= createManaged(ICON_PREFIX, IMG_IASTDeclarator);
+	public static final ImageDescriptor DESC_IASTDeclSpecifier= createManaged(ICON_PREFIX, IMG_IASTDeclSpecifier);
+	public static final ImageDescriptor DESC_IASTEnumerator= createManaged(ICON_PREFIX, IMG_IASTEnumerator);
+	public static final ImageDescriptor DESC_IASTExpression= createManaged(ICON_PREFIX, IMG_IASTExpression);
+	public static final ImageDescriptor DESC_IASTInitializer= createManaged(ICON_PREFIX, IMG_IASTInitializer);
+	public static final ImageDescriptor DESC_IASTName= createManaged(ICON_PREFIX, IMG_IASTName);
+	public static final ImageDescriptor DESC_IASTParameterDeclaration= createManaged(ICON_PREFIX, IMG_IASTParameterDeclaration);
+	public static final ImageDescriptor DESC_IASTPointerOperator= createManaged(ICON_PREFIX, IMG_IASTPointerOperator);
+	public static final ImageDescriptor DESC_IASTPreprocessorStatement= createManaged(ICON_PREFIX, IMG_IASTPreprocessorStatement);
+	public static final ImageDescriptor DESC_IASTProblem= createManaged(ICON_PREFIX, IMG_IASTProblem);
+	public static final ImageDescriptor DESC_IASTSimpleDeclaration= createManaged(ICON_PREFIX, IMG_IASTSimpleDeclaration);
+	public static final ImageDescriptor DESC_IASTStatement= createManaged(ICON_PREFIX, IMG_IASTStatement);
+	public static final ImageDescriptor DESC_IASTTranslationUnit= createManaged(ICON_PREFIX, IMG_IASTTranslationUnit);
+	public static final ImageDescriptor DESC_IASTTypeId= createManaged(ICON_PREFIX, IMG_IASTTypeId);
+	public static final ImageDescriptor DESC_ICASTDesignator= createManaged(ICON_PREFIX, IMG_ICASTDesignator);
+	public static final ImageDescriptor DESC_ICPPASTConstructorChainInitializer= createManaged(ICON_PREFIX, IMG_ICPPASTConstructorChainInitializer);
+	public static final ImageDescriptor DESC_ICPPASTTemplateParameter= createManaged(ICON_PREFIX, IMG_ICPPASTTemplateParameter);
+	public static final ImageDescriptor DESC_DEFAULT= createManaged(ICON_PREFIX, IMG_DEFAULT);
+	
+	private static ImageDescriptor createManaged(String prefix, String name) {
+		return createManaged(imageRegistry, prefix, name);
+	}
+	
+	private static ImageDescriptor createManaged(ImageRegistry registry, String prefix, String name) {
+		ImageDescriptor result= ImageDescriptor.createFromURL(makeIconFileURL(prefix, name.substring(NAME_PREFIX_LENGTH)));
+		registry.put(name, result);
+		return result;
+	}
+	
+	private static URL makeIconFileURL(String prefix, String name) {
+		StringBuffer buffer= new StringBuffer(prefix);
+		buffer.append(name);
+		try {
+			return new URL(fgIconBaseURL, buffer.toString());
+		} catch (MalformedURLException e) {
+			CUIPlugin.getDefault().log(e);
+			return null;
+		}
+	}
+	
+	public static Image get(String key) {
+		return imageRegistry.get(key);
+	}
+	
+}
Index: src/org/eclipse/cdt/ui/tests/DOMAST/IPopulateDOMASTAction.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/DOMAST/IPopulateDOMASTAction.java
diff -N src/org/eclipse/cdt/ui/tests/DOMAST/IPopulateDOMASTAction.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/DOMAST/IPopulateDOMASTAction.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,18 @@
+/**********************************************************************
+ * 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.DOMAST;
+
+/**
+ * @author dsteffle
+ */
+public interface IPopulateDOMASTAction {
+	public TreeParent getTree();
+}
Index: src/org/eclipse/cdt/ui/tests/DOMAST/OpenDOMViewAction.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/DOMAST/OpenDOMViewAction.java
diff -N src/org/eclipse/cdt/ui/tests/DOMAST/OpenDOMViewAction.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/DOMAST/OpenDOMViewAction.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,120 @@
+/**********************************************************************
+ * 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.DOMAST;
+
+import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ISourceReference;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.core.parser.ParserLanguage;
+import org.eclipse.cdt.internal.core.model.TranslationUnit;
+import org.eclipse.cdt.internal.ui.util.EditorUtility;
+import org.eclipse.cdt.ui.tests.DOMAST.DOMAST;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IEditorActionDelegate;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * @author dsteffle
+ */
+public class OpenDOMViewAction implements IViewActionDelegate, IEditorActionDelegate, IObjectActionDelegate {
+
+	private static final String VIEW_ID = "org.eclipse.cdt.ui.tests.DOMAST.DOMAST"; //$NON-NLS-1$
+	IViewPart viewPart = null;
+	ISelection selection = null;
+	IFile file = null;
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.viewPart = view;
+		
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		// TODO Auto-generated method stub
+	
+		Object obj = ((IStructuredSelection)selection).getFirstElement();
+		ITranslationUnit tu = null;
+		IEditorPart part = null;
+		if (obj instanceof ISourceReference) {
+			tu = ((ISourceReference) obj).getTranslationUnit();
+			if (tu != null) {
+				if (viewPart != null) {
+					if (obj instanceof ICElement) {
+						try {
+							part = EditorUtility.openInEditor(obj);
+						} catch (CModelException cme) {
+						} catch (PartInitException pie) {}
+					
+					}
+				}
+			}
+		}
+		
+		IViewPart tempView = null;
+
+		try {
+			tempView = viewPart.getSite().getPage().showView(VIEW_ID);
+		} catch (PartInitException pie) {}
+		
+		if (tempView != null) {
+			if (tempView instanceof DOMAST) {
+				((DOMAST)tempView).setFile(file);
+				((DOMAST)tempView).setPart(part);
+				if (tu != null) {
+					((DOMAST)tempView).setLang(tu.isCXXLanguage() ? ParserLanguage.CPP : ParserLanguage.C);
+				}
+				((DOMAST)tempView).setContentProvider(((DOMAST)tempView).new ViewContentProvider(file));
+			}
+		}
+
+		viewPart.getSite().getPage().activate(tempView);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection &&
+				((IStructuredSelection)selection).getFirstElement() instanceof TranslationUnit &&
+				((TranslationUnit)((IStructuredSelection)selection).getFirstElement()).getResource() instanceof IFile) {
+			this.file = (IFile)((TranslationUnit)((IStructuredSelection)selection).getFirstElement()).getResource();
+		}
+		this.selection = selection;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IEditorActionDelegate#setActiveEditor(org.eclipse.jface.action.IAction, org.eclipse.ui.IEditorPart)
+	 */
+	public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+	}
+
+}
Index: src/org/eclipse/cdt/ui/tests/DOMAST/TreeObject.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/DOMAST/TreeObject.java
diff -N src/org/eclipse/cdt/ui/tests/DOMAST/TreeObject.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/DOMAST/TreeObject.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,96 @@
+/**********************************************************************
+ * 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.DOMAST;
+
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
+import org.eclipse.core.runtime.IAdaptable;
+
+/**
+ * @author dsteffle
+ */
+public class TreeObject implements IAdaptable {
+	private static final String IGCCAST_PREFIX = "IGCCAST"; //$NON-NLS-1$
+	private static final String IGNUAST_PREFIX = "IGNUAST"; //$NON-NLS-1$
+	private static final String IGPPAST_PREFIX = "IGPPAST"; //$NON-NLS-1$
+	private static final String ICPPAST_PREFIX = "ICPPAST"; //$NON-NLS-1$
+	private static final String ICAST_PREFIX = "ICAST"; //$NON-NLS-1$
+	private static final String IAST_PREFIX = "IAST"; //$NON-NLS-1$
+	private static final String START_OF_LIST = ": "; //$NON-NLS-1$
+	private static final String LIST_SEPARATOR = ", "; //$NON-NLS-1$
+	private static final String FILENAME_SEPARATOR = "."; //$NON-NLS-1$
+	private IASTNode node = null;
+	private TreeParent parent;
+	
+	public TreeObject(IASTNode node) {
+		this.node = node;
+	}
+	public IASTNode getNode() {
+		return node;
+	}
+	public void setParent(TreeParent parent) {
+		this.parent = parent;
+	}
+	public TreeParent getParent() {
+		return parent;
+	}
+	
+	private boolean hasProperPrefix(String string) {
+		if (string.startsWith(IAST_PREFIX) ||
+				string.startsWith(ICAST_PREFIX) ||
+				string.startsWith(ICPPAST_PREFIX) ||
+				string.startsWith(IGPPAST_PREFIX) ||
+				string.startsWith(IGNUAST_PREFIX) ||
+				string.startsWith(IGCCAST_PREFIX))
+			return true;
+
+		return false;
+	}
+	
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		
+		Class[] classes = node.getClass().getInterfaces();
+		for(int i=0; i<classes.length; i++) {
+			String interfaceName = classes[i].getName().substring(classes[i].getName().lastIndexOf(FILENAME_SEPARATOR) + 1);
+			if (hasProperPrefix(interfaceName)) {
+				buffer.append(interfaceName);
+				if (i+1 < classes.length && hasProperPrefix(classes[i+1].getName().substring(classes[i+1].getName().lastIndexOf(FILENAME_SEPARATOR) + 1)))
+					buffer.append(LIST_SEPARATOR);
+			}
+		}
+		
+		if ( node instanceof IASTName ) {
+			buffer.append(START_OF_LIST);
+			buffer.append(node);
+		}
+
+		return buffer.toString();
+	}
+	public Object getAdapter(Class key) {
+		return null;
+	}
+	
+	public int getOffset() {
+		if (node instanceof ASTNode)
+			return ((ASTNode)node).getOffset();
+
+		return 0;
+	}
+	
+	public int getLength() {
+		if (node instanceof ASTNode)
+			return ((ASTNode)node).getLength();
+
+		return 0;
+	}
+}
Index: src/org/eclipse/cdt/ui/tests/DOMAST/TreeParent.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/tests/DOMAST/TreeParent.java
diff -N src/org/eclipse/cdt/ui/tests/DOMAST/TreeParent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/ui/tests/DOMAST/TreeParent.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,79 @@
+/**********************************************************************
+ * 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.DOMAST;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+
+/**
+ * @author dsteffle
+ */
+public class TreeParent extends TreeObject {
+	private ArrayList children; // TODO might want to use a HashTable/HashMap or wrap one so finding the parent node is faster
+
+	public TreeParent(IASTNode node) {
+		super(node);
+		children = new ArrayList();
+	}
+	public void addChild(TreeObject child) {
+		children.add(child);
+		child.setParent(this);
+	}
+	public void removeChild(TreeObject child) {
+		children.remove(child);
+		child.setParent(null);
+	}
+	public TreeObject [] getChildren() {
+		return (TreeObject [])children.toArray(new TreeObject[children.size()]);
+	}
+	public boolean hasChildren() {
+		return children.size()>0;
+	}
+
+	private TreeParent findParentOfNode(TreeObject[] trees, IASTNode node) {
+		for (int i=0; i<trees.length; i++) {
+			
+			if (trees[i] != null && trees[i] instanceof TreeParent) {
+				if ( ((TreeParent)trees[i]).getNode() == node.getParent() ) {
+					return (TreeParent)trees[i];
+				} else if ( ((TreeParent)trees[i]).hasChildren() ){
+					TreeParent tree = findParentOfNode( ((TreeParent)trees[i]).getChildren(), node );
+					if (tree != null) return tree;
+				}
+			}
+		}
+		
+		return null; // nothing found
+	}
+	
+	public TreeParent findParentOfNode(IASTNode node) {
+		if (node == null || node.getParent() == null) return null;
+		
+		Iterator itr = children.iterator();
+		while (itr.hasNext()) {
+			Object o = itr.next();
+			if (o != null && o instanceof TreeParent) {
+				if ( ((TreeParent)o).getNode() == node.getParent() ) {
+					return (TreeParent)o;
+				} else if ( ((TreeParent)o).hasChildren() ){
+					TreeParent tree = findParentOfNode( ((TreeParent)o).getChildren(), node );
+					if (tree != null) return tree;
+				}
+			}
+		}
+		
+		return null; // nothing found
+	}
+	
+
+}

Back to the top