1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Patch for Hoda Amer.

This patch updates the CModelBuilder to use the AST instead of the DOM.
This commit is contained in:
John Camelon 2003-07-24 13:30:30 +00:00
parent b9273831d1
commit d67f2b25cf
10 changed files with 522 additions and 555 deletions

View file

@ -29,7 +29,6 @@ import org.eclipse.cdt.core.model.IFunction;
import org.eclipse.cdt.core.model.IFunctionDeclaration; import org.eclipse.cdt.core.model.IFunctionDeclaration;
import org.eclipse.cdt.core.model.IInclude; import org.eclipse.cdt.core.model.IInclude;
import org.eclipse.cdt.core.model.IMacro; import org.eclipse.cdt.core.model.IMacro;
import org.eclipse.cdt.core.model.IMember;
import org.eclipse.cdt.core.model.IMethod; import org.eclipse.cdt.core.model.IMethod;
import org.eclipse.cdt.core.model.IMethodDeclaration; import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.core.model.INamespace; import org.eclipse.cdt.core.model.INamespace;
@ -38,10 +37,11 @@ import org.eclipse.cdt.core.model.IStructure;
import org.eclipse.cdt.core.model.ITypeDef; import org.eclipse.cdt.core.model.ITypeDef;
import org.eclipse.cdt.core.model.IVariable; import org.eclipse.cdt.core.model.IVariable;
import org.eclipse.cdt.core.model.IVariableDeclaration; import org.eclipse.cdt.core.model.IVariableDeclaration;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.core.model.CElement; import org.eclipse.cdt.internal.core.model.CElement;
import org.eclipse.cdt.internal.core.model.StructureTemplate;
import org.eclipse.cdt.internal.core.model.FunctionTemplate; import org.eclipse.cdt.internal.core.model.FunctionTemplate;
import org.eclipse.cdt.internal.core.model.MethodTemplate; import org.eclipse.cdt.internal.core.model.MethodTemplate;
import org.eclipse.cdt.internal.core.model.StructureTemplate;
import org.eclipse.cdt.internal.core.model.TranslationUnit; import org.eclipse.cdt.internal.core.model.TranslationUnit;
import org.eclipse.cdt.internal.core.model.VariableTemplate; import org.eclipse.cdt.internal.core.model.VariableTemplate;
import org.eclipse.cdt.testplugin.CProjectHelper; import org.eclipse.cdt.testplugin.CProjectHelper;
@ -164,8 +164,8 @@ public class CModelElementsTests extends TestCase {
assertEquals(intX.getTypeName(), new String("int")); assertEquals(intX.getTypeName(), new String("int"));
checkLineNumbers((CElement)intX, 17, 17); checkLineNumbers((CElement)intX, 17, 17);
int xVisibility = intX.getVisibility(); ASTAccessVisibility xVisibility = intX.getVisibility();
if (xVisibility != IMember.V_PROTECTED) if (xVisibility != ASTAccessVisibility.PROTECTED)
fail("visibility should be protected!"); fail("visibility should be protected!");
// Hello ---> method: void setX(int X) // Hello ---> method: void setX(int X)
@ -231,8 +231,8 @@ public class CModelElementsTests extends TestCase {
assertEquals(bB.getElementName(), new String("b")); assertEquals(bB.getElementName(), new String("b"));
assertEquals(bB.getTypeName(), new String("B")); assertEquals(bB.getTypeName(), new String("B"));
checkLineNumbers((CElement)bB, 42, 42); checkLineNumbers((CElement)bB, 42, 42);
int bVisibility = bB.getVisibility(); ASTAccessVisibility bVisibility = bB.getVisibility();
if (bVisibility != IMember.V_PRIVATE) if (bVisibility != ASTAccessVisibility.PRIVATE)
fail("visibility should be private!"); fail("visibility should be private!");
// X ---> constructor chain: X // X ---> constructor chain: X
@ -296,20 +296,20 @@ public class CModelElementsTests extends TestCase {
// MyPackage ---> unsigned long vuLong // MyPackage ---> unsigned long vuLong
IVariable var2 = (IVariable) nsVars.get(1); IVariable var2 = (IVariable) nsVars.get(1);
assertEquals(var2.getElementName(), new String("vuLong")); assertEquals(var2.getElementName(), new String("vuLong"));
assertEquals(var2.getTypeName(), new String("unsigned long ")); assertEquals(var2.getTypeName(), new String("unsigned long int"));
checkLineNumbers((CElement)var2, 73, 73); checkLineNumbers((CElement)var2, 73, 73);
// MyPackage ---> unsigned short vuShort // MyPackage ---> unsigned short vuShort
IVariable var3 = (IVariable) nsVars.get(2); IVariable var3 = (IVariable) nsVars.get(2);
assertEquals(var3.getElementName(), new String("vuShort")); assertEquals(var3.getElementName(), new String("vuShort"));
assertEquals(var3.getTypeName(), new String("unsigned short ")); assertEquals(var3.getTypeName(), new String("unsigned short int"));
checkLineNumbers((CElement)var3, 75, 75); checkLineNumbers((CElement)var3, 75, 75);
// MyPackage ---> function pointer: orig_malloc_hook // MyPackage ---> function pointer: orig_malloc_hook
IVariable vDecl2 = (IVariable) nsVars.get(3); // IVariable vDecl2 = (IVariable) nsVars.get(3);
assertEquals(vDecl2.getElementName(), new String("orig_malloc_hook")); // assertEquals(vDecl2.getElementName(), new String("orig_malloc_hook"));
assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, size_t)")); // assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, size_t)"));
checkLineNumbers((CElement)vDecl2, 81, 81); // checkLineNumbers((CElement)vDecl2, 81, 81);
} }
private void checkVariableDeclarations(IParent namespace){ private void checkVariableDeclarations(IParent namespace){
@ -322,15 +322,22 @@ public class CModelElementsTests extends TestCase {
} }
private void checkFunctions(IParent namespace){ private void checkFunctions(IParent namespace){
// MyPackage ---> function: void foo()
ArrayList nsFunctionDeclarations = namespace.getChildrenOfType(ICElement.C_FUNCTION_DECLARATION); ArrayList nsFunctionDeclarations = namespace.getChildrenOfType(ICElement.C_FUNCTION_DECLARATION);
IFunctionDeclaration f1 = (IFunctionDeclaration) nsFunctionDeclarations.get(0);
// MyPackage ---> function pointer: orig_malloc_hook
IFunctionDeclaration pointerToFunction = (IFunctionDeclaration) nsFunctionDeclarations.get(0);
assertEquals(pointerToFunction.getElementName(), new String("orig_malloc_hook"));
// assertEquals(pointerToFunction.getReturnType(), new String ("void*(*)(const char*, int, size_t)"));
checkLineNumbers((CElement)pointerToFunction, 81, 81);
// MyPackage ---> function: void foo()
IFunctionDeclaration f1 = (IFunctionDeclaration) nsFunctionDeclarations.get(1);
assertEquals(f1.getElementName(), new String("foo")); assertEquals(f1.getElementName(), new String("foo"));
assertEquals(f1.getReturnType(), new String("void")); assertEquals(f1.getReturnType(), new String("void"));
checkLineNumbers((CElement)f1, 85, 85); checkLineNumbers((CElement)f1, 85, 85);
// MyPackage ---> function: char* foo(int&, char**) // MyPackage ---> function: char* foo(int&, char**)
IFunctionDeclaration f2 = (IFunctionDeclaration) nsFunctionDeclarations.get(1); IFunctionDeclaration f2 = (IFunctionDeclaration) nsFunctionDeclarations.get(2);
assertEquals(f2.getElementName(), new String("foo")); assertEquals(f2.getElementName(), new String("foo"));
assertEquals(f2.getReturnType(), new String("char*")); assertEquals(f2.getReturnType(), new String("char*"));
checkLineNumbers((CElement)f2, 87, 88); checkLineNumbers((CElement)f2, 87, 88);
@ -361,7 +368,7 @@ public class CModelElementsTests extends TestCase {
assertEquals(field1.getTypeName(), new String("int")); assertEquals(field1.getTypeName(), new String("int"));
checkLineNumbers((CElement)field1, 96, 96); checkLineNumbers((CElement)field1, 96, 96);
if(field1.getVisibility() != IMember.V_PUBLIC) if(field1.getVisibility() != ASTAccessVisibility.PUBLIC)
fail("field visibility should be public!"); fail("field visibility should be public!");
// struct no name // struct no name
@ -373,7 +380,7 @@ public class CModelElementsTests extends TestCase {
assertEquals(field2.getElementName(), new String("ss")); assertEquals(field2.getElementName(), new String("ss"));
assertEquals(field2.getTypeName(), new String("int")); assertEquals(field2.getTypeName(), new String("int"));
checkLineNumbers((CElement)field2, 102, 102); checkLineNumbers((CElement)field2, 102, 102);
if(field2.getVisibility() != IMember.V_PUBLIC) if(field2.getVisibility() != ASTAccessVisibility.PUBLIC)
fail("field visibility should be public!"); fail("field visibility should be public!");
// typedefs // typedefs
@ -397,7 +404,7 @@ public class CModelElementsTests extends TestCase {
assertEquals(field3.getElementName(), new String("U1")); assertEquals(field3.getElementName(), new String("U1"));
assertEquals(field3.getTypeName(), new String("int")); assertEquals(field3.getTypeName(), new String("int"));
checkLineNumbers((CElement)field3, 106, 106); checkLineNumbers((CElement)field3, 106, 106);
if(field3.getVisibility() != IMember.V_PUBLIC) if(field3.getVisibility() != ASTAccessVisibility.PUBLIC)
fail("field visibility should be public!"); fail("field visibility should be public!");
} }
@ -406,6 +413,7 @@ public class CModelElementsTests extends TestCase {
ArrayList functionTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION); ArrayList functionTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION);
FunctionTemplate ft = (FunctionTemplate)functionTemplates.get(0); FunctionTemplate ft = (FunctionTemplate)functionTemplates.get(0);
assertEquals(ft.getElementName(), new String("aTemplatedFunction")); assertEquals(ft.getElementName(), new String("aTemplatedFunction"));
String sig = ft.getTemplateSignature();
assertEquals(ft.getTemplateSignature(), new String("aTemplatedFunction<A, B>(B) : A")); assertEquals(ft.getTemplateSignature(), new String("aTemplatedFunction<A, B>(B) : A"));
checkLineNumbers((CElement)ft, 112, 113); checkLineNumbers((CElement)ft, 112, 113);
@ -418,7 +426,7 @@ public class CModelElementsTests extends TestCase {
assertEquals(mt.getElementName(), new String("aTemplatedMethod")); assertEquals(mt.getElementName(), new String("aTemplatedMethod"));
assertEquals(mt.getTemplateSignature(), new String("aTemplatedMethod<A, B>(B) : A")); assertEquals(mt.getTemplateSignature(), new String("aTemplatedMethod<A, B>(B) : A"));
checkLineNumbers((CElement)mt, 118, 119); checkLineNumbers((CElement)mt, 118, 119);
assertEquals(mt.getVisibility(), IMember.V_PUBLIC); assertEquals(mt.getVisibility(), ASTAccessVisibility.PUBLIC);
// template class // template class
ArrayList classTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_CLASS); ArrayList classTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_CLASS);

View file

@ -1,3 +1,6 @@
2003-07-23 Hoda Amer
Updated the CModelBuilder to use the AST instead of the DOM
2003-07-16 Alain Magloire 2003-07-16 Alain Magloire
Patch from Alex Chapiro Patch from Alex Chapiro

View file

@ -1,5 +1,7 @@
package org.eclipse.cdt.core.model; package org.eclipse.cdt.core.model;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
/* /*
* (c) Copyright IBM Corp. 2000, 2001. * (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved. * All Rights Reserved.
@ -12,15 +14,11 @@ package org.eclipse.cdt.core.model;
*/ */
public interface IMember extends IDeclaration { public interface IMember extends IDeclaration {
static final int V_PRIVATE = 0;
static final int V_PROTECTED = 1;
static final int V_PUBLIC = 2;
/** /**
* Returns the member's visibility * Returns the member's visibility
* V_PRIVATE = 0 V_PROTECTED = 1 V_PUBLIC = 2 * V_PRIVATE = 0 V_PROTECTED = 1 V_PUBLIC = 2
* @return int * @return int
*/ */
public int getVisibility(); public ASTAccessVisibility getVisibility();
} }

View file

@ -7,6 +7,7 @@ package org.eclipse.cdt.internal.core.model;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IField; import org.eclipse.cdt.core.model.IField;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
public class Field extends VariableDeclaration implements IField { public class Field extends VariableDeclaration implements IField {
@ -58,11 +59,11 @@ public class Field extends VariableDeclaration implements IField {
getFieldInfo().setStatic(isStatic); getFieldInfo().setStatic(isStatic);
} }
public int getVisibility() { public ASTAccessVisibility getVisibility() {
return getFieldInfo().getVisibility(); return getFieldInfo().getVisibility();
} }
public void setVisibility(int visibility) { public void setVisibility(ASTAccessVisibility visibility) {
getFieldInfo().setVisibility(visibility); getFieldInfo().setVisibility(visibility);
} }

View file

@ -11,7 +11,7 @@ package org.eclipse.cdt.internal.core.model;
* Rational Software - Initial API and implementation * Rational Software - Initial API and implementation
***********************************************************************/ ***********************************************************************/
import org.eclipse.cdt.core.model.IMember; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
public class FieldInfo extends SourceManipulationInfo { public class FieldInfo extends SourceManipulationInfo {
@ -21,12 +21,12 @@ public class FieldInfo extends SourceManipulationInfo {
boolean isVolatile = false; boolean isVolatile = false;
boolean isMutable = false; boolean isMutable = false;
boolean isStatic = false; boolean isStatic = false;
int visibility; ASTAccessVisibility visibility;
protected FieldInfo (CElement element) { protected FieldInfo (CElement element) {
super(element); super(element);
flags = 0; flags = 0;
visibility = IMember.V_PRIVATE; visibility = ASTAccessVisibility.PRIVATE;
} }
protected int getAccessControl() { protected int getAccessControl() {
@ -80,7 +80,7 @@ public class FieldInfo extends SourceManipulationInfo {
* Returns the visibility. * Returns the visibility.
* @return int * @return int
*/ */
public int getVisibility() { public ASTAccessVisibility getVisibility() {
return visibility; return visibility;
} }
@ -88,7 +88,7 @@ public class FieldInfo extends SourceManipulationInfo {
* Sets the visibility. * Sets the visibility.
* @param visibility The visibility to set * @param visibility The visibility to set
*/ */
public void setVisibility(int visibility) { public void setVisibility(ASTAccessVisibility visibility) {
this.visibility = visibility; this.visibility = visibility;
} }

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.model;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IMethodDeclaration; import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
public class MethodDeclaration extends FunctionDeclaration implements IMethodDeclaration{ public class MethodDeclaration extends FunctionDeclaration implements IMethodDeclaration{
@ -90,11 +91,11 @@ public class MethodDeclaration extends FunctionDeclaration implements IMethodDec
getMethodInfo().setConst(isConst); getMethodInfo().setConst(isConst);
} }
public int getVisibility(){ public ASTAccessVisibility getVisibility(){
return getMethodInfo().getVisibility(); return getMethodInfo().getVisibility();
} }
public void setVisibility(int visibility){ public void setVisibility(ASTAccessVisibility visibility){
getMethodInfo().setVisibility(visibility); getMethodInfo().setVisibility(visibility);
} }

View file

@ -11,7 +11,7 @@ package org.eclipse.cdt.internal.core.model;
* Rational Software - Initial API and implementation * Rational Software - Initial API and implementation
***********************************************************************/ ***********************************************************************/
import org.eclipse.cdt.core.model.IMember; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
public class MethodInfo extends FunctionInfo { public class MethodInfo extends FunctionInfo {
@ -20,11 +20,11 @@ public class MethodInfo extends FunctionInfo {
boolean isVirtual = false; boolean isVirtual = false;
boolean isFriend = false; boolean isFriend = false;
boolean isConst = false; boolean isConst = false;
int visibility; ASTAccessVisibility visibility = null;
MethodInfo(CElement element) { MethodInfo(CElement element) {
super(element); super(element);
visibility = IMember.V_PRIVATE; visibility = ASTAccessVisibility.PRIVATE;
} }
public boolean isAbstract(){ public boolean isAbstract(){
@ -71,7 +71,7 @@ public class MethodInfo extends FunctionInfo {
* Returns the visibility. * Returns the visibility.
* @return int * @return int
*/ */
public int getVisibility() { public ASTAccessVisibility getVisibility() {
return visibility; return visibility;
} }
@ -79,7 +79,7 @@ public class MethodInfo extends FunctionInfo {
* Sets the visibility. * Sets the visibility.
* @param visibility The visibility to set * @param visibility The visibility to set
*/ */
public void setVisibility(int visibility) { public void setVisibility(ASTAccessVisibility visibility) {
this.visibility = visibility; this.visibility = visibility;
} }

View file

@ -12,9 +12,9 @@ import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IDeclaration; import org.eclipse.cdt.core.model.IDeclaration;
import org.eclipse.cdt.core.model.IField; import org.eclipse.cdt.core.model.IField;
import org.eclipse.cdt.core.model.ILibraryReference; import org.eclipse.cdt.core.model.ILibraryReference;
import org.eclipse.cdt.core.model.IMember;
import org.eclipse.cdt.core.model.IMethodDeclaration; import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.core.model.ITemplate; import org.eclipse.cdt.core.model.ITemplate;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry; import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
import org.eclipse.cdt.ui.CElementImageDescriptor; import org.eclipse.cdt.ui.CElementImageDescriptor;
import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.CUIPlugin;
@ -224,13 +224,15 @@ public class CElementImageProvider {
return CPluginImages.DESC_OBJS_ENUMERATOR; return CPluginImages.DESC_OBJS_ENUMERATOR;
case ICElement.C_FIELD: case ICElement.C_FIELD:
{
IField field = (IField)celement; IField field = (IField)celement;
switch(field.getVisibility()){ ASTAccessVisibility visibility = field.getVisibility();
case IMember.V_PUBLIC:
if (visibility == ASTAccessVisibility.PUBLIC)
return CPluginImages.DESC_OBJS_PUBLIC_FIELD; return CPluginImages.DESC_OBJS_PUBLIC_FIELD;
case IMember.V_PROTECTED: if( visibility == ASTAccessVisibility.PROTECTED)
return CPluginImages.DESC_OBJS_PROTECTED_FIELD; return CPluginImages.DESC_OBJS_PROTECTED_FIELD;
case IMember.V_PRIVATE: if( visibility == ASTAccessVisibility.PRIVATE)
return CPluginImages.DESC_OBJS_PRIVATE_FIELD; return CPluginImages.DESC_OBJS_PRIVATE_FIELD;
} }
@ -241,13 +243,14 @@ public class CElementImageProvider {
case ICElement.C_METHOD: case ICElement.C_METHOD:
case ICElement.C_METHOD_DECLARATION: case ICElement.C_METHOD_DECLARATION:
case ICElement.C_TEMPLATE_METHOD: case ICElement.C_TEMPLATE_METHOD:
{
IMethodDeclaration md= (IMethodDeclaration)celement; IMethodDeclaration md= (IMethodDeclaration)celement;
switch(md.getVisibility()){ ASTAccessVisibility visibility =md.getVisibility();
case IMember.V_PUBLIC: if( visibility == ASTAccessVisibility.PUBLIC)
return CPluginImages.DESC_OBJS_PUBLIC_METHOD; return CPluginImages.DESC_OBJS_PUBLIC_METHOD;
case IMember.V_PROTECTED: if( visibility == ASTAccessVisibility.PROTECTED)
return CPluginImages.DESC_OBJS_PROTECTED_METHOD; return CPluginImages.DESC_OBJS_PROTECTED_METHOD;
case IMember.V_PRIVATE: if( visibility == ASTAccessVisibility.PRIVATE)
return CPluginImages.DESC_OBJS_PRIVATE_METHOD; return CPluginImages.DESC_OBJS_PRIVATE_METHOD;
} }

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.ui.viewsupport;
import org.eclipse.cdt.core.model.IDeclaration; import org.eclipse.cdt.core.model.IDeclaration;
import org.eclipse.cdt.core.model.IField; import org.eclipse.cdt.core.model.IField;
import org.eclipse.cdt.core.model.IMember; import org.eclipse.cdt.core.model.IMember;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerFilter;
@ -66,7 +67,7 @@ public class MemberFilter extends ViewerFilter{
} }
if (element instanceof IMember) { if (element instanceof IMember) {
IMember member= (IMember)element; IMember member= (IMember)element;
if (hasFilter(FILTER_NONPUBLIC) && (member.getVisibility() != IMember.V_PUBLIC)) { if (hasFilter(FILTER_NONPUBLIC) && (member.getVisibility() != ASTAccessVisibility.PUBLIC)) {
return false; return false;
} }