mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
bug 52695: IASTClassSpecifier.getDeclarations returns an empty iterator
This commit is contained in:
parent
d557516718
commit
0f74ca46c3
18 changed files with 2099 additions and 1574 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
2004-03-01 Andrew Niefer
|
||||||
|
created CompleteParseASTSymbolIteratorTest and added it to the ParserTestSuite
|
||||||
|
|
||||||
2004-02-26 Sean Evoy
|
2004-02-26 Sean Evoy
|
||||||
Work to test the ability to inherit a tool description via a tool
|
Work to test the ability to inherit a tool description via a tool
|
||||||
reference. Updated the testSubSubTarget to check inheritted tool
|
reference. Updated the testSubSubTarget to check inheritted tool
|
||||||
|
|
|
@ -0,0 +1,335 @@
|
||||||
|
/*
|
||||||
|
* Created on Feb 25, 2004
|
||||||
|
*
|
||||||
|
* To change the template for this generated file go to
|
||||||
|
* Window - Preferences - Java - Code Generation - Code and Comments
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.core.parser.tests;
|
||||||
|
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.parser.IParser;
|
||||||
|
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||||
|
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.ParserFactoryError;
|
||||||
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
|
import org.eclipse.cdt.core.parser.ScannerInfo;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTMethod;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.ParserException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author aniefer
|
||||||
|
*
|
||||||
|
* To change the template for this generated type comment go to
|
||||||
|
* Window - Preferences - Java - Code Generation - Code and Comments
|
||||||
|
*/
|
||||||
|
public class CompleteParseASTSymbolIteratorTest extends CompleteParseBaseTest {
|
||||||
|
public CompleteParseASTSymbolIteratorTest(String a)
|
||||||
|
{
|
||||||
|
super(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class CompilationUnitCallback extends NullSourceElementRequestor implements ISourceElementRequestor {
|
||||||
|
IASTCompilationUnit compilationUnit;
|
||||||
|
|
||||||
|
public void enterCompilationUnit(IASTCompilationUnit compUnit)
|
||||||
|
{
|
||||||
|
compilationUnit = compUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IASTCompilationUnit getCompilationUnit(){
|
||||||
|
return compilationUnit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected CompilationUnitCallback callback;
|
||||||
|
|
||||||
|
protected IASTScope parse(String code, boolean throwOnError, ParserLanguage language) throws ParserException, ParserFactoryError
|
||||||
|
{
|
||||||
|
callback = new CompilationUnitCallback();
|
||||||
|
IParser parser = ParserFactory.createParser(
|
||||||
|
ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(),
|
||||||
|
ParserMode.COMPLETE_PARSE, language, callback, new NullLogService() ), callback, ParserMode.COMPLETE_PARSE, language, null
|
||||||
|
);
|
||||||
|
if( ! parser.parse() && throwOnError ) throw new ParserException( "FAILURE");
|
||||||
|
|
||||||
|
return callback.getCompilationUnit();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Iterator getDeclarations(IASTScope scope)
|
||||||
|
{
|
||||||
|
//don't want to use this
|
||||||
|
assertTrue( false );
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testEmptyCompilationUnit() throws Exception
|
||||||
|
{
|
||||||
|
IASTScope compilationUnit = parse( "// no real code ");
|
||||||
|
|
||||||
|
assertNotNull( compilationUnit );
|
||||||
|
assertFalse( compilationUnit.getDeclarations().hasNext() );
|
||||||
|
try{
|
||||||
|
compilationUnit.getDeclarations().next();
|
||||||
|
assertTrue( false );
|
||||||
|
} catch( NoSuchElementException e ){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSimpleNamespace() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "namespace A { }").getDeclarations();
|
||||||
|
|
||||||
|
IASTNamespaceDefinition namespaceDefinition = (IASTNamespaceDefinition)declarations.next();
|
||||||
|
assertEquals( namespaceDefinition.getName(), "A" );
|
||||||
|
assertFalse( namespaceDefinition.getDeclarations().hasNext() );
|
||||||
|
|
||||||
|
try{
|
||||||
|
declarations.remove();
|
||||||
|
assertTrue( false );
|
||||||
|
} catch( UnsupportedOperationException e ){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMultipleNamespaceDefinitions() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "namespace A { } namespace A { }").getDeclarations();
|
||||||
|
|
||||||
|
IASTNamespaceDefinition namespaceDefinition = (IASTNamespaceDefinition)declarations.next();
|
||||||
|
assertEquals( namespaceDefinition.getName(), "A" );
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testNestedNamespaceDefinitions() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "namespace A { namespace B { } }").getDeclarations();
|
||||||
|
|
||||||
|
IASTNamespaceDefinition namespaceDefinition = (IASTNamespaceDefinition)declarations.next();
|
||||||
|
assertEquals( namespaceDefinition.getName(), "A" );
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
|
||||||
|
Iterator subDeclarations = namespaceDefinition.getDeclarations();
|
||||||
|
IASTNamespaceDefinition subDeclaration = (IASTNamespaceDefinition)subDeclarations.next();
|
||||||
|
assertEquals( subDeclaration.getName(), "B" );
|
||||||
|
assertFalse( subDeclarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testEmptyClassDeclaration() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "class A { };").getDeclarations();
|
||||||
|
|
||||||
|
IASTClassSpecifier classSpec = (IASTClassSpecifier)declarations.next();
|
||||||
|
assertEquals( classSpec.getName(), "A");
|
||||||
|
assertFalse( classSpec.getDeclarations().hasNext() );
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testNestedSubclass() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "namespace N { class A { }; } class B : protected virtual N::A { };").getDeclarations();
|
||||||
|
|
||||||
|
IASTNamespaceDefinition namespaceDefinition = (IASTNamespaceDefinition)declarations.next();
|
||||||
|
|
||||||
|
Iterator nsDecls = namespaceDefinition.getDeclarations();
|
||||||
|
IASTClassSpecifier classA = (IASTClassSpecifier)nsDecls.next();
|
||||||
|
assertFalse( nsDecls.hasNext() );
|
||||||
|
|
||||||
|
IASTClassSpecifier classB = (IASTClassSpecifier)declarations.next();
|
||||||
|
|
||||||
|
Iterator baseClauses = classB.getBaseClauses();
|
||||||
|
IASTBaseSpecifier baseClass = (IASTBaseSpecifier)baseClauses.next();
|
||||||
|
assertEquals( classA, baseClass.getParentClassSpecifier() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSimpleVariable() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "int x;").getDeclarations();
|
||||||
|
IASTVariable v = (IASTVariable)declarations.next();
|
||||||
|
assertEquals( v.getName(), "x");
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSimpleClassReferenceVariable() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "class A { } a; A x;").getDeclarations();
|
||||||
|
IASTClassSpecifier classA = (IASTClassSpecifier)declarations.next();
|
||||||
|
assertFalse( classA.getDeclarations().hasNext() );
|
||||||
|
|
||||||
|
IASTVariable a = (IASTVariable)declarations.next();
|
||||||
|
assertEquals( a.getName(), "a");
|
||||||
|
|
||||||
|
IASTVariable v = (IASTVariable)declarations.next();
|
||||||
|
assertEquals( v.getName(), "x");
|
||||||
|
assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA );
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMultipleDeclaratorsVariable() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "class A { }; A x, y, z;").getDeclarations();
|
||||||
|
|
||||||
|
IASTClassSpecifier classA = (IASTClassSpecifier)declarations.next();
|
||||||
|
|
||||||
|
IASTVariable v = (IASTVariable)declarations.next();
|
||||||
|
assertEquals( v.getName(), "x");
|
||||||
|
|
||||||
|
v = (IASTVariable)declarations.next();
|
||||||
|
assertEquals( v.getName(), "y");
|
||||||
|
|
||||||
|
v = (IASTVariable)declarations.next();
|
||||||
|
assertEquals( v.getName(), "z");
|
||||||
|
|
||||||
|
assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA );
|
||||||
|
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSimpleField() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "class A { double x; };").getDeclarations();
|
||||||
|
|
||||||
|
IASTClassSpecifier classA = (IASTClassSpecifier)declarations.next();
|
||||||
|
|
||||||
|
Iterator fields = classA.getDeclarations();
|
||||||
|
|
||||||
|
IASTField f = (IASTField)fields.next();
|
||||||
|
|
||||||
|
assertEquals( f.getName(), "x" );
|
||||||
|
|
||||||
|
assertFalse( fields.hasNext() );
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void testSimpleFunction() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "void foo( void );").getDeclarations();
|
||||||
|
IASTFunction function = (IASTFunction)declarations.next();
|
||||||
|
assertEquals( function.getName(), "foo" );
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSimpleMethod() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "class A { void foo(); };").getDeclarations();
|
||||||
|
IASTClassSpecifier classA = (IASTClassSpecifier)declarations.next();
|
||||||
|
|
||||||
|
IASTMethod method = (IASTMethod) classA.getDeclarations().next();
|
||||||
|
assertEquals( method.getName(), "foo" );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testLinkageSpec() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "extern \"C\" { int foo(); }").getDeclarations();
|
||||||
|
|
||||||
|
//7.5-4 A linkage specification does not establish a scope
|
||||||
|
IASTFunction f = (IASTFunction)declarations.next();
|
||||||
|
assertEquals( f.getName(),"foo");
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSimpleTypedef() throws Exception
|
||||||
|
{
|
||||||
|
Iterator iter = parse( "typedef int myInt;\n myInt var;").getDeclarations();
|
||||||
|
|
||||||
|
IASTTypedefDeclaration typedef = (IASTTypedefDeclaration)iter.next();
|
||||||
|
|
||||||
|
assertEquals( typedef.getName(), "myInt");
|
||||||
|
assertEquals( ((IASTSimpleTypeSpecifier)typedef.getAbstractDeclarator().getTypeSpecifier()).getType(), IASTSimpleTypeSpecifier.Type.INT );
|
||||||
|
|
||||||
|
IASTVariable v = (IASTVariable)iter.next();
|
||||||
|
assertEquals( v.getName(), "var");
|
||||||
|
|
||||||
|
assertFalse( iter.hasNext() );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testOverride() throws Exception
|
||||||
|
{
|
||||||
|
Iterator i = parse( "void foo();\n void foo( int );\n").getDeclarations();
|
||||||
|
IASTFunction f1 = (IASTFunction)i.next();
|
||||||
|
IASTFunction f2 = (IASTFunction)i.next();
|
||||||
|
assertFalse( i.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testEnumerations() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "namespace A { enum E { e1, e2, e3 }; E varE;}").getDeclarations();
|
||||||
|
|
||||||
|
IASTNamespaceDefinition namespaceA = (IASTNamespaceDefinition)declarations.next();
|
||||||
|
|
||||||
|
Iterator namespaceMembers = namespaceA.getDeclarations();
|
||||||
|
|
||||||
|
IASTEnumerationSpecifier enumE = (IASTEnumerationSpecifier)namespaceMembers.next();
|
||||||
|
|
||||||
|
assertEquals( enumE.getName(), "E");
|
||||||
|
assertQualifiedName( enumE.getFullyQualifiedName(), new String [] { "A", "E" } );
|
||||||
|
|
||||||
|
Iterator enumerators = enumE.getEnumerators();
|
||||||
|
IASTEnumerator enumerator_e1 = (IASTEnumerator)enumerators.next();
|
||||||
|
IASTEnumerator enumerator_e2 = (IASTEnumerator)enumerators.next();
|
||||||
|
IASTEnumerator enumerator_e3 = (IASTEnumerator)enumerators.next();
|
||||||
|
assertFalse( enumerators.hasNext() );
|
||||||
|
assertEquals( enumerator_e1.getName(), "e1");
|
||||||
|
assertEquals( enumerator_e2.getName(), "e2");
|
||||||
|
assertEquals( enumerator_e3.getName(), "e3");
|
||||||
|
|
||||||
|
IASTVariable varE = (IASTVariable)namespaceMembers.next();
|
||||||
|
assertEquals( ((IASTSimpleTypeSpecifier)varE.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), enumE );
|
||||||
|
|
||||||
|
assertFalse( namespaceMembers.hasNext() );
|
||||||
|
assertFalse( declarations.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMethodDefinitions() throws Exception
|
||||||
|
{
|
||||||
|
Iterator i = parse( " class A { void f(); }; void A::f(){ }" ).getDeclarations();
|
||||||
|
|
||||||
|
IASTClassSpecifier classA = (IASTClassSpecifier) i.next();
|
||||||
|
assertFalse( i.hasNext() );
|
||||||
|
|
||||||
|
i = classA.getDeclarations();
|
||||||
|
|
||||||
|
IASTMethod f = (IASTMethod)i.next();
|
||||||
|
|
||||||
|
assertFalse( i.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testConstructorsDestructors() throws Exception
|
||||||
|
{
|
||||||
|
Iterator i = parse( "class A { A(); ~A(); }; A::A(){} A::~A(){}" ).getDeclarations();
|
||||||
|
|
||||||
|
IASTClassSpecifier classA = (IASTClassSpecifier) i.next();
|
||||||
|
|
||||||
|
assertFalse( i.hasNext() );
|
||||||
|
|
||||||
|
i = classA.getDeclarations();
|
||||||
|
assertTrue( i.hasNext() );
|
||||||
|
|
||||||
|
IASTMethod constructor = (IASTMethod) i.next();
|
||||||
|
assertTrue( constructor.getName().equals( "A" ) );
|
||||||
|
IASTMethod destructor = (IASTMethod) i.next();
|
||||||
|
assertTrue( destructor.getName().equals( "~A" ) );
|
||||||
|
|
||||||
|
assertFalse( i.hasNext() );
|
||||||
|
}
|
||||||
|
}
|
|
@ -40,6 +40,7 @@ public class ParserTestSuite extends TestCase {
|
||||||
suite.addTestSuite( CompleteParseASTTest.class );
|
suite.addTestSuite( CompleteParseASTTest.class );
|
||||||
suite.addTestSuite( SelectionParseTest.class );
|
suite.addTestSuite( SelectionParseTest.class );
|
||||||
suite.addTestSuite( CompleteParseASTExpressionTest.class );
|
suite.addTestSuite( CompleteParseASTExpressionTest.class );
|
||||||
|
suite.addTestSuite( CompleteParseASTSymbolIteratorTest.class );
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2004-03-01 Andrew Niefer
|
||||||
|
bug 52695 : ast.complete.IASTClassSpecifier#getDeclarations returns an empty iterator
|
||||||
|
- take ASTNode.SymbolIterator and move it to org.eclipse.cdt.internal.core.parser.ast
|
||||||
|
- hook up ASTScope.getDeclarations to IContainerSymbol.getContentsIterator() using SymbolIterator
|
||||||
|
- create ExtensibleSymbol to implement IExtensibleSymbol and derive BasicSymbol, UsingDeclarationSymbol and UsingDirectiveSymbol from it.
|
||||||
|
|
||||||
|
|
||||||
2004-02-26 Andrew Niefer
|
2004-02-26 Andrew Niefer
|
||||||
mark strings that don't need to be externalized for translation
|
mark strings that don't need to be externalized for translation
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
* Created on Feb 25, 2004
|
||||||
|
*
|
||||||
|
* To change the template for this generated file go to
|
||||||
|
* Window - Preferences - Java - Code Generation - Code and Comments
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.internal.core.parser.ast;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.parser.pst.IExtensibleSymbol;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author aniefer
|
||||||
|
*
|
||||||
|
* To change the template for this generated type comment go to
|
||||||
|
* Window - Preferences - Java - Code Generation - Code and Comments
|
||||||
|
*/
|
||||||
|
public class SymbolIterator implements Iterator {
|
||||||
|
|
||||||
|
Iterator interalIterator;
|
||||||
|
|
||||||
|
IExtensibleSymbol next = null;
|
||||||
|
|
||||||
|
public SymbolIterator( Iterator iter ){
|
||||||
|
interalIterator = iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.util.Iterator#hasNext()
|
||||||
|
*/
|
||||||
|
public boolean hasNext(){
|
||||||
|
if( next != null )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
while( interalIterator.hasNext() ){
|
||||||
|
IExtensibleSymbol symbol = (IExtensibleSymbol) interalIterator.next();
|
||||||
|
if( symbol.getASTExtension() != null ){
|
||||||
|
next = symbol;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.util.Iterator#next()
|
||||||
|
*/
|
||||||
|
public Object next(){
|
||||||
|
IExtensibleSymbol temp = next;
|
||||||
|
if( next != null ){
|
||||||
|
next = null;
|
||||||
|
return temp.getASTExtension().getPrimaryDeclaration();
|
||||||
|
}
|
||||||
|
while( interalIterator.hasNext() ){
|
||||||
|
temp = (IExtensibleSymbol) interalIterator.next();
|
||||||
|
if( temp.getASTExtension() != null ){
|
||||||
|
return temp.getASTExtension().getPrimaryDeclaration();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.util.Iterator#remove()
|
||||||
|
*/
|
||||||
|
public void remove(){
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -268,8 +268,14 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier
|
||||||
|
|
||||||
public Iterator getDeclarations()
|
public Iterator getDeclarations()
|
||||||
{
|
{
|
||||||
|
//If a callback (ie StructuralParseCallback) populates the declarations list
|
||||||
|
//then return that iterator, otherwise use the ASTScope implementation which
|
||||||
|
//gets one from the symbol table.
|
||||||
|
if( !declarations.isEmpty() ){
|
||||||
return declarations.iterator();
|
return declarations.iterator();
|
||||||
}
|
}
|
||||||
|
return super.getDeclarations();
|
||||||
|
}
|
||||||
|
|
||||||
public void addDeclaration(IASTDeclaration declaration)
|
public void addDeclaration(IASTDeclaration declaration)
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,8 +73,15 @@ public class ASTCompilationUnit
|
||||||
|
|
||||||
public Iterator getDeclarations()
|
public Iterator getDeclarations()
|
||||||
{
|
{
|
||||||
|
//If a callback (ie StructuralParseCallback) populates the declarations list
|
||||||
|
//then return that iterator, otherwise use the ASTScope implementation which
|
||||||
|
//gets one from the symbol table.
|
||||||
|
if( !declarations.isEmpty() )
|
||||||
return declarations.iterator();
|
return declarations.iterator();
|
||||||
|
|
||||||
|
return super.getDeclarations();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addDeclaration(IASTDeclaration declaration)
|
public void addDeclaration(IASTDeclaration declaration)
|
||||||
{
|
{
|
||||||
declarations.add(declaration);
|
declarations.add(declaration);
|
||||||
|
|
|
@ -167,12 +167,19 @@ public class ASTNamespaceDefinition
|
||||||
|
|
||||||
public Iterator getDeclarations()
|
public Iterator getDeclarations()
|
||||||
{
|
{
|
||||||
|
//If a callback (ie StructuralParseCallback) populates the declarations list
|
||||||
|
//then return that iterator, otherwise use the ASTScope implementation which
|
||||||
|
//gets one from the symbol table.
|
||||||
|
if( !declarations.isEmpty() )
|
||||||
return declarations.iterator();
|
return declarations.iterator();
|
||||||
|
|
||||||
|
return super.getDeclarations();
|
||||||
}
|
}
|
||||||
public void addDeclaration(IASTDeclaration declaration)
|
public void addDeclaration(IASTDeclaration declaration)
|
||||||
{
|
{
|
||||||
declarations.add(declaration);
|
declarations.add(declaration);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine()
|
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine()
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,9 +17,10 @@ import java.util.ListIterator;
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.ast.SymbolIterator;
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
|
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.pst.IExtensibleSymbol;
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension;
|
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbolOwner;
|
import org.eclipse.cdt.internal.core.parser.pst.ISymbolOwner;
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
|
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException;
|
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException;
|
||||||
|
@ -55,7 +56,7 @@ public class ASTNode implements IASTNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
ISymbolOwner owner = (ISymbolOwner) this;
|
ISymbolOwner owner = (ISymbolOwner) this;
|
||||||
ISymbol symbol = owner.getSymbol();
|
IExtensibleSymbol symbol = owner.getSymbol();
|
||||||
if( symbol == null || !(symbol instanceof IContainerSymbol) ){
|
if( symbol == null || !(symbol instanceof IContainerSymbol) ){
|
||||||
throw new LookupError();
|
throw new LookupError();
|
||||||
}
|
}
|
||||||
|
@ -132,28 +133,4 @@ public class ASTNode implements IASTNode {
|
||||||
public Iterator getNodes() { return iterator; }
|
public Iterator getNodes() { return iterator; }
|
||||||
public int getResultsSize() { return resultsNumber; }
|
public int getResultsSize() { return resultsNumber; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SymbolIterator implements Iterator{
|
|
||||||
Iterator interalIterator;
|
|
||||||
|
|
||||||
public SymbolIterator( Iterator iter ){
|
|
||||||
interalIterator = iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasNext() {
|
|
||||||
return interalIterator.hasNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object next() {
|
|
||||||
ISymbol nextSymbol = (ISymbol) interalIterator.next();
|
|
||||||
|
|
||||||
ISymbolASTExtension extension = (nextSymbol != null ) ? nextSymbol.getASTExtension() : null;
|
|
||||||
|
|
||||||
return (extension != null ) ? extension.getPrimaryDeclaration() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void remove() {
|
|
||||||
interalIterator.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -14,6 +14,7 @@ import java.util.Iterator;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
|
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.ast.SymbolIterator;
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
|
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
||||||
|
|
||||||
|
@ -41,6 +42,10 @@ public abstract class ASTScope extends ASTSymbol implements IASTScope
|
||||||
*/
|
*/
|
||||||
public Iterator getDeclarations()
|
public Iterator getDeclarations()
|
||||||
{
|
{
|
||||||
|
IContainerSymbol symbol = getContainerSymbol();
|
||||||
|
if( symbol != null ){
|
||||||
|
return new SymbolIterator( symbol.getContentsIterator() );
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,48 +19,28 @@ import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class BasicSymbol implements Cloneable, ISymbol
|
public class BasicSymbol extends ExtensibleSymbol implements ISymbol
|
||||||
{
|
{
|
||||||
private final ParserSymbolTable _table;
|
|
||||||
public BasicSymbol( ParserSymbolTable table, String name ){
|
public BasicSymbol( ParserSymbolTable table, String name ){
|
||||||
super();
|
super( table );
|
||||||
this._table = table;
|
|
||||||
_name = name;
|
_name = name;
|
||||||
_typeInfo = new TypeInfo();
|
_typeInfo = new TypeInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BasicSymbol( ParserSymbolTable table, String name, ISymbolASTExtension obj ){
|
public BasicSymbol( ParserSymbolTable table, String name, ISymbolASTExtension obj ){
|
||||||
super();
|
super( table, obj );
|
||||||
this._table = table;
|
|
||||||
_name = name;
|
_name = name;
|
||||||
_object = obj;
|
|
||||||
_typeInfo = new TypeInfo();
|
_typeInfo = new TypeInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BasicSymbol( ParserSymbolTable table, String name, TypeInfo.eType typeInfo )
|
public BasicSymbol( ParserSymbolTable table, String name, TypeInfo.eType typeInfo )
|
||||||
{
|
{
|
||||||
super();
|
super( table );
|
||||||
this._table = table;
|
|
||||||
_name = name;
|
_name = name;
|
||||||
_typeInfo = new TypeInfo( typeInfo, 0, null );
|
_typeInfo = new TypeInfo( typeInfo, 0, null );
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParserSymbolTable getSymbolTable(){
|
|
||||||
return _table;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object clone(){
|
|
||||||
BasicSymbol copy = null;
|
|
||||||
try{
|
|
||||||
copy = (BasicSymbol)super.clone();
|
|
||||||
} catch ( CloneNotSupportedException e ){
|
|
||||||
//should not happen
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
copy._object = null;
|
|
||||||
return copy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ISymbol instantiate( ITemplateSymbol template, Map argMap ) throws ParserSymbolTableException{
|
public ISymbol instantiate( ITemplateSymbol template, Map argMap ) throws ParserSymbolTableException{
|
||||||
if( !isTemplateMember() && !getContainingSymbol().isTemplateMember() ){
|
if( !isTemplateMember() && !getContainingSymbol().isTemplateMember() ){
|
||||||
return null;
|
return null;
|
||||||
|
@ -75,12 +55,9 @@ public class BasicSymbol implements Cloneable, ISymbol
|
||||||
public String getName() { return _name; }
|
public String getName() { return _name; }
|
||||||
public void setName(String name) { _name = name; }
|
public void setName(String name) { _name = name; }
|
||||||
|
|
||||||
public ISymbolASTExtension getASTExtension() { return _object; }
|
|
||||||
public void setASTExtension( ISymbolASTExtension obj ) { _object = obj; }
|
|
||||||
|
|
||||||
public IContainerSymbol getContainingSymbol() { return _containingScope; }
|
|
||||||
public void setContainingSymbol( IContainerSymbol scope ){
|
public void setContainingSymbol( IContainerSymbol scope ){
|
||||||
_containingScope = scope;
|
super.setContainingSymbol( scope );
|
||||||
_depth = scope.getDepth() + 1;
|
_depth = scope.getDepth() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,9 +173,7 @@ public class BasicSymbol implements Cloneable, ISymbol
|
||||||
}
|
}
|
||||||
|
|
||||||
private String _name; //our name
|
private String _name; //our name
|
||||||
private ISymbolASTExtension _object; //the object associated with us
|
|
||||||
private TypeInfo _typeInfo; //our type info
|
private TypeInfo _typeInfo; //our type info
|
||||||
private IContainerSymbol _containingScope; //the scope that contains us
|
|
||||||
private int _depth; //how far down the scope stack we are
|
private int _depth; //how far down the scope stack we are
|
||||||
|
|
||||||
private boolean _isInvisible = false; //used by friend declarations (11.4-9)
|
private boolean _isInvisible = false; //used by friend declarations (11.4-9)
|
||||||
|
|
|
@ -22,6 +22,8 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
|
@ -895,9 +897,80 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator getContentsIterator(){
|
public Iterator getContentsIterator(){
|
||||||
return getContents().iterator();
|
//return getContents().iterator();
|
||||||
|
return new ContentsIterator( getContents().iterator() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected class ContentsIterator implements Iterator {
|
||||||
|
final Iterator internalIterator;
|
||||||
|
|
||||||
|
Set alreadyReturned = new HashSet();
|
||||||
|
|
||||||
|
public ContentsIterator( Iterator iter ){
|
||||||
|
internalIterator = iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
IExtensibleSymbol next = null;
|
||||||
|
public boolean hasNext() {
|
||||||
|
if( next != null ){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if( !internalIterator.hasNext() )
|
||||||
|
return false;
|
||||||
|
while( internalIterator.hasNext() ){
|
||||||
|
IExtensibleSymbol extensible = (IExtensibleSymbol) internalIterator.next();
|
||||||
|
if( !alreadyReturned.contains( extensible ) ){
|
||||||
|
if( extensible instanceof ISymbol ){
|
||||||
|
ISymbol symbol = (ISymbol) extensible;
|
||||||
|
if( symbol.isForwardDeclaration() && symbol.getTypeSymbol() != null &&
|
||||||
|
symbol.getTypeSymbol().getContainingSymbol() == ContainerSymbol.this )
|
||||||
|
{
|
||||||
|
alreadyReturned.add( symbol.getTypeSymbol() );
|
||||||
|
next = symbol.getTypeSymbol();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next = extensible;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object next() {
|
||||||
|
IExtensibleSymbol extensible = next;
|
||||||
|
if( next != null ){
|
||||||
|
next = null;
|
||||||
|
return extensible;
|
||||||
|
}
|
||||||
|
|
||||||
|
while( internalIterator.hasNext() ){
|
||||||
|
extensible = (IExtensibleSymbol) internalIterator.next();
|
||||||
|
if( !alreadyReturned.contains( extensible ) ){
|
||||||
|
if( extensible instanceof ISymbol ){
|
||||||
|
ISymbol symbol = (ISymbol) extensible;
|
||||||
|
if( symbol.isForwardDeclaration() && symbol.getTypeSymbol() != null &&
|
||||||
|
symbol.getTypeSymbol().getContainingSymbol() == ContainerSymbol.this )
|
||||||
|
{
|
||||||
|
alreadyReturned.add( symbol.getTypeSymbol() );
|
||||||
|
return symbol.getTypeSymbol();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return extensible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeSymbol(){
|
||||||
|
internalIterator.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
static private class AddSymbolCommand extends Command{
|
static private class AddSymbolCommand extends Command{
|
||||||
AddSymbolCommand( ISymbol newDecl, IContainerSymbol context ){
|
AddSymbolCommand( ISymbol newDecl, IContainerSymbol context ){
|
||||||
_symbol = newDecl;
|
_symbol = newDecl;
|
||||||
|
@ -928,11 +1001,11 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
|
||||||
|
|
||||||
//this is an inefficient way of doing this, we can modify the interfaces if the undo starts
|
//this is an inefficient way of doing this, we can modify the interfaces if the undo starts
|
||||||
//being used often.
|
//being used often.
|
||||||
Iterator iter = _context.getContentsIterator();
|
ContentsIterator iter = (ContentsIterator) _context.getContentsIterator();
|
||||||
while( iter.hasNext() ){
|
while( iter.hasNext() ){
|
||||||
IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
|
IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
|
||||||
if( ext == _symbol ){
|
if( ext == _symbol ){
|
||||||
iter.remove();
|
iter.removeSymbol();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -952,11 +1025,11 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
|
||||||
|
|
||||||
//this is an inefficient way of doing this, we can modify the interfaces if the undo starts
|
//this is an inefficient way of doing this, we can modify the interfaces if the undo starts
|
||||||
//being used often.
|
//being used often.
|
||||||
Iterator iter = _decl.getContentsIterator();
|
ContentsIterator iter = (ContentsIterator) _decl.getContentsIterator();
|
||||||
while( iter.hasNext() ){
|
while( iter.hasNext() ){
|
||||||
IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
|
IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
|
||||||
if( ext == _directive ){
|
if( ext == _directive ){
|
||||||
iter.remove();
|
iter.removeSymbol();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -394,11 +394,11 @@ public class DerivableContainerSymbol extends ContainerSymbol implements IDeriva
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
iter = _context.getContentsIterator();
|
ContentsIterator contents = (ContentsIterator) _context.getContentsIterator();
|
||||||
while( iter.hasNext() ){
|
while( iter.hasNext() ){
|
||||||
IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
|
IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
|
||||||
if( ext == _constructor ){
|
if( ext == _constructor ){
|
||||||
iter.remove();
|
contents.removeSymbol();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
* Created on Feb 25, 2004
|
||||||
|
*
|
||||||
|
* To change the template for this generated file go to
|
||||||
|
* Window - Preferences - Java - Code Generation - Code and Comments
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.internal.core.parser.pst;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author aniefer
|
||||||
|
*
|
||||||
|
* To change the template for this generated type comment go to
|
||||||
|
* Window - Preferences - Java - Code Generation - Code and Comments
|
||||||
|
*/
|
||||||
|
public class ExtensibleSymbol implements Cloneable, IExtensibleSymbol {
|
||||||
|
public ExtensibleSymbol( ParserSymbolTable table ){
|
||||||
|
_table = table;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExtensibleSymbol( ParserSymbolTable table, ISymbolASTExtension obj ){
|
||||||
|
_table = table;
|
||||||
|
_object = obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Object clone(){
|
||||||
|
ExtensibleSymbol copy = null;
|
||||||
|
try{
|
||||||
|
copy = (ExtensibleSymbol)super.clone();
|
||||||
|
} catch ( CloneNotSupportedException e ){
|
||||||
|
//should not happen
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.parser.pst.IExtensibleSymbol#getSymbolTable()
|
||||||
|
*/
|
||||||
|
public ParserSymbolTable getSymbolTable(){
|
||||||
|
return _table;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.parser.pst.IExtensibleSymbol#getASTExtension()
|
||||||
|
*/
|
||||||
|
public ISymbolASTExtension getASTExtension() {
|
||||||
|
return _object;
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.parser.pst.IExtensibleSymbol#setASTExtension(org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension)
|
||||||
|
*/
|
||||||
|
public void setASTExtension( ISymbolASTExtension obj ) {
|
||||||
|
_object = obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.parser.pst.IExtensibleSymbol#getContainingSymbol()
|
||||||
|
*/
|
||||||
|
public IContainerSymbol getContainingSymbol() {
|
||||||
|
return _containingScope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContainingSymbol( IContainerSymbol scope ){
|
||||||
|
_containingScope = scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final ParserSymbolTable _table;
|
||||||
|
private ISymbolASTExtension _object; //the object associated with us
|
||||||
|
private IContainerSymbol _containingScope; //the scope that contains us
|
||||||
|
}
|
|
@ -32,4 +32,8 @@ public interface IExtensibleSymbol {
|
||||||
* @param obj
|
* @param obj
|
||||||
*/
|
*/
|
||||||
public void setASTExtension( ISymbolASTExtension obj );
|
public void setASTExtension( ISymbolASTExtension obj );
|
||||||
|
|
||||||
|
public IContainerSymbol getContainingSymbol();
|
||||||
|
|
||||||
|
public void setContainingSymbol( IContainerSymbol scope );
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,11 +50,6 @@ public class TemplateSymbol extends ParameterizedSymbol implements ITemplateSymb
|
||||||
Iterator iter = getContentsIterator();
|
Iterator iter = getContentsIterator();
|
||||||
if( iter.hasNext() ){
|
if( iter.hasNext() ){
|
||||||
IContainerSymbol contained = (IContainerSymbol) iter.next();
|
IContainerSymbol contained = (IContainerSymbol) iter.next();
|
||||||
if( contained.isForwardDeclaration() && contained.getTypeSymbol() != null ){
|
|
||||||
ISymbol symbol = contained.getTypeSymbol();
|
|
||||||
if( symbol.getContainingSymbol() == this )
|
|
||||||
return (IContainerSymbol) symbol;
|
|
||||||
}
|
|
||||||
return contained;
|
return contained;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -15,25 +15,17 @@ import java.util.List;
|
||||||
* To change the template for this generated type comment go to
|
* To change the template for this generated type comment go to
|
||||||
* Window - Preferences - Java - Code Generation - Code and Comments
|
* Window - Preferences - Java - Code Generation - Code and Comments
|
||||||
*/
|
*/
|
||||||
public class UsingDeclarationSymbol implements IUsingDeclarationSymbol {
|
public class UsingDeclarationSymbol extends ExtensibleSymbol implements IUsingDeclarationSymbol {
|
||||||
|
|
||||||
public UsingDeclarationSymbol( ParserSymbolTable table, List referenced, List declared ){
|
public UsingDeclarationSymbol( ParserSymbolTable table, List referenced, List declared ){
|
||||||
|
super( table );
|
||||||
referencedSymbol = referenced;
|
referencedSymbol = referenced;
|
||||||
declaredSymbol = declared;
|
declaredSymbol = declared;
|
||||||
symbolTable = table;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List getReferencedSymbols() { return referencedSymbol; }
|
public List getReferencedSymbols() { return referencedSymbol; }
|
||||||
public List getDeclaredSymbols() { return declaredSymbol; }
|
public List getDeclaredSymbols() { return declaredSymbol; }
|
||||||
|
|
||||||
public ISymbolASTExtension getASTExtension() { return extension; }
|
|
||||||
public void setASTExtension( ISymbolASTExtension ext ) { extension = ext; }
|
|
||||||
|
|
||||||
public ParserSymbolTable getSymbolTable() { return symbolTable; }
|
|
||||||
|
|
||||||
private ISymbolASTExtension extension;
|
|
||||||
private final List referencedSymbol;
|
private final List referencedSymbol;
|
||||||
private final List declaredSymbol;
|
private final List declaredSymbol;
|
||||||
private final ParserSymbolTable symbolTable;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,25 +11,16 @@
|
||||||
package org.eclipse.cdt.internal.core.parser.pst;
|
package org.eclipse.cdt.internal.core.parser.pst;
|
||||||
|
|
||||||
|
|
||||||
public class UsingDirectiveSymbol implements IUsingDirectiveSymbol{
|
public class UsingDirectiveSymbol extends ExtensibleSymbol implements IUsingDirectiveSymbol{
|
||||||
private final ParserSymbolTable symbolTable;
|
|
||||||
|
|
||||||
public UsingDirectiveSymbol( ParserSymbolTable table, IContainerSymbol ns ){
|
public UsingDirectiveSymbol( ParserSymbolTable table, IContainerSymbol ns ){
|
||||||
|
super( table );
|
||||||
namespace = ns;
|
namespace = ns;
|
||||||
symbolTable = table;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IContainerSymbol getNamespace(){
|
public IContainerSymbol getNamespace(){
|
||||||
return namespace;
|
return namespace;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISymbolASTExtension getASTExtension() { return extension; }
|
|
||||||
public void setASTExtension( ISymbolASTExtension ext ) { extension = ext; }
|
|
||||||
|
|
||||||
private ISymbolASTExtension extension;
|
|
||||||
private final IContainerSymbol namespace;
|
private final IContainerSymbol namespace;
|
||||||
|
|
||||||
public ParserSymbolTable getSymbolTable() {
|
|
||||||
return symbolTable;
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue