1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Bug 356955: Lookup for overloaded operator.

This commit is contained in:
Markus Schorn 2011-09-08 15:22:45 +02:00
parent 7d0c06294a
commit 42eaf65363
4 changed files with 35 additions and 5 deletions

View file

@ -18,6 +18,7 @@ import junit.framework.TestSuite;
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTImplicitName;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.ICompositeType;
@ -1308,4 +1309,31 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas
IFunction f= getBindingFromASTName("fun", 0);
ITypedef t= getBindingFromASTName("Type", 0);
}
// struct base {
// virtual void operator+(base const &) { }
// virtual void operator-(base const &) { }
// };
// #include "header.h"
// struct inter : public base {
// virtual void operator+(base const &){}
// };
// struct sub : public inter {
// void doSomething() {
// base *left, *right;
//
// *left + *right;
// *left - *right;
// }
// };
public void test_Bug356982() throws Exception {
IASTName name= findName("+ ", 1);
assertTrue(name instanceof IASTImplicitName);
assertEquals("base", name.resolveBinding().getOwner().getName());
name= findName("- ", 1);
assertTrue(name instanceof IASTImplicitName);
assertEquals("base", name.resolveBinding().getOwner().getName());
}
}

View file

@ -53,6 +53,7 @@ public class IndexCompositeTests extends BaseTestCase {
private static final int NONE = 0, REFS = IIndexManager.ADD_DEPENDENCIES;
private static final int REFD = IIndexManager.ADD_DEPENDENT, BOTH = REFS | REFD;
private static final IndexFilter FILTER= new IndexFilter() {
@Override
public boolean acceptBinding(IBinding binding) throws CoreException {
if (binding instanceof ICPPMethod) {
return !((ICPPMethod) binding).isImplicit();
@ -419,6 +420,7 @@ public class IndexCompositeTests extends BaseTestCase {
index.acquireReadLock();
}
@Override
protected void tearDown() throws Exception {
if (index != null) {
index.releaseReadLock();
@ -451,7 +453,7 @@ class ProjectBuilder {
return this;
}
ICProject create() throws CoreException {
ICProject create() throws Exception {
ICProject result = cpp ?
CProjectHelper.createCCProject(name, "bin", IPDOMManager.ID_NO_INDEXER) :
CProjectHelper.createCCProject(name, "bin", IPDOMManager.ID_NO_INDEXER);
@ -466,7 +468,7 @@ class ProjectBuilder {
result.getProject().setDescription(desc, new NullProgressMonitor());
CCorePlugin.getIndexManager().setIndexerId(result, IPDOMManager.ID_FAST_INDEXER);
CCorePlugin.getIndexManager().joinIndexer(4000, new NullProgressMonitor());
BaseTestCase.waitForIndexer(result);
return result;
}
}

View file

@ -57,7 +57,7 @@ public class BaseTestCase extends TestCase {
super(name);
}
public NullProgressMonitor npm() {
public static NullProgressMonitor npm() {
return new NullProgressMonitor();
}
@ -284,7 +284,7 @@ public class BaseTestCase extends TestCase {
}
}
protected void waitForIndexer(ICProject project) throws InterruptedException {
public static void waitForIndexer(ICProject project) throws InterruptedException {
final PDOMManager indexManager = CCoreInternals.getPDOMManager();
assertTrue(indexManager.joinIndexer(10000, npm()));
long waitms= 1;

View file

@ -955,7 +955,7 @@ public class CPPSemantics {
return;
// Lookup in base classes
if (!data.usingDirectivesOnly && scope instanceof ICPPClassScope) {
if (!data.usingDirectivesOnly && scope instanceof ICPPClassScope && !data.ignoreMembers) {
BaseClassLookup.lookupInBaseClasses(data, (ICPPClassScope) scope, fileSet);
if (!data.contentAssist && data.hasResultOrProblem())
return;