--- ./results/plugins/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerInfoPlus.java.fix 2006-08-29 14:28:17.000000000 -0400 +++ ./results/plugins/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerInfoPlus.java 2006-08-29 14:28:54.000000000 -0400 @@ -0,0 +1,16 @@ +package org.eclipse.cdt.core.parser; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; + +public interface IScannerInfoPlus extends IScannerInfo { + + /** + * Map an open include file as being included by a specific resource. + * + * @param include the include file + * @param res the resource that included the include file + */ + public void createIncludeChain(IFile include, IResource res); + +} --- ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/OpenIncludeAction.java.fix 2006-08-29 14:32:46.000000000 -0400 +++ ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/OpenIncludeAction.java 2006-08-29 14:33:19.000000000 -0400 @@ -24,6 +24,7 @@ import org.eclipse.cdt.core.model.ICElem import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.parser.IScannerInfo; +import org.eclipse.cdt.core.parser.IScannerInfoPlus; import org.eclipse.cdt.core.parser.IScannerInfoProvider; import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.internal.ui.dialogs.ElementListSelectionDialog; @@ -37,8 +38,10 @@ import org.eclipse.core.resources.IResou import org.eclipse.core.resources.IResourceProxyVisitor; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.QualifiedName; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ISelection; @@ -79,17 +82,16 @@ public class OpenIncludeAction extends A if (include == null) { return; } - try { IResource res = include.getUnderlyingResource(); + IScannerInfo info = null; ArrayList filesFound = new ArrayList(4); if (res != null) { IProject proj = res.getProject(); String includeName = include.getElementName(); - // Search in the scannerInfo information - IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(proj); + IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(proj); if (provider != null) { - IScannerInfo info = provider.getScannerInformation(res); + info = provider.getScannerInformation(res); // XXXX this should fall back to project by itself if (info == null) { info = provider.getScannerInformation(proj); @@ -110,7 +112,7 @@ public class OpenIncludeAction extends A if (nElementsFound == 0) { noElementsFound(); fileToOpen= null; - } else if (nElementsFound == 1) { + } else if (nElementsFound == 1 || info instanceof IScannerInfoPlus) { fileToOpen= (IPath) filesFound.get(0); } else { fileToOpen= chooseFile(filesFound); @@ -119,6 +121,11 @@ public class OpenIncludeAction extends A if (fileToOpen != null) { IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(fileToOpen); if (file != null) { + // If dealing with an IScannerInfoPlus, we want to register + // the resource with the include file it includes. + if (info instanceof IScannerInfoPlus) { + ((IScannerInfoPlus)info).createIncludeChain(file, res); + } EditorUtility.openInEditor(file); } else { ICProject cproject = include.getCProject();