diff options
author | Marc-Andre Laperle | 2020-10-10 02:20:29 +0000 |
---|---|---|
committer | Marc-André Laperle | 2020-10-12 16:15:43 +0000 |
commit | bc76b0a7c3bfa9dbd80a2a9b07c6c8577a199a04 (patch) | |
tree | cead18974a99f549869b637b17224d3e903aa6aa /core/org.eclipse.cdt.ui.tests | |
parent | 3a6fd58665391c4a571b250624005c99d504ccdd (diff) | |
download | org.eclipse.cdt-bc76b0a7c3bfa9dbd80a2a9b07c6c8577a199a04.tar.gz org.eclipse.cdt-bc76b0a7c3bfa9dbd80a2a9b07c6c8577a199a04.tar.xz org.eclipse.cdt-bc76b0a7c3bfa9dbd80a2a9b07c6c8577a199a04.zip |
Bug 567778 - [Include Browser] Cannot open the Include Browser on file outside source folder
CoreModelUtil.findTranslationUnit only returns CElement in the populated
CModel of a project. This shouldn't change as a large majority of client
code need to see the model this way and not consider files that are
outside source folders. So for a file not under a source folder (and
therefore not in the CModel), we can just create a new translation unit
instance for it. This is actually how the editor deals with it too.
Change-Id: I8898822e94cac8562edcc0a726fdd8680119faca
Signed-off-by: Marc-Andre Laperle <malaperle@gmail.com>
Diffstat (limited to 'core/org.eclipse.cdt.ui.tests')
2 files changed, 44 insertions, 4 deletions
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/BasicIncludeBrowserTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/BasicIncludeBrowserTest.java index 231a76af2db..f21ca23eaf7 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/BasicIncludeBrowserTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/BasicIncludeBrowserTest.java @@ -16,7 +16,10 @@ package org.eclipse.cdt.ui.tests.includebrowser; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICContainer; import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.core.testplugin.TestScannerProvider; import org.eclipse.core.resources.IFile; @@ -104,4 +107,39 @@ public class BasicIncludeBrowserTest extends IncludeBrowserBaseTest { CProjectHelper.delete(op); } } + + // // source + // #include "user.h" + public void testInclusionOutsideSourceFolder() throws Exception { + ICProject cproject = CProjectHelper.createCCProject("__ibTest_outside_src__", "bin", + IPDOMManager.ID_FAST_INDEXER); + try { + ICContainer srcFolder = CProjectHelper.addCContainer(cproject, "src"); + IPathEntry newEntry = CoreModel.newSourceEntry(srcFolder.getPath()); + + IPathEntry[] entries = new IPathEntry[] { CoreModel.newSourceEntry(srcFolder.getPath()) }; + cproject.setRawPathEntries(entries, null); + + StringBuilder[] contents = getContentsForTest(1); + IProject project = cproject.getProject(); + IFile user = createFile(project, "user.h", ""); + IFile source = createFile(srcFolder.getResource(), "source.cpp", contents[0].toString()); + CCorePlugin.getIndexManager().reindex(cproject); + waitForIndexer(cproject); + + openIncludeBrowser(source); + Tree tree = getIBTree(); + TreeItem node = checkTreeNode(tree, 0, "source.cpp"); + checkTreeNode(tree, 0, 0, "user.h"); + assertEquals(1, node.getItemCount()); + + // The tree has to be reversed + openIncludeBrowser(user, true); + checkTreeNode(tree, 0, "user.h"); + checkTreeNode(tree, 0, 0, "source.cpp"); + + } finally { + CProjectHelper.delete(cproject); + } + } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserBaseTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserBaseTest.java index 62594194730..e8a7dc243e0 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserBaseTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserBaseTest.java @@ -13,13 +13,15 @@ *******************************************************************************/ package org.eclipse.cdt.ui.tests.includebrowser; +import java.util.Optional; + import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.index.IIndex; -import org.eclipse.cdt.core.model.CoreModelUtil; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.internal.ui.includebrowser.IBConversions; import org.eclipse.cdt.internal.ui.includebrowser.IBViewPart; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.tests.BaseUITestCase; @@ -77,13 +79,13 @@ public abstract class IncludeBrowserBaseTest extends BaseUITestCase { } private IBViewPart doOpenIncludeBrowser(IFile file) throws PartInitException { - ITranslationUnit tu = CoreModelUtil.findTranslationUnit(file); - if (tu == null) { + Optional<ITranslationUnit> tu = IBConversions.fileToTU(file); + if (tu.isEmpty()) { fail(file.getFullPath().toString() + " is no translation unit!"); } IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IBViewPart result = (IBViewPart) page.showView(CUIPlugin.ID_INCLUDE_BROWSER); - result.setInput(tu); + result.setInput(tu.get()); return result; } |