mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-09 11:33:20 +02:00
CORE
Added X-Ref/Elaborated type support w/element requestor callbacks. TESTS Added CompleteParseASTTest::testForewardDeclarationWithUsage().
This commit is contained in:
parent
8dba12bff3
commit
891454830b
16 changed files with 161 additions and 18 deletions
|
@ -1,4 +1,7 @@
|
||||||
2003-08-12
|
2003-08-12 John Camelon
|
||||||
|
Added CompleteParseASTTest::testForewardDeclarationWithUsage().
|
||||||
|
|
||||||
|
2003-08-12 Hoda Amer
|
||||||
Added CompletionProposalsTest to the suit to test the generation
|
Added CompletionProposalsTest to the suit to test the generation
|
||||||
of completion proposals.
|
of completion proposals.
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,7 @@ public class CompleteParseASTTest extends TestCase
|
||||||
public class FullParseCallback implements ISourceElementRequestor
|
public class FullParseCallback implements ISourceElementRequestor
|
||||||
{
|
{
|
||||||
private List references = new ArrayList();
|
private List references = new ArrayList();
|
||||||
|
private List forewardDecls = new ArrayList();
|
||||||
private Stack inclusions = new Stack();
|
private Stack inclusions = new Stack();
|
||||||
private Scope compilationUnit;
|
private Scope compilationUnit;
|
||||||
|
|
||||||
|
@ -499,6 +500,22 @@ public class CompleteParseASTTest extends TestCase
|
||||||
{
|
{
|
||||||
return references;
|
return references;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
|
||||||
|
*/
|
||||||
|
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
|
||||||
|
{
|
||||||
|
forewardDecls.add( elaboratedType );
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List getForewardDecls()
|
||||||
|
{
|
||||||
|
return forewardDecls;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Iterator getDeclarations( IASTScope scope )
|
protected Iterator getDeclarations( IASTScope scope )
|
||||||
|
@ -852,6 +869,25 @@ public class CompleteParseASTTest extends TestCase
|
||||||
assertEquals( variableA.getAbstractDeclaration().getTypeSpecifier(), elab );
|
assertEquals( variableA.getAbstractDeclaration().getTypeSpecifier(), elab );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testForewardDeclarationWithUsage() throws Exception
|
||||||
|
{
|
||||||
|
Iterator declarations = parse( "class A; A * anA;class A { };").getDeclarations();
|
||||||
|
IASTAbstractTypeSpecifierDeclaration forewardDecl = (IASTAbstractTypeSpecifierDeclaration)declarations.next();
|
||||||
|
IASTVariable variable = (IASTVariable)declarations.next();
|
||||||
|
IASTAbstractTypeSpecifierDeclaration classDecl = (IASTAbstractTypeSpecifierDeclaration)declarations.next();
|
||||||
|
IASTElaboratedTypeSpecifier elab = (IASTElaboratedTypeSpecifier)forewardDecl.getTypeSpecifier();
|
||||||
|
IASTClassSpecifier clasSpec = (IASTClassSpecifier)classDecl.getTypeSpecifier();
|
||||||
|
assertEquals( elab.getName(), clasSpec.getName() );
|
||||||
|
String [] fqnClass = clasSpec.getFullyQualifiedName();
|
||||||
|
String [] fqnElab = elab.getFullyQualifiedName();
|
||||||
|
assertEquals( fqnClass.length, fqnElab.length );
|
||||||
|
for( int i = 0; i < fqnClass.length; ++i )
|
||||||
|
assertEquals( fqnClass[i], fqnElab[i]);
|
||||||
|
assertEquals( callback.getReferences().size(), 1 );
|
||||||
|
assertEquals( callback.getForewardDecls().size(), 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testASM() throws Exception
|
public void testASM() throws Exception
|
||||||
{
|
{
|
||||||
IASTASMDefinition asm = (IASTASMDefinition)parse( "asm ( \"blah blah blah\" );" ).getDeclarations().next();
|
IASTASMDefinition asm = (IASTASMDefinition)parse( "asm ( \"blah blah blah\" );" ).getDeclarations().next();
|
||||||
|
|
|
@ -951,4 +951,12 @@ public class DOMBuilder implements ISourceElementRequestor
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
|
||||||
|
*/
|
||||||
|
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -22,6 +22,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||||
|
@ -403,4 +404,11 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
|
||||||
if (reference.getReferencedElement() instanceof IASTMethod)
|
if (reference.getReferencedElement() instanceof IASTMethod)
|
||||||
indexer.addMethodReference((IASTMethod) reference.getReferencedElement());
|
indexer.addMethodReference((IASTMethod) reference.getReferencedElement());
|
||||||
}
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
|
||||||
|
*/
|
||||||
|
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
|
||||||
|
{
|
||||||
|
// TODO BOGDAN IMPLEMENT THIS
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
2003-08-12 John Camelon
|
||||||
|
Added X-Ref/Elaborated type support w/element requestor callbacks.
|
||||||
|
|
||||||
2003-08-11 John Camelon
|
2003-08-11 John Camelon
|
||||||
Added Complete Parse support for ASM Definitions.
|
Added Complete Parse support for ASM Definitions.
|
||||||
Added isVolatile() to abstract declarations.
|
Added isVolatile() to abstract declarations.
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||||
|
@ -54,6 +55,7 @@ public interface ISourceElementRequestor {
|
||||||
public void acceptASMDefinition( IASTASMDefinition asmDefinition );
|
public void acceptASMDefinition( IASTASMDefinition asmDefinition );
|
||||||
public void acceptTypedefDeclaration( IASTTypedefDeclaration typedef );
|
public void acceptTypedefDeclaration( IASTTypedefDeclaration typedef );
|
||||||
public void acceptEnumerationSpecifier( IASTEnumerationSpecifier enumeration );
|
public void acceptEnumerationSpecifier( IASTEnumerationSpecifier enumeration );
|
||||||
|
public void acceptElaboratedForewardDeclaration( IASTElaboratedTypeSpecifier elaboratedType );
|
||||||
public void acceptAbstractTypeSpecDeclaration( IASTAbstractTypeSpecifierDeclaration abstractDeclaration );
|
public void acceptAbstractTypeSpecDeclaration( IASTAbstractTypeSpecifierDeclaration abstractDeclaration );
|
||||||
|
|
||||||
public void enterFunctionBody( IASTFunction function );
|
public void enterFunctionBody( IASTFunction function );
|
||||||
|
|
|
@ -16,5 +16,5 @@ package org.eclipse.cdt.core.parser.ast;
|
||||||
*/
|
*/
|
||||||
public interface IASTClassReference extends IASTReference
|
public interface IASTClassReference extends IASTReference
|
||||||
{
|
{
|
||||||
|
public boolean isResolved();
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,13 +10,15 @@
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
package org.eclipse.cdt.core.parser.ast;
|
package org.eclipse.cdt.core.parser.ast;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public interface IASTElaboratedTypeSpecifier extends IASTTypeSpecifier, IASTOffsetableElement {
|
public interface IASTElaboratedTypeSpecifier extends IASTTypeSpecifier, IASTOffsetableElement, IASTQualifiedNameElement, ISourceElementCallbackDelegate {
|
||||||
|
|
||||||
public String getName();
|
public String getName();
|
||||||
public ASTClassKind getClassKind();
|
public ASTClassKind getClassKind();
|
||||||
|
|
|
@ -7,6 +7,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||||
|
@ -396,4 +397,13 @@ public class NullSourceElementRequestor implements ISourceElementRequestor
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
|
||||||
|
*/
|
||||||
|
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1493,6 +1493,7 @@ public class Parser implements IParser
|
||||||
|
|
||||||
ITokenDuple d = name();
|
ITokenDuple d = name();
|
||||||
IASTElaboratedTypeSpecifier elaboratedTypeSpec = null;
|
IASTElaboratedTypeSpecifier elaboratedTypeSpec = null;
|
||||||
|
final boolean isForewardDecl = ( LT(1) == IToken.tSEMI );
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -1503,7 +1504,7 @@ public class Parser implements IParser
|
||||||
d,
|
d,
|
||||||
t.getOffset(),
|
t.getOffset(),
|
||||||
d.getLastToken().getEndOffset(),
|
d.getLastToken().getEndOffset(),
|
||||||
( LT(1) == IToken.tSEMI ) );
|
isForewardDecl );
|
||||||
}
|
}
|
||||||
catch (ASTSemanticException e)
|
catch (ASTSemanticException e)
|
||||||
{
|
{
|
||||||
|
@ -1511,6 +1512,9 @@ public class Parser implements IParser
|
||||||
throw backtrack;
|
throw backtrack;
|
||||||
}
|
}
|
||||||
sdw.setTypeSpecifier(elaboratedTypeSpec);
|
sdw.setTypeSpecifier(elaboratedTypeSpec);
|
||||||
|
|
||||||
|
if( isForewardDecl )
|
||||||
|
elaboratedTypeSpec.acceptElement( requestor );
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Consumes template parameters.
|
* Consumes template parameters.
|
||||||
|
|
|
@ -14,6 +14,7 @@ import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
|
||||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
|
@ -23,13 +24,13 @@ public class ASTClassReference
|
||||||
extends ASTReference
|
extends ASTReference
|
||||||
implements IASTClassReference
|
implements IASTClassReference
|
||||||
{
|
{
|
||||||
private final IASTClassSpecifier reference;
|
private final IASTTypeSpecifier reference;
|
||||||
/**
|
/**
|
||||||
* @param i
|
* @param i
|
||||||
* @param string
|
* @param string
|
||||||
* @param specifier
|
* @param specifier
|
||||||
*/
|
*/
|
||||||
public ASTClassReference(int i, String string, IASTClassSpecifier specifier)
|
public ASTClassReference(int i, String string, IASTTypeSpecifier specifier)
|
||||||
{
|
{
|
||||||
super( i, string );
|
super( i, string );
|
||||||
reference = specifier;
|
reference = specifier;
|
||||||
|
@ -39,7 +40,7 @@ public class ASTClassReference
|
||||||
*/
|
*/
|
||||||
public ISourceElementCallbackDelegate getReferencedElement()
|
public ISourceElementCallbackDelegate getReferencedElement()
|
||||||
{
|
{
|
||||||
return reference;
|
return (ISourceElementCallbackDelegate)reference;
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||||
|
@ -60,4 +61,11 @@ public class ASTClassReference
|
||||||
public void exitScope(ISourceElementRequestor requestor)
|
public void exitScope(ISourceElementRequestor requestor)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ast.IASTClassReference#isResolved()
|
||||||
|
*/
|
||||||
|
public boolean isResolved()
|
||||||
|
{
|
||||||
|
return ( reference instanceof IASTClassSpecifier );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,13 @@
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.parser.ast.complete;
|
package org.eclipse.cdt.internal.core.parser.ast.complete;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
|
||||||
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
|
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
|
||||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
||||||
|
|
||||||
|
@ -23,8 +26,11 @@ import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
||||||
*/
|
*/
|
||||||
public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElaboratedTypeSpecifier
|
public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElaboratedTypeSpecifier
|
||||||
{
|
{
|
||||||
|
private final boolean isForwardDeclaration;
|
||||||
private final ASTClassKind kind;
|
private final ASTClassKind kind;
|
||||||
|
private final ASTQualifiedNamedElement qualifiedName;
|
||||||
private Offsets offsets = new Offsets();
|
private Offsets offsets = new Offsets();
|
||||||
|
private final ASTReferenceStore store;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param checkSymbol
|
* @param checkSymbol
|
||||||
|
@ -32,12 +38,16 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora
|
||||||
* @param startingOffset
|
* @param startingOffset
|
||||||
* @param endOffset
|
* @param endOffset
|
||||||
*/
|
*/
|
||||||
public ASTElaboratedTypeSpecifier(ISymbol checkSymbol, ASTClassKind kind, int startingOffset, int endOffset)
|
public ASTElaboratedTypeSpecifier(ISymbol checkSymbol, ASTClassKind kind, int startingOffset, int endOffset, List references, boolean isDecl )
|
||||||
{
|
{
|
||||||
super( checkSymbol );
|
super( checkSymbol );
|
||||||
this.kind = kind;
|
this.kind = kind;
|
||||||
setStartingOffset( startingOffset );
|
setStartingOffset( startingOffset );
|
||||||
setEndingOffset( endOffset );
|
setEndingOffset( endOffset );
|
||||||
|
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), checkSymbol.getName() );
|
||||||
|
store = new ASTReferenceStore( references );
|
||||||
|
isForwardDeclaration = isDecl;
|
||||||
|
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getName()
|
* @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getName()
|
||||||
|
@ -93,6 +103,9 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora
|
||||||
*/
|
*/
|
||||||
public void acceptElement(ISourceElementRequestor requestor)
|
public void acceptElement(ISourceElementRequestor requestor)
|
||||||
{
|
{
|
||||||
|
if( isForwardDeclaration )
|
||||||
|
requestor.acceptElaboratedForewardDeclaration(this);
|
||||||
|
store.processReferences(requestor);
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||||
|
@ -106,4 +119,11 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora
|
||||||
public void exitScope(ISourceElementRequestor requestor)
|
public void exitScope(ISourceElementRequestor requestor)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement#getFullyQualifiedName()
|
||||||
|
*/
|
||||||
|
public String[] getFullyQualifiedName()
|
||||||
|
{
|
||||||
|
return qualifiedName.getFullyQualifiedName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -400,6 +400,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
||||||
|
|
||||||
IDerivableContainerSymbol newSymbol = pst.newDerivableContainerSymbol( lastToken.getImage(), pstType );
|
IDerivableContainerSymbol newSymbol = pst.newDerivableContainerSymbol( lastToken.getImage(), pstType );
|
||||||
|
|
||||||
|
if( classSymbol != null )
|
||||||
|
classSymbol.setTypeSymbol( newSymbol );
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
currentScopeSymbol.addSymbol( newSymbol );
|
currentScopeSymbol.addSymbol( newSymbol );
|
||||||
|
@ -409,9 +412,6 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
||||||
throw new ASTSemanticException();
|
throw new ASTSemanticException();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( classSymbol != null )
|
|
||||||
classSymbol.setTypeSymbol( newSymbol );
|
|
||||||
|
|
||||||
ASTClassSpecifier classSpecifier = new ASTClassSpecifier( newSymbol, kind, type, access, startingOffset, nameOffset, references );
|
ASTClassSpecifier classSpecifier = new ASTClassSpecifier( newSymbol, kind, type, access, startingOffset, nameOffset, references );
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -500,7 +500,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
||||||
symbol.getType() == TypeInfo.t_struct ||
|
symbol.getType() == TypeInfo.t_struct ||
|
||||||
symbol.getType() == TypeInfo.t_union )
|
symbol.getType() == TypeInfo.t_union )
|
||||||
{
|
{
|
||||||
return new ASTClassReference( offset, string, (IASTClassSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
|
return new ASTClassReference( offset, string, (IASTTypeSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
|
||||||
}
|
}
|
||||||
else if( symbol.getTypeInfo().checkBit( TypeInfo.isTypedef ))
|
else if( symbol.getTypeInfo().checkBit( TypeInfo.isTypedef ))
|
||||||
{
|
{
|
||||||
|
@ -1296,7 +1296,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
||||||
}
|
}
|
||||||
|
|
||||||
ASTElaboratedTypeSpecifier elab =
|
ASTElaboratedTypeSpecifier elab =
|
||||||
new ASTElaboratedTypeSpecifier( checkSymbol, kind, startingOffset, endOffset );
|
new ASTElaboratedTypeSpecifier( checkSymbol, kind, startingOffset, endOffset, references, isForewardDecl );
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,9 +10,12 @@
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
|
||||||
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
|
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,18 +28,20 @@ public class ASTElaboratedTypeSpecifier implements IASTElaboratedTypeSpecifier
|
||||||
private Offsets offsets = new Offsets();
|
private Offsets offsets = new Offsets();
|
||||||
private final String typeName;
|
private final String typeName;
|
||||||
private final ASTClassKind classKind;
|
private final ASTClassKind classKind;
|
||||||
|
private final ASTQualifiedNamedElement qualifiedName;
|
||||||
/**
|
/**
|
||||||
* @param elaboratedClassKind
|
* @param elaboratedClassKind
|
||||||
* @param typeName
|
* @param typeName
|
||||||
* @param startingOffset
|
* @param startingOffset
|
||||||
* @param endOffset
|
* @param endOffset
|
||||||
*/
|
*/
|
||||||
public ASTElaboratedTypeSpecifier(ASTClassKind elaboratedClassKind, String typeName, int startingOffset, int endOffset)
|
public ASTElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, String typeName, int startingOffset, int endOffset)
|
||||||
{
|
{
|
||||||
classKind = elaboratedClassKind;
|
classKind = elaboratedClassKind;
|
||||||
this.typeName = typeName;
|
this.typeName = typeName;
|
||||||
offsets.setStartingOffset( startingOffset );
|
offsets.setStartingOffset( startingOffset );
|
||||||
offsets.setEndingOffset( endOffset );
|
offsets.setEndingOffset( endOffset );
|
||||||
|
qualifiedName = new ASTQualifiedNamedElement( scope, typeName );
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getTypeName()
|
* @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getTypeName()
|
||||||
|
@ -88,4 +93,30 @@ public class ASTElaboratedTypeSpecifier implements IASTElaboratedTypeSpecifier
|
||||||
{
|
{
|
||||||
throw new ASTNotImplementedException();
|
throw new ASTNotImplementedException();
|
||||||
}
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement#getFullyQualifiedName()
|
||||||
|
*/
|
||||||
|
public String[] getFullyQualifiedName()
|
||||||
|
{
|
||||||
|
return qualifiedName.getFullyQualifiedName();
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||||
|
*/
|
||||||
|
public void acceptElement(ISourceElementRequestor requestor)
|
||||||
|
{
|
||||||
|
requestor.acceptElaboratedForewardDeclaration(this);
|
||||||
|
}
|
||||||
|
/* (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)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -280,6 +280,6 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
||||||
|
|
||||||
public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, ITokenDuple typeName, int startingOffset, int endOffset, boolean isForewardDecl)
|
public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, ITokenDuple typeName, int startingOffset, int endOffset, boolean isForewardDecl)
|
||||||
{
|
{
|
||||||
return new ASTElaboratedTypeSpecifier( elaboratedClassKind, typeName.toString(), startingOffset, endOffset );
|
return new ASTElaboratedTypeSpecifier( scope, elaboratedClassKind, typeName.toString(), startingOffset, endOffset );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||||
|
@ -413,6 +414,13 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants
|
||||||
|
|
||||||
private IASTScope currentScope = null;
|
private IASTScope currentScope = null;
|
||||||
private LinkedList scopeStack = new LinkedList();
|
private LinkedList scopeStack = new LinkedList();
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
|
||||||
|
*/
|
||||||
|
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
|
||||||
|
{
|
||||||
|
//TODO BOGDAN IMPLEMENT THIS
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue