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

View file

@ -1,5 +1,7 @@
package org.eclipse.cdt.core.model;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
@ -12,15 +14,11 @@ package org.eclipse.cdt.core.model;
*/
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
* V_PRIVATE = 0 V_PROTECTED = 1 V_PUBLIC = 2
* @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.IField;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
public class Field extends VariableDeclaration implements IField {
@ -58,11 +59,11 @@ public class Field extends VariableDeclaration implements IField {
getFieldInfo().setStatic(isStatic);
}
public int getVisibility() {
public ASTAccessVisibility getVisibility() {
return getFieldInfo().getVisibility();
}
public void setVisibility(int visibility) {
public void setVisibility(ASTAccessVisibility visibility) {
getFieldInfo().setVisibility(visibility);
}

View file

@ -11,7 +11,7 @@ package org.eclipse.cdt.internal.core.model;
* 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 {
@ -21,12 +21,12 @@ public class FieldInfo extends SourceManipulationInfo {
boolean isVolatile = false;
boolean isMutable = false;
boolean isStatic = false;
int visibility;
ASTAccessVisibility visibility;
protected FieldInfo (CElement element) {
super(element);
flags = 0;
visibility = IMember.V_PRIVATE;
visibility = ASTAccessVisibility.PRIVATE;
}
protected int getAccessControl() {
@ -80,7 +80,7 @@ public class FieldInfo extends SourceManipulationInfo {
* Returns the visibility.
* @return int
*/
public int getVisibility() {
public ASTAccessVisibility getVisibility() {
return visibility;
}
@ -88,7 +88,7 @@ public class FieldInfo extends SourceManipulationInfo {
* Sets the visibility.
* @param visibility The visibility to set
*/
public void setVisibility(int visibility) {
public void setVisibility(ASTAccessVisibility 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.IMethodDeclaration;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
public class MethodDeclaration extends FunctionDeclaration implements IMethodDeclaration{
@ -90,11 +91,11 @@ public class MethodDeclaration extends FunctionDeclaration implements IMethodDec
getMethodInfo().setConst(isConst);
}
public int getVisibility(){
public ASTAccessVisibility getVisibility(){
return getMethodInfo().getVisibility();
}
public void setVisibility(int visibility){
public void setVisibility(ASTAccessVisibility visibility){
getMethodInfo().setVisibility(visibility);
}

View file

@ -11,7 +11,7 @@ package org.eclipse.cdt.internal.core.model;
* 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 {
@ -20,11 +20,11 @@ public class MethodInfo extends FunctionInfo {
boolean isVirtual = false;
boolean isFriend = false;
boolean isConst = false;
int visibility;
ASTAccessVisibility visibility = null;
MethodInfo(CElement element) {
super(element);
visibility = IMember.V_PRIVATE;
visibility = ASTAccessVisibility.PRIVATE;
}
public boolean isAbstract(){
@ -71,7 +71,7 @@ public class MethodInfo extends FunctionInfo {
* Returns the visibility.
* @return int
*/
public int getVisibility() {
public ASTAccessVisibility getVisibility() {
return visibility;
}
@ -79,7 +79,7 @@ public class MethodInfo extends FunctionInfo {
* Sets the visibility.
* @param visibility The visibility to set
*/
public void setVisibility(int visibility) {
public void setVisibility(ASTAccessVisibility 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.IField;
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.ITemplate;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
import org.eclipse.cdt.ui.CElementImageDescriptor;
import org.eclipse.cdt.ui.CUIPlugin;
@ -224,13 +224,15 @@ public class CElementImageProvider {
return CPluginImages.DESC_OBJS_ENUMERATOR;
case ICElement.C_FIELD:
{
IField field = (IField)celement;
switch(field.getVisibility()){
case IMember.V_PUBLIC:
ASTAccessVisibility visibility = field.getVisibility();
if (visibility == ASTAccessVisibility.PUBLIC)
return CPluginImages.DESC_OBJS_PUBLIC_FIELD;
case IMember.V_PROTECTED:
if( visibility == ASTAccessVisibility.PROTECTED)
return CPluginImages.DESC_OBJS_PROTECTED_FIELD;
case IMember.V_PRIVATE:
if( visibility == ASTAccessVisibility.PRIVATE)
return CPluginImages.DESC_OBJS_PRIVATE_FIELD;
}
@ -241,13 +243,14 @@ public class CElementImageProvider {
case ICElement.C_METHOD:
case ICElement.C_METHOD_DECLARATION:
case ICElement.C_TEMPLATE_METHOD:
{
IMethodDeclaration md= (IMethodDeclaration)celement;
switch(md.getVisibility()){
case IMember.V_PUBLIC:
ASTAccessVisibility visibility =md.getVisibility();
if( visibility == ASTAccessVisibility.PUBLIC)
return CPluginImages.DESC_OBJS_PUBLIC_METHOD;
case IMember.V_PROTECTED:
if( visibility == ASTAccessVisibility.PROTECTED)
return CPluginImages.DESC_OBJS_PROTECTED_METHOD;
case IMember.V_PRIVATE:
if( visibility == ASTAccessVisibility.PRIVATE)
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.IField;
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.ViewerFilter;
@ -66,7 +67,7 @@ public class MemberFilter extends ViewerFilter{
}
if (element instanceof IMember) {
IMember member= (IMember)element;
if (hasFilter(FILTER_NONPUBLIC) && (member.getVisibility() != IMember.V_PUBLIC)) {
if (hasFilter(FILTER_NONPUBLIC) && (member.getVisibility() != ASTAccessVisibility.PUBLIC)) {
return false;
}