mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-06 17:26:01 +02:00
Bug 491343 - Find references with only polymorphic results
This commit also adds infrastructure for testing 'Find References'. Change-Id: Ibe33dd00dd178587b202a9ebb1dd29315711f6fb
This commit is contained in:
parent
b4ffef7cbb
commit
e31d51988d
5 changed files with 140 additions and 38 deletions
|
@ -35,55 +35,25 @@ import org.eclipse.search.ui.ISearchResult;
|
|||
import org.eclipse.search.ui.ISearchResultPage;
|
||||
import org.eclipse.search.ui.ISearchResultViewPart;
|
||||
import org.eclipse.search.ui.NewSearchUI;
|
||||
import org.osgi.framework.Bundle;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.IPDOMManager;
|
||||
import org.eclipse.cdt.core.index.IIndexManager;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.core.testplugin.TestScannerProvider;
|
||||
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
|
||||
import org.eclipse.cdt.ui.testplugin.CTestPlugin;
|
||||
import org.eclipse.cdt.ui.tests.BaseUITestCase;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchPatternQuery;
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchQuery;
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchResult;
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchViewPage;
|
||||
|
||||
public class BasicSearchTest extends BaseUITestCase {
|
||||
ICProject fCProject;
|
||||
CharSequence[] testData;
|
||||
public class BasicSearchTest extends SearchTestBase {
|
||||
|
||||
public static TestSuite suite() {
|
||||
return suite(BasicSearchTest.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
fCProject = CProjectHelper.createCCProject(getName() + System.currentTimeMillis(), "bin", IPDOMManager.ID_NO_INDEXER);
|
||||
Bundle b = CTestPlugin.getDefault().getBundle();
|
||||
testData = TestSourceReader.getContentsForTest(b, "ui", this.getClass(), getName(), 2);
|
||||
assertEquals("Incomplete test data", 2, testData.length);
|
||||
|
||||
IFile file = TestSourceReader.createFile(fCProject.getProject(), new Path("header.h"), testData[0].toString());
|
||||
CCorePlugin.getIndexManager().setIndexerId(fCProject, IPDOMManager.ID_FAST_INDEXER);
|
||||
waitForIndexer(fCProject);
|
||||
|
||||
IFile cppfile= TestSourceReader.createFile(fCProject.getProject(), new Path("references.cpp"), testData[1].toString());
|
||||
waitForIndexer(fCProject);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
if (fCProject != null) {
|
||||
fCProject.getProject().delete(true, npm());
|
||||
}
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
// // empty
|
||||
|
||||
|
@ -307,12 +277,6 @@ public class BasicSearchTest extends BaseUITestCase {
|
|||
return new CSearchPatternQuery(new ICElement[] {fCProject}, scope1, pattern, true, CSearchQuery.FIND_ALL_OCCURRENCES | CSearchPatternQuery.FIND_ALL_TYPES);
|
||||
}
|
||||
|
||||
private void assertOccurrences(CSearchQuery query, int expected) {
|
||||
query.run(npm());
|
||||
CSearchResult result= (CSearchResult) query.getSearchResult();
|
||||
assertEquals(expected, result.getMatchCount());
|
||||
}
|
||||
|
||||
// void foo() {}
|
||||
|
||||
// void bar() {
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2016 Nathan Ridge.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.ui.tests.search;
|
||||
|
||||
import org.eclipse.jface.text.TextSelection;
|
||||
import org.eclipse.ui.IEditorPart;
|
||||
import org.eclipse.ui.IWorkbenchPage;
|
||||
import org.eclipse.ui.PartInitException;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
import org.eclipse.ui.part.FileEditorInput;
|
||||
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.ui.testplugin.EditorTestHelper;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchQuery;
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchTextSelectionQuery;
|
||||
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Test the "Find References" source navigation feature. The code implementing
|
||||
* this feature is org.eclipse.cdt.internal.ui.search.actions.FindRefsAction,
|
||||
* although this test operates one level lower, creating a
|
||||
* CSearchTextSelectionQuery directly.
|
||||
*/
|
||||
public class FindReferencesTest extends SearchTestBase {
|
||||
public static TestSuite suite() {
|
||||
return suite(FindReferencesTest.class);
|
||||
}
|
||||
|
||||
private CSearchQuery makeProjectQuery(int offset, int length) {
|
||||
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
|
||||
IEditorPart part = null;
|
||||
try {
|
||||
part = page.openEditor(new FileEditorInput(fHeaderFile), "org.eclipse.cdt.ui.editor.CEditor"); //$NON-NLS-1$
|
||||
} catch (PartInitException e) {
|
||||
assertFalse(true);
|
||||
}
|
||||
assertInstance(part, CEditor.class);
|
||||
CEditor editor = (CEditor) part;
|
||||
EditorTestHelper.joinReconciler(EditorTestHelper.getSourceViewer(editor), 100, 5000, 10);
|
||||
ITranslationUnit tu = editor.getInputCElement();
|
||||
return new CSearchTextSelectionQuery(new ICElement[] { fCProject }, tu, new TextSelection(offset, length),
|
||||
CSearchQuery.FIND_REFERENCES);
|
||||
}
|
||||
|
||||
// struct A {
|
||||
// virtual void waldo();
|
||||
// };
|
||||
//
|
||||
// struct B : public A {
|
||||
// virtual void waldo() override;
|
||||
// };
|
||||
//
|
||||
// int main() {
|
||||
// A* a = new B();
|
||||
// a->waldo();
|
||||
// }
|
||||
|
||||
// // empty file
|
||||
public void testOnlyPolymorphicMatches_bug491343() throws Exception {
|
||||
int offset = fHeaderContents.indexOf("waldo() override");
|
||||
CSearchQuery query = makeProjectQuery(offset, 5);
|
||||
assertOccurrences(query, 1);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2016 Nathan Ridge and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.ui.tests.search;
|
||||
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.osgi.framework.Bundle;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.IPDOMManager;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
|
||||
import org.eclipse.cdt.ui.testplugin.CTestPlugin;
|
||||
import org.eclipse.cdt.ui.tests.BaseUITestCase;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchQuery;
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchResult;
|
||||
|
||||
/**
|
||||
* Base class for tests that test functionality based on CSearchQuery.
|
||||
*/
|
||||
public abstract class SearchTestBase extends BaseUITestCase {
|
||||
ICProject fCProject;
|
||||
String fHeaderContents;
|
||||
IFile fHeaderFile;
|
||||
CharSequence[] testData;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
fCProject = CProjectHelper.createCCProject(getName() + System.currentTimeMillis(), "bin", IPDOMManager.ID_NO_INDEXER);
|
||||
Bundle b = CTestPlugin.getDefault().getBundle();
|
||||
testData = TestSourceReader.getContentsForTest(b, "ui", this.getClass(), getName(), 2);
|
||||
assertEquals("Incomplete test data", 2, testData.length);
|
||||
|
||||
fHeaderContents = testData[0].toString();
|
||||
fHeaderFile = TestSourceReader.createFile(fCProject.getProject(), new Path("header.h"), fHeaderContents);
|
||||
CCorePlugin.getIndexManager().setIndexerId(fCProject, IPDOMManager.ID_FAST_INDEXER);
|
||||
waitForIndexer(fCProject);
|
||||
|
||||
IFile cppfile= TestSourceReader.createFile(fCProject.getProject(), new Path("references.cpp"), testData[1].toString());
|
||||
waitForIndexer(fCProject);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
if (fCProject != null) {
|
||||
fCProject.getProject().delete(true, npm());
|
||||
}
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
protected void assertOccurrences(CSearchQuery query, int expected) {
|
||||
query.run(npm());
|
||||
CSearchResult result= (CSearchResult) query.getSearchResult();
|
||||
assertEquals(expected, result.getMatchCount());
|
||||
}
|
||||
}
|
|
@ -22,5 +22,6 @@ public class SearchTestSuite extends TestSuite {
|
|||
addTest(BasicSearchTest.suite());
|
||||
addTest(LinkedNamesFinderTest.suite());
|
||||
addTest(SearchReferencesAcrossLanguagesTest.suite());
|
||||
addTest(FindReferencesTest.suite());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -392,7 +392,7 @@ public abstract class CSearchQuery implements ISearchQuery {
|
|||
}
|
||||
}
|
||||
|
||||
if (!names.isEmpty()) {
|
||||
if (!(names.isEmpty() && (polymorphicNames == null || polymorphicNames.isEmpty()))) {
|
||||
collectNames(index, names, polymorphicNames);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue