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:
parent
b9273831d1
commit
d67f2b25cf
10 changed files with 522 additions and 555 deletions
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue