[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Applied [HEAD] ArrayModifiers & Exception Specifications
|
CORE
Added X-Reference support for ArrayModifiers and Exception
Specifications.
Fixed Bug 41551 - HandleInclusion always throws ScannerException
on local includes.
TESTS
Added CompleteParseASTTest::testArrayModExpression(),
testPointerVariable() &
testExceptionSpecification().
JohnC
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.60
diff -u -r1.60 ChangeLog
--- ChangeLog 13 Aug 2003 23:54:09 -0000 1.60
+++ ChangeLog 14 Aug 2003 15:32:28 -0000
@@ -1,3 +1,7 @@
+2003-08-14 John Camelon
+ Added CompleteParseASTTest::testArrayModExpression(), testPointerVariable() &
+ testExceptionSpecification().
+
2003-08-13 John Camelon
Added testBug41520() to FullParseFailedTests.java.
Added testConstructorChain() to CompleteParseASTTest.java
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java,v
retrieving revision 1.13
diff -u -r1.13 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 13 Aug 2003 23:54:09 -0000 1.13
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 14 Aug 2003 15:32:29 -0000
@@ -887,6 +887,9 @@
assertEquals( fqnClass[i], fqnElab[i]);
assertEquals( callback.getReferences().size(), 1 );
assertEquals( callback.getForewardDecls().size(), 1 );
+ IASTClassReference ref = (IASTClassReference)callback.getReferences().get(0);
+ assertTrue( ref.getReferencedElement() instanceof IASTElaboratedTypeSpecifier );
+ assertEquals( ref.getReferencedElement(), elab );
}
@@ -947,4 +950,35 @@
assertEquals( reference2.getReferencedElement(), variableX );
}
+ public void testArrayModExpression() throws Exception
+ {
+ Iterator i = parse( "const int x = 5; int y [ x ]; ").getDeclarations();
+ IASTVariable varX = (IASTVariable)i.next();
+ IASTVariable varY = (IASTVariable)i.next();
+ assertFalse( i.hasNext() );
+ assertEquals( callback.getReferences().size(), 1 );
+ }
+
+
+ public void testPointerVariable() throws Exception
+ {
+ Iterator i = parse( "class A { }; A * anA;").getDeclarations();
+ IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
+ IASTVariable varAnA = (IASTVariable)i.next();
+ assertFalse( i.hasNext() );
+ assertEquals( callback.getReferences().size(), 1 );
+ IASTClassReference ref = (IASTClassReference)callback.getReferences().get(0);
+ assertEquals( ref.getReferencedElement(), classA );
+ }
+
+ public void testExceptionSpecification() throws Exception
+ {
+ Iterator i = parse( "class A { }; void foo( void ) throw ( A );").getDeclarations();
+ IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
+ IASTFunction function = (IASTFunction)i.next();
+ assertFalse( i.hasNext() );
+ assertEquals( callback.getReferences().size(), 1 );
+ IASTClassReference ref = (IASTClassReference)callback.getReferences().get(0);
+ assertEquals( ref.getReferencedElement(), classA );
+ }
}
Index: model/org/eclipse/cdt/internal/core/model/CModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java,v
retrieving revision 1.11
diff -u -r1.11 CModelBuilder.java
--- model/org/eclipse/cdt/internal/core/model/CModelBuilder.java 12 Aug 2003 20:20:04 -0000 1.11
+++ model/org/eclipse/cdt/internal/core/model/CModelBuilder.java 14 Aug 2003 15:31:59 -0000
@@ -53,7 +53,7 @@
import org.eclipse.cdt.core.parser.ast.IASTVariable;
import org.eclipse.cdt.internal.core.parser.ParserException;
import org.eclipse.cdt.internal.core.parser.ScannerInfo;
-import org.eclipse.cdt.internal.core.parser.ast.quick.ASTArrayModifier;
+import org.eclipse.cdt.internal.core.parser.ast.ASTArrayModifier;
import org.eclipse.core.resources.IProject;
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.100
diff -u -r1.100 ChangeLog
--- parser/ChangeLog 13 Aug 2003 23:54:05 -0000 1.100
+++ parser/ChangeLog 14 Aug 2003 15:32:00 -0000
@@ -1,3 +1,7 @@
+2003-08-14 John Camelon
+ Added X-Reference support for ArrayModifiers and Exception Specifications.
+ Fixed Bug 41551 - HandleInclusion always throws ScannerException on local includes.
+
2003-08-13 John Camelon
Added constructor expression support for variables.
Added constructor chain x-reference support for methods.
Index: parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java,v
retrieving revision 1.5
diff -u -r1.5 IASTAbstractDeclaration.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java 12 Aug 2003 18:19:38 -0000 1.5
+++ parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java 14 Aug 2003 15:32:00 -0000
@@ -12,11 +12,13 @@
import java.util.Iterator;
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
+
/**
* @author jcamelon
*
*/
-public interface IASTAbstractDeclaration extends IASTTypeSpecifierOwner
+public interface IASTAbstractDeclaration extends IASTTypeSpecifierOwner, ISourceElementCallbackDelegate
{
public boolean isConst();
public boolean isVolatile();
Index: parser/org/eclipse/cdt/core/parser/ast/IASTArrayModifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTArrayModifier.java,v
retrieving revision 1.1
diff -u -r1.1 IASTArrayModifier.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTArrayModifier.java 12 Aug 2003 18:19:38 -0000 1.1
+++ parser/org/eclipse/cdt/core/parser/ast/IASTArrayModifier.java 14 Aug 2003 15:32:00 -0000
@@ -10,12 +10,14 @@
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
+
/**
* @author jcamelon
*
*/
-public interface IASTArrayModifier
+public interface IASTArrayModifier extends ISourceElementCallbackDelegate
{
public IASTExpression getExpression();
}
Index: parser/org/eclipse/cdt/core/parser/ast/IASTExceptionSpecification.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExceptionSpecification.java,v
retrieving revision 1.2
diff -u -r1.2 IASTExceptionSpecification.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTExceptionSpecification.java 9 Jul 2003 00:47:42 -0000 1.2
+++ parser/org/eclipse/cdt/core/parser/ast/IASTExceptionSpecification.java 14 Aug 2003 15:32:01 -0000
@@ -12,11 +12,13 @@
import java.util.Iterator;
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
+
/**
* @author jcamelon
*
*/
-public interface IASTExceptionSpecification
+public interface IASTExceptionSpecification extends ISourceElementCallbackDelegate
{
public Iterator getTypeIds();
}
Index: parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java,v
retrieving revision 1.22
diff -u -r1.22 IASTFactory.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java 13 Aug 2003 23:54:05 -0000 1.22
+++ parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java 14 Aug 2003 15:32:01 -0000
@@ -102,7 +102,7 @@
IASTInitializerClause.Kind kind,
IASTExpression assignmentExpression,
List initializerClauses);
- public IASTExceptionSpecification createExceptionSpecification(List typeIds);
+ public IASTExceptionSpecification createExceptionSpecification(IASTScope scope, List typeIds) throws ASTSemanticException;
/**
* @param exp
*/
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java,v
retrieving revision 1.91
diff -u -r1.91 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java 13 Aug 2003 23:54:05 -0000 1.91
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java 14 Aug 2003 15:32:04 -0000
@@ -1968,10 +1968,18 @@
}
}
if (exceptionSpecIds != null)
- d.setExceptionSpecification(
- astFactory
- .createExceptionSpecification(
- exceptionSpecIds));
+ try
+ {
+ d.setExceptionSpecification(
+ astFactory
+ .createExceptionSpecification(
+ d.getDeclarationWrapper().getScope(), exceptionSpecIds));
+ }
+ catch (ASTSemanticException e)
+ {
+ failParse();
+ throw backtrack;
+ }
}
// check for optional pure virtual
if (LT(1) == IToken.tASSIGN
Index: parser/org/eclipse/cdt/internal/core/parser/Scanner.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java,v
retrieving revision 1.46
diff -u -r1.46 Scanner.java
--- parser/org/eclipse/cdt/internal/core/parser/Scanner.java 13 Aug 2003 21:51:48 -0000 1.46
+++ parser/org/eclipse/cdt/internal/core/parser/Scanner.java 14 Aug 2003 15:32:05 -0000
@@ -308,6 +308,9 @@
}
}
}
+
+ if (throwExceptionOnInclusionNotFound && inclusionReader == null )
+ throw new ScannerException("Cannot find inclusion " + fileName);
}
else // local inclusion
{
@@ -332,9 +335,6 @@
handleInclusion( fileName, true, nameOffset, beginOffset, endOffset );
}
}
-
- if (throwExceptionOnInclusionNotFound && inclusionReader == null )
- throw new ScannerException("Cannot find inclusion " + fileName);
IASTInclusion inclusion = astFactory.createInclusion( fileName, newPath, !useIncludePaths, beginOffset, endOffset, nameOffset );
contextStack.updateContext(inclusionReader, newPath, ScannerContext.INCLUSION, inclusion, requestor );
Index: parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java,v
retrieving revision 1.3
diff -u -r1.3 ASTAbstractDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java 12 Aug 2003 18:19:38 -0000 1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java 14 Aug 2003 15:32:05 -0000
@@ -13,8 +13,10 @@
import java.util.Iterator;
import java.util.List;
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
/**
@@ -65,6 +67,7 @@
*/
public Iterator getPointerOperators()
{
+ if( pointerOperators == null ) return new EmptyIterator();
return pointerOperators.iterator();
}
/* (non-Javadoc)
@@ -72,6 +75,7 @@
*/
public Iterator getArrayModifiers()
{
+ if( arrayModifiers == null ) return new EmptyIterator();
return arrayModifiers.iterator();
}
/* (non-Javadoc)
@@ -79,6 +83,7 @@
*/
public Iterator getParameters()
{
+ if( parms == null ) return new EmptyIterator();
return parms.iterator();
}
/* (non-Javadoc)
@@ -94,5 +99,26 @@
public boolean isVolatile()
{
return isVolatile;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor)
+ {
+ Iterator arrayMods = getArrayModifiers();
+ while( arrayMods.hasNext() )
+ ((IASTArrayModifier)arrayMods.next()).acceptElement(requestor);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void enterScope(ISourceElementRequestor requestor)
+ {
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void exitScope(ISourceElementRequestor requestor)
+ {
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/ASTArrayModifier.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/ASTArrayModifier.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/ASTArrayModifier.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/ast/ASTArrayModifier.java 14 Aug 2003 15:32:05 -0000
@@ -0,0 +1,62 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003 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.ast;
+
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
+import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
+import org.eclipse.cdt.core.parser.ast.IASTExpression;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class ASTArrayModifier implements IASTArrayModifier
+{
+ private final IASTExpression expression;
+ /**
+ * @param exp
+ */
+ public ASTArrayModifier(IASTExpression exp)
+ {
+ expression = exp;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.ast.IASTArrayModifier#getExpression()
+ */
+ public IASTExpression getExpression()
+ {
+ return expression;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor)
+ {
+ if( expression != null )
+ expression.acceptElement( requestor );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void enterScope(ISourceElementRequestor requestor)
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void exitScope(ISourceElementRequestor requestor)
+ {
+ }
+}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/ASTInitializerClause.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInitializerClause.java,v
retrieving revision 1.2
diff -u -r1.2 ASTInitializerClause.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/ASTInitializerClause.java 13 Aug 2003 23:54:05 -0000 1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/ASTInitializerClause.java 14 Aug 2003 15:32:05 -0000
@@ -12,7 +12,6 @@
import java.util.Iterator;
import java.util.List;
-import java.util.NoSuchElementException;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
Index: parser/org/eclipse/cdt/internal/core/parser/ast/BaseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/BaseASTFactory.java,v
retrieving revision 1.8
diff -u -r1.8 BaseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/BaseASTFactory.java 13 Aug 2003 21:51:48 -0000 1.8
+++ parser/org/eclipse/cdt/internal/core/parser/ast/BaseASTFactory.java 14 Aug 2003 15:32:05 -0000
@@ -14,6 +14,7 @@
import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
@@ -63,6 +64,11 @@
public IASTInitializerClause createInitializerClause(IASTInitializerClause.Kind kind, IASTExpression assignmentExpression, List initializerClauses)
{
return new ASTInitializerClause( kind, assignmentExpression, initializerClauses );
+ }
+
+ public IASTArrayModifier createArrayModifier(IASTExpression exp)
+ {
+ return new ASTArrayModifier( exp );
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExceptionSpecification.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExceptionSpecification.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExceptionSpecification.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExceptionSpecification.java 14 Aug 2003 15:32:05 -0000
@@ -0,0 +1,68 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003 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.ast.complete;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
+import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
+import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class ASTExceptionSpecification implements IASTExceptionSpecification
+{
+ private final List typeIds;
+ private final ASTReferenceStore store;
+ /**
+ * @param newTypeIds
+ * @param references
+ */
+ public ASTExceptionSpecification(List newTypeIds, List references)
+ {
+ this.typeIds = newTypeIds;
+ store = new ASTReferenceStore( references );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification#getTypeIds()
+ */
+ public Iterator getTypeIds()
+ {
+ if( typeIds == null ) return new EmptyIterator();
+ return typeIds.iterator();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor)
+ {
+ store.processReferences(requestor);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void enterScope(ISourceElementRequestor requestor)
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void exitScope(ISourceElementRequestor requestor)
+ {
+ }
+}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java,v
retrieving revision 1.3
diff -u -r1.3 ASTField.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java 13 Aug 2003 23:54:05 -0000 1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java 14 Aug 2003 15:32:05 -0000
@@ -57,6 +57,7 @@
referenceDelegate.processReferences(requestor);
if( getInitializerClause() != null )
getInitializerClause().acceptElement(requestor);
-
+ if( getAbstractDeclaration() != null )
+ getAbstractDeclaration().acceptElement(requestor);
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java,v
retrieving revision 1.3
diff -u -r1.3 ASTFunction.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java 13 Aug 2003 21:51:48 -0000 1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java 14 Aug 2003 15:32:06 -0000
@@ -15,6 +15,7 @@
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
@@ -191,13 +192,22 @@
public void acceptElement(ISourceElementRequestor requestor)
{
requestor.acceptFunctionDeclaration(this);
+ functionCallbacks(requestor);
+ }
+
+ protected void functionCallbacks(ISourceElementRequestor requestor)
+ {
references.processReferences(requestor);
- processParameterInitializers(requestor);
+ processParameterInitializersAndArrayMods(requestor);
+ if( getReturnType() != null )
+ getReturnType().acceptElement(requestor);
+ if( getExceptionSpec() != null )
+ getExceptionSpec().acceptElement(requestor);
}
/**
* @param requestor
*/
- protected void processParameterInitializers(ISourceElementRequestor requestor)
+ protected void processParameterInitializersAndArrayMods(ISourceElementRequestor requestor)
{
Iterator i = parameters.iterator();
while( i.hasNext() )
@@ -205,6 +215,11 @@
IASTParameterDeclaration parm = (IASTParameterDeclaration)i.next();
if( parm.getDefaultValue() != null )
parm.getDefaultValue().acceptElement(requestor);
+ Iterator arrays = parm.getArrayModifiers();
+ while( arrays.hasNext() )
+ {
+ ((IASTArrayModifier)arrays.next()).acceptElement(requestor);
+ }
}
}
@@ -215,8 +230,7 @@
public void enterScope(ISourceElementRequestor requestor)
{
requestor.enterFunctionBody( this );
- references.processReferences(requestor);
- processParameterInitializers(requestor);
+ functionCallbacks( requestor );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java,v
retrieving revision 1.4
diff -u -r1.4 ASTMethod.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java 13 Aug 2003 23:54:05 -0000 1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java 14 Aug 2003 15:32:06 -0000
@@ -126,8 +126,11 @@
public void acceptElement(ISourceElementRequestor requestor)
{
requestor.acceptMethodDeclaration(this);
- references.processReferences(requestor);
- processParameterInitializers(requestor);
+ methodCallbacks(requestor);
+ }
+ protected void methodCallbacks(ISourceElementRequestor requestor)
+ {
+ functionCallbacks(requestor);
processConstructorChain(requestor);
}
@@ -149,8 +152,7 @@
public void enterScope(ISourceElementRequestor requestor)
{
requestor.enterMethodBody(this);
- references.processReferences(requestor);
- processConstructorChain(requestor);
+ methodCallbacks( requestor );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java,v
retrieving revision 1.2
diff -u -r1.2 ASTTypedef.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java 30 Jul 2003 01:31:14 -0000 1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java 14 Aug 2003 15:32:06 -0000
@@ -70,7 +70,8 @@
public void acceptElement(ISourceElementRequestor requestor)
{
requestor.acceptTypedefDeclaration(this);
- referenceStore.processReferences(requestor);
+ referenceStore.processReferences(requestor);
+ getAbstractDeclarator().acceptElement( requestor );
}
/* (non-Javadoc)
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java,v
retrieving revision 1.3
diff -u -r1.3 ASTVariable.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java 13 Aug 2003 23:54:05 -0000 1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java 14 Aug 2003 15:32:06 -0000
@@ -166,6 +166,9 @@
initializerClause.acceptElement(requestor);
if( constructorExpression != null )
constructorExpression.acceptElement(requestor);
+ if( getAbstractDeclaration() != null )
+ getAbstractDeclaration().acceptElement(requestor);
+
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java,v
retrieving revision 1.15
diff -u -r1.15 CompleteParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java 13 Aug 2003 23:54:05 -0000 1.15
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java 14 Aug 2003 15:32:07 -0000
@@ -483,7 +483,11 @@
symbol = (IContainerSymbol)symbol.lookup( t.getImage() );
else
symbol = symbol.lookupNestedNameSpecifier( t.getImage() );
- references.add( createReference( symbol, t.getImage(), t.getOffset() ));
+
+ if( symbol != null )
+ references.add( createReference( symbol, t.getImage(), t.getOffset() ));
+ else
+ throw new ASTSemanticException();
}
catch( ParserSymbolTableException pste )
{
@@ -687,18 +691,24 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExceptionSpecification(java.util.List)
*/
- public IASTExceptionSpecification createExceptionSpecification(List typeIds)
- {
- // TODO Auto-generated method stub
- return null;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createArrayModifier(org.eclipse.cdt.core.parser.ast.IASTExpression)
- */
- public IASTArrayModifier createArrayModifier(IASTExpression exp)
+ public IASTExceptionSpecification createExceptionSpecification(IASTScope scope, List typeIds) throws ASTSemanticException
{
- // TODO Auto-generated method stub
- return null;
+ List references = new ArrayList();
+ List newTypeIds = new ArrayList();
+ if( typeIds != null )
+ {
+ Iterator iter =typeIds.iterator();
+ while( iter.hasNext() )
+ {
+ ITokenDuple duple = (ITokenDuple)iter.next();
+ if( duple != null )
+ {
+ lookupQualifiedName( scopeToSymbol( scope ), duple, references, false );
+ newTypeIds.add( duple.toString() );
+ }
+ }
+ }
+ return new ASTExceptionSpecification( newTypeIds, references );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createConstructorMemberInitializer(org.eclipse.cdt.core.parser.ITokenDuple, org.eclipse.cdt.core.parser.ast.IASTExpression)
@@ -784,8 +794,11 @@
typeSymbol = ((IContainerSymbol)typeSymbol).lookupNestedNameSpecifier( current.getImage());
else
typeSymbol = ((IContainerSymbol)typeSymbol).lookup( current.getImage());
-
- references.add( createReference( typeSymbol, current.getImage(), current.getOffset() ));
+
+ if( typeSymbol != null )
+ references.add( createReference( typeSymbol, current.getImage(), current.getOffset() ));
+ else
+ throw new ASTSemanticException();
}
catch (ParserSymbolTableException e)
{
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTArrayModifier.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTArrayModifier.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTArrayModifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTArrayModifier.java 12 Aug 2003 18:19:38 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,38 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 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.ast.quick;
-
-import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
-import org.eclipse.cdt.core.parser.ast.IASTExpression;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTArrayModifier implements IASTArrayModifier
-{
- private final IASTExpression expression;
- /**
- * @param exp
- */
- public ASTArrayModifier(IASTExpression exp)
- {
- expression = exp;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.internal.core.parser.ast.IASTArrayModifier#getExpression()
- */
- public IASTExpression getExpression()
- {
- return expression;
- }
-}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExceptionSpecification.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExceptionSpecification.java,v
retrieving revision 1.2
diff -u -r1.2 ASTExceptionSpecification.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExceptionSpecification.java 9 Jul 2003 00:47:42 -0000 1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExceptionSpecification.java 14 Aug 2003 15:32:07 -0000
@@ -14,6 +14,7 @@
import java.util.Iterator;
import java.util.List;
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
@@ -41,5 +42,26 @@
public Iterator getTypeIds()
{
return typeIds.iterator();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor)
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void enterScope(ISourceElementRequestor requestor)
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void exitScope(ISourceElementRequestor requestor)
+ {
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java,v
retrieving revision 1.23
diff -u -r1.23 QuickParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java 13 Aug 2003 23:54:05 -0000 1.23
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java 14 Aug 2003 15:32:07 -0000
@@ -20,7 +20,6 @@
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
@@ -163,17 +162,9 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExceptionSpecification(java.util.List)
*/
- public IASTExceptionSpecification createExceptionSpecification(List typeIds)
+ public IASTExceptionSpecification createExceptionSpecification(IASTScope scope, List typeIds)
{
return new ASTExceptionSpecification( typeIds );
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createArrayModifier(org.eclipse.cdt.core.parser.ast.IASTExpression)
- */
- public IASTArrayModifier createArrayModifier(IASTExpression exp)
- {
- return new ASTArrayModifier( exp );
}
/* (non-Javadoc)