From b3ac698a40a5545801c87daadba79560f2195acc Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Wed, 14 Apr 2004 20:43:00 +0000 Subject: [PATCH] AST work for friend declarations for bug 45235 AST does not capture class friend relationships and bug 53759 ISourceElementRequestor missing callbacks for friend declarations --- core/org.eclipse.cdt.core.tests/ChangeLog | 5 +++++ .../parser/tests/CompleteParseASTTest.java | 15 ++++++++++++++ .../parser/tests/CompleteParseBaseTest.java | 7 +++++++ .../core/parser/tests/QuickParseASTTests.java | 15 ++++++++++++++ core/org.eclipse.cdt.core/ChangeLog | 3 +++ .../core/browser/cache/TypeMatchLocator.java | 9 +++++++++ .../indexing/SourceIndexerRequestor.java | 9 +++++++++ .../parser/ChangeLog-parser | 9 +++++++++ .../core/parser/ISourceElementRequestor.java | 2 ++ .../parser/NullSourceElementRequestor.java | 9 +++++++++ .../IASTAbstractTypeSpecifierDeclaration.java | 1 + .../core/parser/ast/IASTClassSpecifier.java | 2 ++ .../cdt/core/parser/ast/IASTFactory.java | 2 +- .../cdt/internal/core/parser/Parser.java | 7 ++++--- .../ASTAbstractTypeSpecifierDeclaration.java | 16 +++++++++++++-- .../ast/complete/ASTClassSpecifier.java | 8 ++++++++ .../core/parser/ast/complete/ASTFunction.java | 11 +++++++--- .../core/parser/ast/complete/ASTMethod.java | 9 ++++++--- .../ast/complete/CompleteParseASTFactory.java | 18 +++++++++++------ .../expression/ExpressionParseASTFactory.java | 3 ++- .../ASTAbstractTypeSpecifierDeclaration.java | 16 +++++++++++++-- .../parser/ast/quick/ASTClassSpecifier.java | 15 ++++++++++++++ .../core/parser/ast/quick/ASTFunction.java | 6 +++++- .../core/parser/ast/quick/ASTMethod.java | 5 ++++- .../parser/ast/quick/IASTQClassSpecifier.java | 3 +++ .../ast/quick/QuickParseASTFactory.java | 20 +++++++++++++++---- .../core/search/matching/MatchLocator.java | 12 ++++++++++- core/org.eclipse.cdt.ui/ChangeLog | 3 +++ .../SourceElementRequestorAdapter.java | 9 +++++++++ 29 files changed, 221 insertions(+), 28 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 6811bdf32d5..0744bcfacff 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,8 @@ +2004-04-14 Andrew Niefer + updated FullParseCallback with acceptFriendDeclaration + added parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.testBug45235() + added parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.testBug45235() + 2004-04-13 Andrew Niefer added parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.testBug46246() 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 cff4de2ed52..2efc3caad43 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 @@ -1472,4 +1472,19 @@ public class CompleteParseASTTest extends CompleteParseBaseTest assertAllReferences( 2, createTaskList( new Task( A ), new Task( B ) ) ); } + + public void testBug45235() throws Exception + { + Iterator i = parse( "class A { friend class B; friend void f(); }; " ).getDeclarations(); + + IASTClassSpecifier A = (IASTClassSpecifier) ((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); + + i = getDeclarations( A ); + + IASTAbstractTypeSpecifierDeclaration forewardDecl = (IASTAbstractTypeSpecifierDeclaration)i.next(); + IASTFunction f = (IASTFunction) i.next(); + + assertTrue( forewardDecl.isFriendDeclaration() ); + assertTrue( f.isFriend() ); + } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java index fd984dd7367..7c0e37189a2 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java @@ -696,6 +696,13 @@ public class CompleteParseBaseTest extends TestCase // TODO Auto-generated method stub return false; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) + */ + public void acceptFriendDeclaration(IASTDeclaration declaration) { + getCurrentScope().addDeclaration( declaration ); + } } protected Iterator getNestedScopes( IASTCodeScope scope ) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java index cafd99f8ce4..0ac049aac9d 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java @@ -2161,5 +2161,20 @@ public class QuickParseASTTests extends BaseASTTest IASTFunction func1 = (IASTFunction) assertSoleDeclaration("__declspec(dllexport) int func1 (int a) {}"); assertEquals( func1.getName(), "func1"); } + + public void testBug45235() throws Exception + { + Iterator i = parse( "class A { friend class B; friend void f(); }; " ).getDeclarations(); + + IASTClassSpecifier A = (IASTClassSpecifier) ((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); + + i = A.getDeclarations(); + + IASTAbstractTypeSpecifierDeclaration forewardDecl = (IASTAbstractTypeSpecifierDeclaration)i.next(); + IASTFunction f = (IASTFunction) i.next(); + + assertTrue( forewardDecl.isFriendDeclaration() ); + assertTrue( f.isFriend() ); + } } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index a1bcb3add90..518ae6f363b 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,6 @@ +2004-04-14 Andrew Niefer + updated clients of Parse to have a default implementation for ISourceElementRequestor.acceptFriendDeclaration + 2004-04-14 Alain Magloire Fix PR 58082, with Patch from Jon Beniston diff --git a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeMatchLocator.java b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeMatchLocator.java index f344a382a21..8ec78a7f15c 100644 --- a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeMatchLocator.java +++ b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeMatchLocator.java @@ -47,6 +47,7 @@ import org.eclipse.cdt.core.parser.ast.IASTClassReference; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTCodeScope; import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; +import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; @@ -557,5 +558,13 @@ public class TypeMatchLocator implements ISourceElementRequestor, ICSearchConsta return 0; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) + */ + public void acceptFriendDeclaration(IASTDeclaration declaration) { + // TODO Auto-generated method stub + + } } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java index f4d56918f7e..e7feee5eab1 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java @@ -32,6 +32,7 @@ import org.eclipse.cdt.core.parser.ast.IASTClassReference; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTCodeScope; import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; +import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; @@ -517,6 +518,14 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo } } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) + */ + public void acceptFriendDeclaration(IASTDeclaration declaration) { + // TODO Auto-generated method stub + + } + private void pushInclude( IASTInclusion inclusion ){ includeStack.addFirst( currentInclude ); currentInclude = inclusion; diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index 699261ef10a..07f76e1aeea 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -1,3 +1,12 @@ +2004-04-14 Andrew Niefer + friends in the AST (bugs 45235 & 53759 ) + - added acceptFriendDeclaration to ISourceElementRequestor + - added isFriendDeclaration to IASTAbstractTypeSpecifierDeclaration + - modified isFriend on IASTFunction + - functions, methods & abstractTypeSpecifierDeclarations callback with acceptFriendDeclaration + instead of their normal accept* if isFriend() or isFriendDeclaration() is true. + - added getFriends to IASTClassSpecifier + 2004-04-13 Andrew Niefer fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=46246 modified symbol table sorting to use a collator instead of String.compare() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java index 8a80123d7d1..eae44683e65 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java @@ -19,6 +19,7 @@ import org.eclipse.cdt.core.parser.ast.IASTClassReference; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTCodeScope; import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; +import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; @@ -97,6 +98,7 @@ public interface ISourceElementRequestor { public void acceptEnumeratorReference( IASTEnumeratorReference reference ); public void acceptParameterReference(IASTParameterReference reference); public void acceptTemplateParameterReference( IASTTemplateParameterReference reference ); + public void acceptFriendDeclaration( IASTDeclaration declaration ); public void exitTemplateDeclaration( IASTTemplateDeclaration declaration ); public void exitTemplateSpecialization( IASTTemplateSpecialization specialization ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java index 3ef432c9150..1594727460d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java @@ -10,6 +10,7 @@ import org.eclipse.cdt.core.parser.ast.IASTClassReference; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTCodeScope; import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; +import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; @@ -478,4 +479,12 @@ public class NullSourceElementRequestor implements ISourceElementRequestor // TODO Auto-generated method stub return false; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) + */ + public void acceptFriendDeclaration(IASTDeclaration declaration) { + // TODO Auto-generated method stub + + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractTypeSpecifierDeclaration.java index 23eb9fac48f..6b7164aed66 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractTypeSpecifierDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractTypeSpecifierDeclaration.java @@ -17,4 +17,5 @@ package org.eclipse.cdt.core.parser.ast; public interface IASTAbstractTypeSpecifierDeclaration extends IASTDeclaration, IASTTypeSpecifierOwner, IASTTemplatedDeclaration, IASTOffsetableElement { + public boolean isFriendDeclaration(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassSpecifier.java index 82e91e270a2..271db17be70 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassSpecifier.java @@ -38,6 +38,8 @@ public interface IASTClassSpecifier extends IASTScope, IASTOffsetableNamedElemen public Iterator getBaseClauses(); + public Iterator getFriends(); + public ASTAccessVisibility getCurrentVisibilityMode(); public void setCurrentVisibility( ASTAccessVisibility visibility ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java index 29d218d039b..cd8e7c7cbca 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java @@ -219,7 +219,7 @@ public interface IASTFactory public IASTTypedefDeclaration createTypedef( IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) throws ASTSemanticException; - public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration( IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine); + public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration( IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend ); public boolean queryIsTypeName( IASTScope scope, ITokenDuple nameInQuestion ) ; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 4fbb97a0974..df0bbc3996e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -1095,11 +1095,12 @@ public abstract class Parser extends ExpressionParser implements IParser try { astFactory.createTypeSpecDeclaration( - sdw.getScope(), - sdw.getTypeSpecifier(), + sdw.getScope(), + sdw.getTypeSpecifier(), ownerTemplate, sdw.getStartingOffset(), - sdw.getStartingLine(), lastToken.getEndOffset(), lastToken.getLineNumber()) + sdw.getStartingLine(), lastToken.getEndOffset(), lastToken.getLineNumber(), + sdw.isFriend()) .acceptElement(requestor); } catch (Exception e1) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java index ec7c46b2d9c..667c2731edf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java @@ -28,15 +28,17 @@ public class ASTAbstractTypeSpecifierDeclaration { private final IASTTypeSpecifier typeSpec; private final IASTTemplate ownerTemplate; + private final boolean isFriendDeclaration; private Offsets offsets = new Offsets(); /** * @param ownerScope */ - public ASTAbstractTypeSpecifierDeclaration(IContainerSymbol ownerScope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int startingLine, int endingOffset, int endingLine ) + public ASTAbstractTypeSpecifierDeclaration(IContainerSymbol ownerScope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend ) { super(ownerScope); this.typeSpec = typeSpecifier; this.ownerTemplate = ownerTemplate; + this.isFriendDeclaration = isFriend; setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); } @@ -48,7 +50,10 @@ public class ASTAbstractTypeSpecifierDeclaration { try { - requestor.acceptAbstractTypeSpecDeclaration(this); + if( isFriendDeclaration() ) + requestor.acceptFriendDeclaration( this ); + else + requestor.acceptAbstractTypeSpecDeclaration(this); } catch (Exception e) { @@ -131,5 +136,12 @@ public class ASTAbstractTypeSpecifierDeclaration public int getEndingLine() { return offsets.getEndingLine(); } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration#isFriendDeclaration() + */ + public boolean isFriendDeclaration() { + return isFriendDeclaration; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java index 3b0cb7be943..d9a946aa062 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java @@ -25,6 +25,7 @@ import org.eclipse.cdt.core.parser.ast.IASTReference; 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.NamedOffsets; +import org.eclipse.cdt.internal.core.parser.ast.SymbolIterator; import org.eclipse.cdt.internal.core.parser.pst.IDerivableContainerSymbol; import org.eclipse.cdt.internal.core.parser.pst.ISymbol; import org.eclipse.cdt.internal.core.parser.pst.IDerivableContainerSymbol.IParentSymbol; @@ -328,4 +329,11 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier public void setExtraReferences(List references) { resolvedCrossReferences.addAll( references ); } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getFriends() + */ + public Iterator getFriends() { + IDerivableContainerSymbol symbol = (IDerivableContainerSymbol) getSymbol(); + return new SymbolIterator( symbol.getFriends().iterator() ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java index 3da495759eb..565043e6a1c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java @@ -36,6 +36,7 @@ public class ASTFunction extends ASTScope implements IASTFunction { private final boolean previouslyDeclared; private boolean hasFunctionBody = false; + private final boolean isFriendDeclaration; private final IASTTemplate ownerTemplate; private final IASTAbstractDeclaration returnType; private final IASTExceptionSpecification exception; @@ -54,7 +55,7 @@ public class ASTFunction extends ASTScope implements IASTFunction * @param ownerTemplate * @param references */ - public ASTFunction(IParameterizedSymbol symbol, int nameEndOffset, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startingLine, int nameOffset, int nameLine, IASTTemplate ownerTemplate, List references, boolean previouslyDeclared, boolean hasFunctionTryBlock ) + public ASTFunction(IParameterizedSymbol symbol, int nameEndOffset, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startingLine, int nameOffset, int nameLine, IASTTemplate ownerTemplate, List references, boolean previouslyDeclared, boolean hasFunctionTryBlock, boolean isFriend ) { super( symbol ); this.parameters = parameters; @@ -68,6 +69,7 @@ public class ASTFunction extends ASTScope implements IASTFunction qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() ); this.previouslyDeclared =previouslyDeclared; this.hasFunctionTryBlock = hasFunctionTryBlock; + this.isFriendDeclaration = isFriend; } @@ -83,7 +85,7 @@ public class ASTFunction extends ASTScope implements IASTFunction */ public boolean isFriend() { - return symbol.getTypeInfo().checkBit( TypeInfo.isFriend ); + return isFriendDeclaration; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFunction#isStatic() @@ -199,7 +201,10 @@ public class ASTFunction extends ASTScope implements IASTFunction { try { - requestor.acceptFunctionDeclaration(this); + if( isFriend() ) + requestor.acceptFriendDeclaration(this); + else + requestor.acceptFunctionDeclaration(this); } catch (Exception e) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java index 93b2850aedb..296b15a5924 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java @@ -48,7 +48,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod * @param references */ public ASTMethod(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, - List references, boolean previouslyDeclared, boolean isConstructor, boolean isDestructor, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean hasFunctionTryBlock ) + List references, boolean previouslyDeclared, boolean isConstructor, boolean isDestructor, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean hasFunctionTryBlock, boolean isFriend ) { super( symbol, @@ -59,7 +59,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod startOffset, startLine, nameOffset, - nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock ); + nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend ); this.visibility = visibility; this.isConstructor = isConstructor; this.isDestructor = isDestructor; @@ -130,7 +130,10 @@ public class ASTMethod extends ASTFunction implements IASTMethod { try { - requestor.acceptMethodDeclaration(this); + if( isFriend() ) + requestor.acceptFriendDeclaration( this ); + else + requestor.acceptMethodDeclaration(this); } catch (Exception e) { 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 75e42eed5c5..ed2bf0704d4 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 @@ -1943,7 +1943,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto symbol = functionDeclaration; } - ASTFunction function = new ASTFunction( symbol, nameEndOffset, parameters, returnType, exception, startOffset, startLine, nameOffset, nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock ); + ASTFunction function = new ASTFunction( symbol, nameEndOffset, parameters, returnType, exception, startOffset, startLine, nameOffset, nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend ); attachSymbolExtension(symbol, function, isFunctionDefinition); return function; } @@ -2269,8 +2269,11 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto symbol.setTypeSymbol( functionDeclaration ); // friend declaration, has no real visibility, set private visibility = ASTAccessVisibility.PRIVATE; - } else + } else if( ownerScope.isType( TypeInfo.t_constructor ) || + ownerScope.isType( TypeInfo.t_function ) || + ownerScope.isType( TypeInfo.t_block ) ) { + //only needs to be previously declared if we are in a local class handleProblem( IProblem.SEMANTIC_ILLFORMED_FRIEND, nameDuple.toString(), nameDuple.getStartOffset(), nameDuple.getEndOffset(), nameDuple.getLineNumber() ); } @@ -2287,7 +2290,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto { if( isFriend ) { - ((IDerivableContainerSymbol)ownerScope).addFriend( functionDeclaration ); + if( functionDeclaration != null ) + ((IDerivableContainerSymbol)ownerScope).addFriend( functionDeclaration ); + else + ((IDerivableContainerSymbol)ownerScope).addFriend( symbol ); } else if( !isConstructor ) ownerScope.addSymbol( symbol ); else @@ -2303,7 +2309,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto resolveLeftoverConstructorInitializerMembers( symbol, constructorChain ); - ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, startingLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, references, previouslyDeclared, isConstructor, isDestructor, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock ); + ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, startingLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, references, previouslyDeclared, isConstructor, isDestructor, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, isFriend ); attachSymbolExtension( symbol, method, isFunctionDefinition ); return method; } @@ -2815,9 +2821,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, - int startingLine, int endingOffset, int endingLine) + int startingLine, int endingOffset, int endingLine, boolean isFriend) { - return new ASTAbstractTypeSpecifierDeclaration( scopeToSymbol(scope), typeSpecifier, template, startingOffset, startingLine, endingOffset, endingLine); + return new ASTAbstractTypeSpecifierDeclaration( scopeToSymbol(scope), typeSpecifier, template, startingOffset, startingLine, endingOffset, endingLine, isFriend); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java index 4ac2ffefd5a..f6de818073f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java @@ -826,7 +826,8 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int startingOffset, int startingLine, int endingOffset, - int endingLine) { + int endingLine, + boolean isFriend) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java index af1ebc26265..fe78ed010c5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java @@ -27,15 +27,17 @@ public class ASTAbstractTypeSpecifierDeclaration { private final IASTTemplate ownerTemplate; private final IASTTypeSpecifier typeSpecifier; + private final boolean isFriendDeclaration; /** * @param scope * @param typeSpecifier */ - public ASTAbstractTypeSpecifierDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int endingOffset, int startingLine, int endingLine) + public ASTAbstractTypeSpecifierDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int endingOffset, int startingLine, int endingLine, boolean isFriend) { super( ownerTemplate != null ? null : scope ); this.typeSpecifier = typeSpecifier; this.ownerTemplate = ownerTemplate; + this.isFriendDeclaration = isFriend; if( ownerTemplate != null ) ownerTemplate.setOwnedDeclaration( this ); setStartingOffsetAndLineNumber(startingOffset, startingLine); @@ -93,7 +95,10 @@ public class ASTAbstractTypeSpecifierDeclaration { try { - requestor.acceptAbstractTypeSpecDeclaration(this); + if( isFriendDeclaration() ) + requestor.acceptFriendDeclaration( this ); + else + requestor.acceptAbstractTypeSpecDeclaration(this); } catch (Exception e) { @@ -128,5 +133,12 @@ public class ASTAbstractTypeSpecifierDeclaration public int getEndingLine() { return offsets.getEndingLine(); } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration#isFriendDeclaration() + */ + public boolean isFriendDeclaration() { + return isFriendDeclaration; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java index 4e0a594ab55..7457e3e69d5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java @@ -50,6 +50,7 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl private final String name; private List declarations = new ArrayList(); private List baseClauses = new ArrayList(); + private List friends = new ArrayList(); private ASTAccessVisibility access; private NamedOffsets offsets = new NamedOffsets(); private final ClassNameType classNameType; @@ -230,5 +231,19 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl public int getNameLineNumber() { return offsets.getNameLineNumber(); } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getFriends() + */ + public Iterator getFriends() { + return friends.iterator(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.internal.core.parser.ast.quick.IASTQClassSpecifier#addFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) + */ + public void addFriendDeclaration(IASTDeclaration decl) { + friends.add( decl ); + + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java index e0e7cd1c73d..20fe5793224 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java @@ -188,7 +188,11 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction { try { - requestor.acceptFunctionDeclaration(this); + if( isFriend() ) + requestor.acceptFriendDeclaration(this); + else + requestor.acceptFunctionDeclaration(this); + } catch (Exception e) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java index 23d9406beda..9de47182cb9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java @@ -171,7 +171,10 @@ public class ASTMethod extends ASTFunction implements IASTMethod { try { - requestor.acceptMethodDeclaration( this ); + if( isFriend() ) + requestor.acceptFriendDeclaration(this); + else + requestor.acceptMethodDeclaration( this ); } catch (Exception e) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/IASTQClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/IASTQClassSpecifier.java index 0d28deb31e8..0b330ec581c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/IASTQClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/IASTQClassSpecifier.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; +import org.eclipse.cdt.core.parser.ast.IASTDeclaration; /** * @author jcamelon @@ -20,4 +21,6 @@ import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; public interface IASTQClassSpecifier extends IASTClassSpecifier { public void addBaseClass( IASTBaseSpecifier baseSpecifier ); + + public void addFriendDeclaration( IASTDeclaration decl ); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java index 6bbdd68d220..29bc5d91a2f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java @@ -218,7 +218,11 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory */ public IASTFunction createFunction(IASTScope scope, ITokenDuple name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) { - return new ASTFunction(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVariableArguments, nameLine ); + ASTFunction function = new ASTFunction(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVariableArguments, nameLine ); + if( isFriend && scope instanceof IASTQClassSpecifier ){ + ((IASTQClassSpecifier)scope).addFriendDeclaration( function ); + } + return function; } /* (non-Javadoc) @@ -226,7 +230,11 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory */ public IASTMethod createMethod(IASTScope scope, ITokenDuple name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) { - return new ASTMethod(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, isConst, isVolatile, false, false, isVirtual, isExplicit, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, hasVariableArguments); + ASTMethod method = new ASTMethod(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, isConst, isVolatile, false, false, isVirtual, isExplicit, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, hasVariableArguments); + if( isFriend && scope instanceof IASTQClassSpecifier ){ + ((IASTQClassSpecifier)scope).addFriendDeclaration( method ); + } + return method; } /* (non-Javadoc) @@ -288,9 +296,13 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List) */ - public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine) + public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend) { - return new ASTAbstractTypeSpecifierDeclaration( scope, typeSpecifier, template, startingOffset, endingOffset, startingLine, endingLine ); + ASTAbstractTypeSpecifierDeclaration abs = new ASTAbstractTypeSpecifierDeclaration( scope, typeSpecifier, template, startingOffset, endingOffset, startingLine, endingLine, isFriend ); + if( isFriend && scope instanceof IASTQClassSpecifier ){ + ((IASTQClassSpecifier)scope).addFriendDeclaration( abs ); + } + return abs; } public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, ITokenDuple typeName, int startingOffset, int startingLine, int endOffset, int endingLine, boolean isForewardDecl, boolean isFriend) diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java index bb81e6fdefd..f197fc8d0fb 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java @@ -47,6 +47,7 @@ import org.eclipse.cdt.core.parser.ast.IASTClassReference; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTCodeScope; import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; +import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; @@ -591,13 +592,22 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants private IASTScope currentScope = null; private LinkedList scopeStack = new LinkedList(); - /* (non-Javadoc) + + /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier) */ public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType){ check( DECLARATIONS, elaboratedType ); } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) + */ + public void acceptFriendDeclaration(IASTDeclaration declaration) { + // TODO Auto-generated method stub + + } + public static void verbose(String log) { System.out.println("(" + Thread.currentThread() + ") " + log); //$NON-NLS-1$ //$NON-NLS-2$ } diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index f86db39e55b..bebda9c7aa5 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,6 @@ +2004-04-14 Andrew Niefer + updated src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter with acceptFriendDeclaration + 2004-04-14 Alain Magloire Fix PR 58375 diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter.java index bbae0a5a32a..6d4406fb417 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter.java @@ -25,6 +25,7 @@ import org.eclipse.cdt.core.parser.ast.IASTClassReference; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTCodeScope; import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; +import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; @@ -358,4 +359,12 @@ public class SourceElementRequestorAdapter implements ISourceElementRequestor { // TODO Auto-generated method stub return false; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) + */ + public void acceptFriendDeclaration(IASTDeclaration declaration) { + // TODO Auto-generated method stub + + } }