Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] [cdt-patch]Model Builder Fixes

The new CModelBuilder returns a map of the created elements and their infos.

-----Original Message-----
From: Amer, Hoda [mailto:hamer@xxxxxxxxxxxx] 
Sent: Monday, April 14, 2003 4:00 PM
To: 'cdt-patch@xxxxxxxxxxx'
Subject: [cdt-patch] [cdt-patch]


This patch updates the create methods of the CModelBuilder:
-changes visibility to protected.
-returns the created element.

Thanks,
Hoda


Index: model/org/eclipse/cdt/internal/core/model/TranslationUnit.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java,v
retrieving revision 1.4
diff -u -r1.4 TranslationUnit.java
--- model/org/eclipse/cdt/internal/core/model/TranslationUnit.java	27 Mar 2003 17:33:05 -0000	1.4
+++ model/org/eclipse/cdt/internal/core/model/TranslationUnit.java	15 Apr 2003 13:26:23 -0000
@@ -203,8 +203,8 @@
 		}
 		return sourceManipulationInfo;
 	}
-	protected void parse(InputStream in) {
-		getTranslationUnitInfo().parse(in);
+	protected Map parse(InputStream in) {
+		return (getTranslationUnitInfo().parse(in));
 	}
 
 	protected CElementInfo createElementInfo () {
@@ -300,12 +300,14 @@
 		// put the info now, because getting the contents requires it
 		CModelManager.getDefault().putInfo(this, info);
 		TranslationUnitInfo unitInfo = (TranslationUnitInfo) info;
-
+		
 		// generate structure
-		this.parse();
+		newElements = null;
+		newElements = this.parse();
 		
 		// this is temporary until the New Model Builder is implemented
-		getNewElements(newElements, this);		
+		if(newElements == null)
+			getNewElements(newElements, this);		
 		///////////////////////////////////////////////////////////////
 		
 		if (isWorkingCopy()) {
@@ -455,11 +457,12 @@
 	/**
 	 * Parse the buffer contents of this element.
 	 */
-	public void parse(){
+	public Map parse(){
 		try{
-			getTranslationUnitInfo().parse(this.getBuffer().getContents());
+			return (getTranslationUnitInfo().parse(this.getBuffer().getContents()));
 		} catch (CModelException e){
 			// error getting the buffer
+			return null;
 		}
 	}
 	
Index: model/org/eclipse/cdt/internal/core/model/TranslationUnitInfo.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnitInfo.java,v
retrieving revision 1.6
diff -u -r1.6 TranslationUnitInfo.java
--- model/org/eclipse/cdt/internal/core/model/TranslationUnitInfo.java	8 Apr 2003 21:30:53 -0000	1.6
+++ model/org/eclipse/cdt/internal/core/model/TranslationUnitInfo.java	15 Apr 2003 13:26:23 -0000
@@ -7,6 +7,7 @@
 
 import java.io.InputStream;
 import java.io.StringBufferInputStream;
+import java.util.Map;
 
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.model.ICElement;
@@ -38,31 +39,34 @@
 		return fChildren;		
 	}
 
-	protected void parse(InputStream in) {
+	protected Map parse(InputStream in) {
 		try {
 			removeChildren();
 			if (CCorePlugin.getDefault().useNewParser()) {
 				// new parser
 				CModelBuilder modelBuilder = new CModelBuilder((TranslationUnit)getElement());
-				modelBuilder.parse();
+				return (modelBuilder.parse());
 
 			} else {
 				// cdt 1.0 parser
 				ModelBuilder modelBuilder= new ModelBuilder((TranslationUnit)getElement());
 				CStructurizer.getCStructurizer().parse(modelBuilder, in);
-			}
+				return null;
+			}	
 		} catch (Exception e) {
 			System.out.println(e);
+			return null;
 		}
 	}
 
-	protected void parse(String buf) {
+	protected Map parse(String buf) {
 		// CHECKPOINT: Parsing a string using the StringBufferInputStream
 		// FIXME: quick fix for the IBinary which uses fake translationUnit
 		if (buf != null) {
 			StringBufferInputStream in = new StringBufferInputStream (buf);
-			parse (in);
+			return (parse (in));
 		}
+		return null;
 	}
 
 	/* Overide the SourceManipulation for the range.  */
Index: parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java,v
retrieving revision 1.10
diff -u -r1.10 CModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java	14 Apr 2003 17:25:33 -0000	1.10
+++ parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java	15 Apr 2003 13:26:23 -0000
@@ -12,8 +12,10 @@
  *     Rational Software - initial implementation
  ******************************************************************************/
 
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.cdt.core.model.CoreModel;
 import org.eclipse.cdt.core.model.ICElement;
@@ -49,12 +51,15 @@
 
 public class CModelBuilder {
 	
-	org.eclipse.cdt.internal.core.model.TranslationUnit translationUnit;
+	protected org.eclipse.cdt.internal.core.model.TranslationUnit translationUnit;
+	protected Map newElements;
+	
 	public CModelBuilder(org.eclipse.cdt.internal.core.model.TranslationUnit tu) {
 		this.translationUnit = tu ;
+		this.newElements = new HashMap();
 	}
 
-	public TranslationUnit parse() throws Exception {
+	public Map parse() throws Exception {
 		DOMBuilder domBuilder = new DOMBuilder();
 		String code = translationUnit.getBuffer().getContents();
 		Parser parser = new Parser(code, domBuilder, true);
@@ -68,7 +73,7 @@
 		long startTime = System.currentTimeMillis(); 
 		generateModelElements(domBuilder.getTranslationUnit());
 		System.out.println("CModel build: "+ ( System.currentTimeMillis() - startTime ) + "ms" );
-		return domBuilder.getTranslationUnit();
+		return this.newElements;
 	}
 	
 	protected void generateModelElements(TranslationUnit tu){
@@ -165,7 +170,7 @@
 
 	}
 		
-	private void createElement(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator){
+	protected void createElement(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator){
 		// typedef
 		if(simpleDeclaration.getDeclSpecifier().isTypedef()){
 			createTypeDef(parent, declarator, simpleDeclaration);
@@ -187,7 +192,7 @@
 		}				
 	}
 
-	private void createTemplateElement(Parent parent, TemplateDeclaration templateDeclaration, SimpleDeclaration simpleDeclaration, Declarator declarator){
+	protected void createTemplateElement(Parent parent, TemplateDeclaration templateDeclaration, SimpleDeclaration simpleDeclaration, Declarator declarator){
 		ParameterDeclarationClause pdc = declarator.getParms();
 		if (pdc != null){
 			// template of function or method
@@ -196,7 +201,7 @@
 			template.setTemplateParameterTypes(parameterTypes);				
 		}
 	}
-	private void createInclusion(Parent parent, Inclusion inclusion){
+	protected Include createInclusion(Parent parent, Inclusion inclusion){
 		// create element
 		Include element = new Include((CElement)parent, inclusion.getName());
 		// add to parent
@@ -204,9 +209,11 @@
 		// set position
 		element.setIdPos(inclusion.getNameOffset(), inclusion.getNameLength());
 		element.setPos(inclusion.getStartingOffset(), inclusion.getTotalLength());
+		this.newElements.put(element, element.getElementInfo());
+		return element;
 	}
 	
-	private void createMacro(Parent parent, Macro macro){
+	protected org.eclipse.cdt.internal.core.model.Macro createMacro(Parent parent, Macro macro){
 		// create element
 		org.eclipse.cdt.internal.core.model.Macro element = new  org.eclipse.cdt.internal.core.model.Macro(parent, macro.getName());
 		// add to parent
@@ -214,10 +221,11 @@
 		// set position
 		element.setIdPos(macro.getNameOffset(), macro.getNameLength());
 		element.setPos(macro.getStartingOffset(), macro.getTotalLength());
-		
+		this.newElements.put(element, element.getElementInfo());
+		return element;
 	}
 	
-	private IParent createNamespace(Parent parent, NamespaceDefinition nsDef){
+	protected Namespace createNamespace(Parent parent, NamespaceDefinition nsDef){
 		// create element
 		String nsName = (nsDef.getName() == null ) ? "" : nsDef.getName().toString();
 		Namespace element = new Namespace ((ICElement)parent, nsName );
@@ -232,41 +240,49 @@
 		element.setPos(nsDef.getStartingOffset(), nsDef.getTotalLength());
 		element.setTypeName(nsDef.getStartToken().getImage());
 		
-		return (IParent)element;
+		this.newElements.put(element, element.getElementInfo());		
+		return element;
 	}
 
-	private IParent createEnumeration(Parent parent, EnumerationSpecifier enumSpecifier){
+	protected Enumeration createEnumeration(Parent parent, EnumerationSpecifier enumSpecifier){
 		// create element
 		String enumName = (enumSpecifier.getName() == null ) ? "" : enumSpecifier.getName().toString();
-		Enumeration enum = new Enumeration ((ICElement)parent, enumName );
+		Enumeration element = new Enumeration ((ICElement)parent, enumName );
 		// add to parent
-		parent.addChild((ICElement)enum);
+		parent.addChild((ICElement)element);
 		List enumItems = enumSpecifier.getEnumeratorDefinitions();
 		Iterator i = enumItems.iterator();
 		while (i.hasNext()){
 			// create sub element
 			EnumeratorDefinition enumDef = (EnumeratorDefinition) i.next();
-			Enumerator element = new Enumerator (enum, enumDef.getName().toString());
-			// add to parent
-			enum.addChild(element);
-			// set enumerator position
-			element.setIdPos(enumDef.getName().getStartOffset(), enumDef.getName().length());
-			element.setPos(enumDef.getStartingOffset(), enumDef.getTotalLength());
+			createEnumerator(element, enumDef);
 		}
-		
 		// set enumeration position
 		if(enumSpecifier.getName() != null ){
-			enum.setIdPos(enumSpecifier.getName().getStartOffset(), enumSpecifier.getName().length());
+			element.setIdPos(enumSpecifier.getName().getStartOffset(), enumSpecifier.getName().length());
 		}else {
-			enum.setIdPos(enumSpecifier.getStartToken().getOffset(), enumSpecifier.getStartToken().getLength());				
+			element.setIdPos(enumSpecifier.getStartToken().getOffset(), enumSpecifier.getStartToken().getLength());				
 		}
-		enum.setPos(enumSpecifier.getStartingOffset(), enumSpecifier.getTotalLength());
-		enum.setTypeName(enumSpecifier.getStartToken().getImage());
+		element.setPos(enumSpecifier.getStartingOffset(), enumSpecifier.getTotalLength());
+		element.setTypeName(enumSpecifier.getStartToken().getImage());
 		 
-		return (IParent)enum;
+		this.newElements.put(element, element.getElementInfo());
+		return element;
 	}
 	
-	private IParent createClass(Parent parent, SimpleDeclaration simpleDeclaration, ClassSpecifier classSpecifier, boolean isTemplate){
+	protected Enumerator createEnumerator(Parent enum, EnumeratorDefinition enumDef){
+		Enumerator element = new Enumerator (enum, enumDef.getName().toString());
+		// add to parent
+		enum.addChild(element);
+		// set enumerator position
+		element.setIdPos(enumDef.getName().getStartOffset(), enumDef.getName().length());
+		element.setPos(enumDef.getStartingOffset(), enumDef.getTotalLength());
+
+		this.newElements.put(element, element.getElementInfo());
+		return element;		
+	}
+	
+	protected Structure createClass(Parent parent, SimpleDeclaration simpleDeclaration, ClassSpecifier classSpecifier, boolean isTemplate){
 		// create element
 		String className = (classSpecifier.getName() == null ) ? "" : classSpecifier.getName().toString();
 		int kind;
@@ -311,26 +327,29 @@
 		element.setTypeName( type );
 		element.setPos(classSpecifier.getStartingOffset(), classSpecifier.getTotalLength());
 		
+		this.newElements.put(element, element.getElementInfo());
 		return element;
 	}
 	
-	private void createTypeDef(Parent parent, Declarator declarator, SimpleDeclaration simpleDeclaration){
+	protected TypeDef createTypeDef(Parent parent, Declarator declarator, SimpleDeclaration simpleDeclaration){
 		// create the element
 		String declaratorName = declarator.getName().toString();		
-		TypeDef typedef = new TypeDef( parent, declaratorName );
+		TypeDef element = new TypeDef( parent, declaratorName );
 		String type = getType(simpleDeclaration, declarator);
-		typedef.setTypeName(type);
+		element.setTypeName(type);
 		
 		// add to parent
-		parent.addChild((CElement)typedef);
+		parent.addChild((CElement)element);
 
 		// set positions
-		typedef.setIdPos(declarator.getName().getStartOffset(), declarator.getName().length());	
-		typedef.setPos(simpleDeclaration.getStartingOffset(), simpleDeclaration.getTotalLength());	
+		element.setIdPos(declarator.getName().getStartOffset(), declarator.getName().length());	
+		element.setPos(simpleDeclaration.getStartingOffset(), simpleDeclaration.getTotalLength());
+
+		this.newElements.put(element, element.getElementInfo());
+		return element;	
 	}
 
-	private VariableDeclaration createVariableSpecification(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator){
-		
+	protected VariableDeclaration createVariableSpecification(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator){	
 		String declaratorName = declarator.getName().toString();
 		DeclSpecifier declSpecifier = simpleDeclaration.getDeclSpecifier();
 		
@@ -365,10 +384,11 @@
 		element.setIdPos( declarator.getName().getStartOffset(), declarator.getName().length() );
 		element.setPos(simpleDeclaration.getStartingOffset(), simpleDeclaration.getTotalLength());
 			
+		this.newElements.put(element, element.getElementInfo());
 		return element;
 	}
 
-	private FunctionDeclaration createFunctionSpecification(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator, ParameterDeclarationClause pdc, boolean isTemplate){
+	protected FunctionDeclaration createFunctionSpecification(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator, ParameterDeclarationClause pdc, boolean isTemplate){
 		String declaratorName = declarator.getName().toString();
 		DeclSpecifier declSpecifier = simpleDeclaration.getDeclSpecifier();
 		// getParameterTypes
@@ -442,10 +462,11 @@
 		// hook up the offsets
 		element.setIdPos( declarator.getName().getStartOffset(), declarator.getName().length() );		
 		element.setPos(simpleDeclaration.getStartingOffset(), simpleDeclaration.getTotalLength());	
+		this.newElements.put(element, element.getElementInfo());
 		return element;
 	}
 
-	private VariableDeclaration createPointerToFunction(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator, ParameterDeclarationClause pdc, boolean isTemplate){
+	protected VariableDeclaration createPointerToFunction(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator, ParameterDeclarationClause pdc, boolean isTemplate){
 		String declaratorName = declarator.getDeclarator().getName().toString();
 		DeclSpecifier declSpecifier = simpleDeclaration.getDeclSpecifier();
 		// getParameterTypes
@@ -489,8 +510,10 @@
 		// hook up the offsets
 		element.setIdPos( declarator.getDeclarator().getName().getStartOffset(), declarator.getDeclarator().getName().length() );
 		element.setPos(simpleDeclaration.getStartingOffset(), simpleDeclaration.getTotalLength());	
+		this.newElements.put(element, element.getElementInfo());
 		return element;
 	}	
+	
 	private String[] getTemplateParameters(ITemplateParameterListOwner templateDeclaration){
 		// add the parameters
 		List templateParameters = templateDeclaration.getTemplateParms().getDeclarations();

Back to the top