Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/org.eclipse.cdt.core.tests/ChangeLog4
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java3
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java121
-rw-r--r--core/org.eclipse.cdt.core/parser/ChangeLog-parser8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java18
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java70
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/DerivableContainerSymbol.java21
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java7
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IExtensibleSymbol.java35
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java15
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IUsingDirectiveSymbol.java16
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/UsingDirectiveSymbol.java35
14 files changed, 319 insertions, 48 deletions
diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog
index 32ebd23b1b1..d5ccb82787f 100644
--- a/core/org.eclipse.cdt.core.tests/ChangeLog
+++ b/core/org.eclipse.cdt.core.tests/ChangeLog
@@ -1,3 +1,7 @@
+2004-01-16 Andrew Niefer
+ Modified CompleteParseASTTest.testUsingClauses
+ Added ParserSymbolTableTest.testIterator_1 & testIterator_2
+
2004-01-16 Hoda Amer
Modified CModelElementsTest to test for enumerator constant expression
Bug#47552
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
index 3ec47457d11..40b9095fa94 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2003,2004 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -194,6 +194,7 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
assertQualifiedName( fieldY.getFullyQualifiedName(), new String [] { "A", "B", "C", "y" } );
IASTUsingDirective directive = (IASTUsingDirective)declarations.next();
assertEquals( directive.getNamespaceDefinition(), namespaceB );
+ assertEquals( directive.getNamespaceName(), "A::B" );
IASTUsingDeclaration declaration = (IASTUsingDeclaration)declarations.next();
assertEquals( declaration.getUsingType(), variableX );
declaration = (IASTUsingDeclaration)declarations.next();
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java
index bacf4d6e29f..0a96afebb22 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java
@@ -37,6 +37,7 @@ import org.eclipse.cdt.internal.core.parser.pst.IDerivableContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IParameterizedSymbol;
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.IUsingDirectiveSymbol;
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.StandardSymbolExtension;
@@ -3434,5 +3435,125 @@ public class ParserSymbolTableTest extends TestCase {
assertEquals( foo1, look );
}
+
+ /**
+ * int global;
+ * class A {
+ * A();
+ * int var;
+ * void foo();
+ * };
+ *
+ */
+ public void testIterator_1() throws Exception{
+ newTable();
+
+ ISymbol global = table.newSymbol( "global", TypeInfo.t_int );
+ table.getCompilationUnit().addSymbol( global );
+
+ IDerivableContainerSymbol cls = table.newDerivableContainerSymbol( "A", TypeInfo.t_class );
+
+ table.getCompilationUnit().addSymbol( cls );
+
+ IParameterizedSymbol constructor = table.newParameterizedSymbol( "A", TypeInfo.t_constructor );
+ cls.addConstructor( constructor );
+
+ ISymbol var = table.newSymbol( "var", TypeInfo.t_int );
+ cls.addSymbol( var );
+
+ IParameterizedSymbol foo = table.newParameterizedSymbol( "foo", TypeInfo.t_function );
+ cls.addSymbol( foo );
+
+
+ Iterator iter = table.getCompilationUnit().getContentsIterator();
+ assertEquals( iter.next(), global );
+ IContainerSymbol symbol = (IContainerSymbol) iter.next();
+ assertEquals( symbol, cls );
+ assertFalse( iter.hasNext() );
+
+ iter = symbol.getContentsIterator();
+ assertEquals( iter.next(), constructor );
+ assertEquals( iter.next(), var );
+ assertEquals( iter.next(), foo );
+ assertFalse( iter.hasNext() );
+ }
+
+ /**
+ * int foo();
+ * namespace A{
+ * int bar();
+ * int bar( int );
+ * };
+ * class B{
+ * void func(){
+ * using namespace A;
+ * }
+ * };
+ * @throws Exception
+ */
+ public void testIterator_2() throws Exception{
+ newTable();
+
+ IParameterizedSymbol foo = table.newParameterizedSymbol( "foo", TypeInfo.t_function );
+ table.getCompilationUnit().addSymbol( foo );
+
+ IContainerSymbol nsA = table.newContainerSymbol( "A", TypeInfo.t_namespace );
+ table.getCompilationUnit().addSymbol( nsA );
+
+ IParameterizedSymbol bar1 = table.newParameterizedSymbol( "bar", TypeInfo.t_function );
+ nsA.addSymbol( bar1 );
+
+ IParameterizedSymbol bar2 = table.newParameterizedSymbol( "bar", TypeInfo.t_function );
+ bar2.addParameter( TypeInfo.t_int, 0, null, false );
+ nsA.addSymbol( bar2 );
+
+ IDerivableContainerSymbol B = table.newDerivableContainerSymbol("B", TypeInfo.t_class);
+ table.getCompilationUnit().addSymbol( B );
+
+ B.addCopyConstructor();
+
+ IParameterizedSymbol func = table.newParameterizedSymbol( "func", TypeInfo.t_function );
+ B.addSymbol( func );
+
+ IUsingDirectiveSymbol using = func.addUsingDirective( nsA );
+
+ Iterator iter = table.getCompilationUnit().getContentsIterator();
+
+ assertEquals( iter.next(), foo );
+
+ IContainerSymbol s1 = (IContainerSymbol) iter.next();
+ assertEquals( s1, nsA );
+
+ IContainerSymbol s2 = (IContainerSymbol) iter.next();
+ assertEquals( s2, B );
+
+ assertFalse( iter.hasNext() );
+
+ iter = s1.getContentsIterator();
+ assertEquals( iter.next(), bar1 );
+ assertEquals( iter.next(), bar2 );
+ assertFalse( iter.hasNext() );
+
+ iter = s2.getContentsIterator();
+
+ //Copy constructor!!
+ ISymbol copy = (ISymbol) iter.next();
+ assertTrue( copy instanceof IParameterizedSymbol );
+ assertEquals( copy.getName(), "B" );
+ assertEquals( copy.getType(), TypeInfo.t_constructor );
+
+ assertEquals( iter.next(), func );
+ assertFalse( iter.hasNext() );
+
+ iter = func.getContentsIterator();
+ //this pointer!!
+ ISymbol th = (ISymbol) iter.next();
+ assertEquals( th.getName(), "this" );
+ assertEquals( th.getTypeSymbol(), B );
+
+ assertEquals( iter.next(), using );
+
+ assertFalse( iter.hasNext() );
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser
index 4ab365d138e..e0679a87a4b 100644
--- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser
+++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser
@@ -1,3 +1,11 @@
+2004-01-16 Andrew Niefer
+ Created IExtensibleSymbol, which is a new base class for the symbol interfaces
+ Created IUsingDirectiveSymbol and UsingDirectiveSymbol
+ Modified ASTUsingDirective to use IUsingDirectiveSymbol
+ Modified CompleteParseASTFactory.createUsingDirective
+ Added IContainerSymbol.getContentsIterator()
+ Implemented getContentsIterator in ContainerSymbol
+
2004-01-16 John Camelon
Changed IASTNode.LookupException to IASTNode.LookupError.
Updated IASTElaboratedTypeSpecifier to remove redundant extends relationships.
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java
index 272b1eeb4fa..4b2d53d285d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2003, 2004 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
+import org.eclipse.cdt.internal.core.parser.pst.IUsingDirectiveSymbol;
/**
* @author jcamelon
@@ -24,7 +25,7 @@ import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
*/
public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUsingDirective
{
- private final IASTNamespaceDefinition namespace;
+ private final IUsingDirectiveSymbol using;
private Offsets offsets = new Offsets();
private final ASTReferenceStore referenceDelegate;
/**
@@ -32,10 +33,12 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs
* @param startingOffset
* @param endingOffset
*/
- public ASTUsingDirective(IContainerSymbol ownerSymbol, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int endingOffset, List references )
+ //public ASTUsingDirective(IContainerSymbol ownerSymbol, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int endingOffset, List references )
+ public ASTUsingDirective(IContainerSymbol ownerSymbol, IUsingDirectiveSymbol usingDirective, int startingOffset, int endingOffset, List references )
{
super( ownerSymbol );
- namespace = namespaceDefinition;
+ //namespace = namespaceDefinition;
+ using = usingDirective;
setStartingOffset(startingOffset);
setEndingOffset(endingOffset);
referenceDelegate = new ASTReferenceStore( references );
@@ -46,7 +49,8 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs
*/
public String getNamespaceName()
{
- String [] fqn = namespace.getFullyQualifiedName();
+ IASTNamespaceDefinition namespace = getNamespaceDefinition();
+ String [] fqn = namespace.getFullyQualifiedName();
StringBuffer buffer = new StringBuffer();
for( int i = 0; i < fqn.length; ++i )
{
@@ -118,7 +122,9 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs
*/
public IASTNamespaceDefinition getNamespaceDefinition()
{
- return namespace;
+ IContainerSymbol namespaceSymbol = using.getNamespace();
+
+ return (IASTNamespaceDefinition)namespaceSymbol.getASTExtension().getPrimaryDeclaration();
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
index 02e13ca50cf..00710131adc 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2003, 2004 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -76,6 +76,7 @@ import org.eclipse.cdt.internal.core.parser.pst.IParameterizedSymbol;
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.IUsingDirectiveSymbol;
import org.eclipse.cdt.internal.core.parser.pst.NamespaceSymbolExtension;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException;
@@ -326,13 +327,14 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ISymbol symbol = lookupQualifiedName(
scopeToSymbol( scope), duple, references, true );
+ IUsingDirectiveSymbol usingDirective = null;
try {
- ((ASTScope)scope).getContainerSymbol().addUsingDirective( (IContainerSymbol)symbol );
+ usingDirective = ((ASTScope)scope).getContainerSymbol().addUsingDirective( (IContainerSymbol)symbol );
} catch (ParserSymbolTableException pste) {
throw new ASTSemanticException();
}
- IASTUsingDirective astUD = new ASTUsingDirective( scopeToSymbol(scope), ((IASTNamespaceDefinition)symbol.getASTExtension().getPrimaryDeclaration()), startingOffset, endingOffset, references );
+ IASTUsingDirective astUD = new ASTUsingDirective( scopeToSymbol(scope), usingDirective, startingOffset, endingOffset, references );
return astUD;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java
index 5e3769c8e13..2d1d6c426da 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003 IBM Corporation and others.
+ * Copyright (c) 2003,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -139,6 +139,8 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
obj.setIsTemplateMember( isTemplateMember() || getType() == TypeInfo.t_template );
+ getContents().add( obj );
+
Command command = new AddSymbolCommand( obj, containing );
getSymbolTable().pushCommand( command );
}
@@ -163,7 +165,7 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol#addUsingDirective(org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol)
*/
- public void addUsingDirective( IContainerSymbol namespace ) throws ParserSymbolTableException{
+ public IUsingDirectiveSymbol addUsingDirective( IContainerSymbol namespace ) throws ParserSymbolTableException{
if( namespace.getType() != TypeInfo.t_namespace ){
throw new ParserSymbolTableException( ParserSymbolTableException.r_InvalidUsing );
}
@@ -180,10 +182,15 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
List usingDirectives = getUsingDirectives();
- usingDirectives.add( namespace );
+ IUsingDirectiveSymbol usingDirective = new UsingDirectiveSymbol( getSymbolTable(), namespace );
+ usingDirectives.add( usingDirective );
+
+ getContents().add( usingDirective );
- Command command = new AddUsingDirectiveCommand( this, namespace );
+ Command command = new AddUsingDirectiveCommand( this, usingDirective );
getSymbolTable().pushCommand( command );
+
+ return usingDirective;
}
/* (non-Javadoc)
@@ -749,6 +756,17 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
return instance;
}
+ protected List getContents(){
+ if(_contents == null ){
+ _contents = new LinkedList();
+ }
+ return _contents;
+ }
+
+ public Iterator getContentsIterator(){
+ return getContents().iterator();
+ }
+
static private class AddSymbolCommand extends Command{
AddSymbolCommand( ISymbol newDecl, IContainerSymbol context ){
_symbol = newDecl;
@@ -776,27 +794,46 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
} else if( obj instanceof BasicSymbol ){
_context.getContainedSymbols().remove( _symbol.getName() );
}
-// if( _removeThis && _symbol instanceof IParameterizedSymbol ){
-// ((IParameterizedSymbol)_symbol).getContainedSymbols().remove( ParserSymbolTable.THIS );
-// }
+
+ //this is an inefficient way of doing this, we can modify the interfaces if the undo starts
+ //being used often.
+ Iterator iter = _context.getContentsIterator();
+ while( iter.hasNext() ){
+ IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
+ if( ext == _symbol ){
+ iter.remove();
+ break;
+ }
+ }
}
- private ISymbol _symbol;
- private IContainerSymbol _context;
+ private final ISymbol _symbol;
+ private final IContainerSymbol _context;
}
static private class AddUsingDirectiveCommand extends Command{
- public AddUsingDirectiveCommand( IContainerSymbol container, IContainerSymbol namespace ){
+ public AddUsingDirectiveCommand( IContainerSymbol container, IUsingDirectiveSymbol directive ){
_decl = container;
- _namespace = namespace;
+ _directive = directive;
}
public void undoIt(){
- _decl.getUsingDirectives().remove( _namespace );
+ _decl.getUsingDirectives().remove( _directive );
+
+ //this is an inefficient way of doing this, we can modify the interfaces if the undo starts
+ //being used often.
+ Iterator iter = _decl.getContentsIterator();
+ while( iter.hasNext() ){
+ IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
+ if( ext == _directive ){
+ iter.remove();
+ break;
+ }
+ }
}
- private IContainerSymbol _decl;
- private IContainerSymbol _namespace;
+ private final IContainerSymbol _decl;
+ private final IUsingDirectiveSymbol _directive;
}
-
+
static protected class SymbolTableComparator implements Comparator{
public int compare( Object o1, Object o2 ){
int result = ((String) o1).compareToIgnoreCase( (String) o2 );
@@ -810,7 +847,8 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
return ( obj instanceof SymbolTableComparator );
}
}
-
+
+ private LinkedList _contents; //ordered list of all contents of this symbol
private LinkedList _usingDirectives; //collection of nominated namespaces
private Map _containedSymbols; //declarations contained by us.
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/DerivableContainerSymbol.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/DerivableContainerSymbol.java
index 003b9830f7c..f83f51777bc 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/DerivableContainerSymbol.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/DerivableContainerSymbol.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003 IBM Corporation and others.
+ * Copyright (c) 2003, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -14,9 +14,9 @@
package org.eclipse.cdt.internal.core.parser.pst;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.ListIterator;
import java.util.Map;
import org.eclipse.cdt.core.parser.ParserLanguage;
@@ -120,6 +120,8 @@ public class DerivableContainerSymbol extends ContainerSymbol implements IDeriva
constructor.setContainingSymbol( this );
addThis( constructor );
+ getContents().add( constructor );
+
Command command = new AddConstructorCommand( constructor, this );
getSymbolTable().pushCommand( command );
}
@@ -335,7 +337,7 @@ public class DerivableContainerSymbol extends ContainerSymbol implements IDeriva
}
public void undoIt(){
List constructors = _context.getConstructors();
- ListIterator iter = constructors.listIterator();
+ Iterator iter = constructors.listIterator();
int size = constructors.size();
IParameterizedSymbol item = null;
@@ -346,10 +348,19 @@ public class DerivableContainerSymbol extends ContainerSymbol implements IDeriva
break;
}
}
+
+ iter = _context.getContentsIterator();
+ while( iter.hasNext() ){
+ IExtensibleSymbol ext = (IExtensibleSymbol) iter.next();
+ if( ext == _constructor ){
+ iter.remove();
+ break;
+ }
+ }
}
- private IParameterizedSymbol _constructor;
- private IDerivableContainerSymbol _context;
+ private final IParameterizedSymbol _constructor;
+ private final IDerivableContainerSymbol _context;
}
public class ParentWrapper implements IDerivableContainerSymbol.IParentSymbol
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java
index 3aa91e4c59c..887950dcc1b 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003 IBM Corporation and others.
+ * Copyright (c) 2003, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@
*/
package org.eclipse.cdt.internal.core.parser.pst;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -32,7 +33,7 @@ public interface IContainerSymbol extends ISymbol {
public boolean hasUsingDirectives();
public List getUsingDirectives();
- public void addUsingDirective( IContainerSymbol namespace ) throws ParserSymbolTableException;
+ public IUsingDirectiveSymbol addUsingDirective( IContainerSymbol namespace ) throws ParserSymbolTableException;
public ISymbol addUsingDeclaration( String name ) throws ParserSymbolTableException;
public ISymbol addUsingDeclaration( String name, IContainerSymbol declContext ) throws ParserSymbolTableException;
@@ -55,4 +56,6 @@ public interface IContainerSymbol extends ISymbol {
public TemplateInstance instantiate( List arguments ) throws ParserSymbolTableException;
public boolean isVisible( ISymbol symbol, IContainerSymbol qualifyingSymbol );
+
+ public Iterator getContentsIterator();
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IExtensibleSymbol.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IExtensibleSymbol.java
new file mode 100644
index 00000000000..45f7b01d2bc
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IExtensibleSymbol.java
@@ -0,0 +1,35 @@
+/**********************************************************************
+ * Copyright (c) 2004 Rational Software Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ *
+ * Contributors:
+ * IBM Rational Software - Initial API and implementation
+***********************************************************************/
+
+package org.eclipse.cdt.internal.core.parser.pst;
+
+/**
+ * @author aniefer
+ */
+public interface IExtensibleSymbol {
+ /**
+ * get the instance of ParserSymbolTable with wich this symbol is associated
+ * @return ParserSymbolTable
+ */
+ public ParserSymbolTable getSymbolTable();
+
+ /**
+ * get the ISymbolASTExtension attached to this symbol
+ * @return ISymbolASTExtension
+ */
+ public ISymbolASTExtension getASTExtension();
+
+ /**
+ * attach an ISymbolASTExtension to this symbol
+ * @param obj
+ */
+ public void setASTExtension( ISymbolASTExtension obj );
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java
index d51184d6bca..a1fdc73cd71 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2003, 2004 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -17,15 +17,11 @@ import java.util.Map;
* @author jcamelon
*
*/
-public interface ISymbol extends Cloneable {
+public interface ISymbol extends Cloneable, IExtensibleSymbol {
- public ParserSymbolTable getSymbolTable();
-
public Object clone();
- public ISymbolASTExtension getASTExtension();
- public void setASTExtension( ISymbolASTExtension obj );
-
+ public void setName(String name);
public String getName();
public IContainerSymbol getContainingSymbol();
@@ -56,9 +52,4 @@ public interface ISymbol extends Cloneable {
public int getDepth();
public boolean getIsInvisible();
public void setIsInvisible( boolean invisible );
-
- /**
- * @param name
- */
- public void setName(String name);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IUsingDirectiveSymbol.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IUsingDirectiveSymbol.java
new file mode 100644
index 00000000000..93dc73c7bf4
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IUsingDirectiveSymbol.java
@@ -0,0 +1,16 @@
+/**********************************************************************
+ * Copyright (c) 2004 Rational Software Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ *
+ * Contributors:
+ * IBM Rational Software - Initial API and implementation
+***********************************************************************/
+package org.eclipse.cdt.internal.core.parser.pst;
+
+
+public interface IUsingDirectiveSymbol extends IExtensibleSymbol{
+ public IContainerSymbol getNamespace();
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
index b714b8af61d..e7bdcc40db8 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2003,2004 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -243,7 +243,7 @@ public class ParserSymbolTable {
//only consider the transitive using directives if we are an unqualified
//lookup, or we didn't find the name in decl
- if( (!data.qualified || !foundSomething || data.mode == LookupMode.PREFIX ) && temp.getUsingDirectives() != null ){
+ if( (!data.qualified || !foundSomething || data.mode == LookupMode.PREFIX ) && temp.hasUsingDirectives() ){
//name wasn't found, add transitive using directives for later consideration
transitiveDirectives.addAll( temp.getUsingDirectives() );
}
@@ -1091,7 +1091,7 @@ public class ParserSymbolTable {
Iterator iter = directives.iterator();
for( int i = size; i > 0; i-- ){
- temp = (IContainerSymbol) iter.next();
+ temp = ((IUsingDirectiveSymbol) iter.next()).getNamespace();
//namespaces are searched at most once
if( !data.visited.contains( temp ) ){
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/UsingDirectiveSymbol.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/UsingDirectiveSymbol.java
new file mode 100644
index 00000000000..6e2350835ba
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/UsingDirectiveSymbol.java
@@ -0,0 +1,35 @@
+/**********************************************************************
+ * Copyright (c) 2004 Rational Software Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ *
+ * Contributors:
+ * IBM Rational Software - Initial API and implementation
+***********************************************************************/
+package org.eclipse.cdt.internal.core.parser.pst;
+
+
+public class UsingDirectiveSymbol implements IUsingDirectiveSymbol{
+ private final ParserSymbolTable symbolTable;
+
+ public UsingDirectiveSymbol( ParserSymbolTable table, IContainerSymbol ns ){
+ namespace = ns;
+ symbolTable = table;
+ }
+
+ public IContainerSymbol getNamespace(){
+ return namespace;
+ }
+
+ public ISymbolASTExtension getASTExtension() { return extension; }
+ public void setASTExtension( ISymbolASTExtension ext ) { extension = ext; }
+
+ private ISymbolASTExtension extension;
+ private final IContainerSymbol namespace;
+
+ public ParserSymbolTable getSymbolTable() {
+ return symbolTable;
+ }
+} \ No newline at end of file

Back to the top