diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexAll.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexAll.java index 52e56d6425c..8b750e34bda 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexAll.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexAll.java @@ -12,6 +12,8 @@ package org.eclipse.cdt.internal.core.index.ctagsindexer; import java.io.File; import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CommandLauncher; @@ -24,6 +26,7 @@ import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IIncludeReference; import org.eclipse.cdt.internal.core.index.IIndex; import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage; +import org.eclipse.cdt.internal.core.index.cindexstorage.Util; import org.eclipse.cdt.internal.core.index.domsourceindexer.AbstractIndexerRunner; import org.eclipse.cdt.internal.core.search.indexing.IndexManager; import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor; @@ -123,7 +126,8 @@ class CTagsIndexAll extends CTagsIndexRequest { } //Try to index includes (if any exist) - //cTagsInclude(index); + if (ctagIndexIncludes()) + cTagsInclude(index); } catch (IOException e) { if (IndexManager.VERBOSE) { @@ -146,20 +150,58 @@ class CTagsIndexAll extends CTagsIndexRequest { refs = cProj.getIncludeReferences(); } catch (CModelException e) {} + + //Find common base for references + String[] pathString = new String[refs.length]; for (int i=0; i 0) { + for (int i = 0; i < cext.length; i++) { + String id = cext[i].getID(); + String orig = cext[i].getExtensionData("ctagsindexincludes"); //$NON-NLS-1$ + if (orig != null){ + return new Boolean(orig).booleanValue(); + } + } + } + } catch (CoreException e) {} + + return false; + } + private boolean getCTagsFileLocation() { try { ICDescriptor cdesc = CCorePlugin.getDefault().getCProjectDescription(project, false); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CUIMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CUIMessages.properties index 344205d03e6..cc751c0905e 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CUIMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CUIMessages.properties @@ -71,6 +71,9 @@ CTagsIndexerBlock.radioButtonExternal=Import existing CTags file CTagsIndexerBlock.browseButton=Browse... CTagsIndexerBlock.fileBrowser=Select CTags File +CTagsIndexerBlock.includeGroup=Include Files +CTagsIndexerBlock.indexIncludes=Index include paths + StatusBarUpdater.num_elements_selected={0} items selected CElementLabels.anonymous=(anon) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/CTagsIndexerBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/CTagsIndexerBlock.java index 447ce713a2d..34a68669087 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/CTagsIndexerBlock.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/CTagsIndexerBlock.java @@ -43,14 +43,17 @@ public class CTagsIndexerBlock extends AbstractIndexerPage { protected boolean externalTagsFile = false; protected Button internalCTagsFile; protected Button externalCTagsFile; + protected Button indexIncludePaths; protected Button browseButton; protected Text cTagsFile; + private String storedInternalExternal; private String storedTagFile; public final static String PREF_INTOREXT_CTAGS = CUIPlugin.PLUGIN_ID + ".intorextctags"; //$NON-NLS-1$ public final static String PREF_CTAGSLOCATION_CTAGS = CUIPlugin.PLUGIN_ID + ".ctagslocation"; //$NON-NLS-1$ + public final static String PREF_CTAGS_INDEXINCLUDEFILES = CUIPlugin.PLUGIN_ID + ".ctagsindexincludes"; //$NON-NLS-1$ /* (non-Javadoc) * @see org.eclipse.cdt.ui.index.AbstractIndexerPage#initialize(org.eclipse.core.resources.IProject) @@ -75,7 +78,8 @@ public class CTagsIndexerBlock extends AbstractIndexerPage { IProject proj = null; String internalExternalCTagsString = internalTagsFile ? CTagsIndexer.CTAGS_INTERNAL : CTagsIndexer.CTAGS_EXTERNAL; String cTagsFileLocation = cTagsFile.getText(); - + String indexIncludeFiles = new Boolean(indexIncludePaths.getSelection()).toString(); + //if external has been chosen, ensure that there is a cTagsFileLocation selected; otherwise default //to internal file if (internalExternalCTagsString.equals(CTagsIndexer.CTAGS_EXTERNAL) && cTagsFileLocation.equals("")) //$NON-NLS-1$ @@ -102,12 +106,17 @@ public class CTagsIndexerBlock extends AbstractIndexerPage { if (orig == null || !orig.equals(cTagsFileLocation)) { cext[i].setExtensionData("ctagfilelocation", cTagsFileLocation); //$NON-NLS-1$ } + orig = cext[i].getExtensionData("ctagsindexincludes"); //$NON-NLS-1$ + if (orig == null || !orig.equals(cTagsFileLocation)) { + cext[i].setExtensionData("ctagsindexincludes", indexIncludeFiles); //$NON-NLS-1$ + } } } } else { if (prefStore != null) { prefStore.setValue(PREF_INTOREXT_CTAGS, internalExternalCTagsString); prefStore.setValue(PREF_CTAGSLOCATION_CTAGS,cTagsFileLocation); + prefStore.setValue(PREF_CTAGS_INDEXINCLUDEFILES,indexIncludeFiles); } } } @@ -128,6 +137,15 @@ public class CTagsIndexerBlock extends AbstractIndexerPage { public void createControl(Composite parent) { Composite page = ControlFactory.createComposite(parent, 1); + Group includeGroup = ControlFactory.createGroup(page,CUIMessages.getString("CTagsIndexerBlock.includeGroup"),1); + GridData gd2 = (GridData) includeGroup.getLayoutData(); + gd2.grabExcessHorizontalSpace = true; + gd2.horizontalAlignment = GridData.FILL; + + indexIncludePaths = ControlFactory.createCheckBox(includeGroup,CUIMessages.getString("CTagsIndexerBlock.indexIncludes"));//$NON-NLS-1$ //$NON-NLS-2$ + ((GridData)indexIncludePaths.getLayoutData()).horizontalSpan =1; + ((GridData)indexIncludePaths.getLayoutData()).grabExcessHorizontalSpace = true; + Group group = ControlFactory.createGroup(page, CUIMessages.getString("CTagsIndexerBlock.blockName"),3); //$NON-NLS-1$ GridData gd = (GridData) group.getLayoutData(); @@ -204,6 +222,14 @@ public class CTagsIndexerBlock extends AbstractIndexerPage { cTagsFile.setText(orig); } + orig = cext[i].getExtensionData("ctagsindexincludes"); //$NON-NLS-1$ + if (orig != null){ + if (new Boolean(orig).booleanValue()){ + indexIncludePaths.setSelection(true); + } else { + indexIncludePaths.setSelection(false); + } + } } }