diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SelectionToDeclarationJob.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SelectionToDeclarationJob.java index fc4abb4b058..3077abad0c8 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SelectionToDeclarationJob.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SelectionToDeclarationJob.java @@ -57,6 +57,7 @@ import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IFunctionDeclaration; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.ui.CUIPlugin; @@ -416,8 +417,10 @@ public class SelectionToDeclarationJob extends Job implements ASTRunnable { IASTName astName = (IASTName) declName; IBinding binding = astName.resolveBinding(); if (binding != null) { - ITranslationUnit tu = IndexUI.getTranslationUnit(project, astName); + ITranslationUnit tu = IndexUI.getTranslationUnit(astName); if (tu != null) { + if (tu instanceof IWorkingCopy) + tu = ((IWorkingCopy) tu).getOriginalElement(); IASTFileLocation loc = astName.getFileLocation(); IRegion region = new Region(loc.getNodeOffset(), loc.getNodeLength()); return CElementHandleFactory.create(tu, binding, astName.isDefinition(), region, 0); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsJob.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsJob.java index 741fd571a91..326d577d1b0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsJob.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsJob.java @@ -84,6 +84,7 @@ import org.eclipse.cdt.core.model.ISourceRange; import org.eclipse.cdt.core.model.ISourceReference; import org.eclipse.cdt.core.model.IStructureDeclaration; import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.CharArrayUtils; import org.eclipse.cdt.ui.CUIPlugin; @@ -501,8 +502,10 @@ class OpenDeclarationsJob extends Job implements ASTRunnable { IASTName astName = (IASTName) declName; IBinding binding= astName.resolveBinding(); if (binding != null) { - ITranslationUnit tu= IndexUI.getTranslationUnit(project, astName); + ITranslationUnit tu= IndexUI.getTranslationUnit(astName); if (tu != null) { + if (tu instanceof IWorkingCopy) + tu = ((IWorkingCopy) tu).getOriginalElement(); IASTFileLocation loc= astName.getFileLocation(); IRegion region= new Region(loc.getNodeOffset(), loc.getNodeLength()); return CElementHandleFactory.create(tu, binding, astName.isDefinition(), region, 0); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/IndexUI.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/IndexUI.java index 7e9d75f44be..8339e414667 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/IndexUI.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/IndexUI.java @@ -316,8 +316,10 @@ public class IndexUI { assert !declName.isReference(); IBinding binding= declName.resolveBinding(); if (binding != null) { - ITranslationUnit tu= getTranslationUnit(preferProject, declName); + ITranslationUnit tu= getTranslationUnit(declName); if (tu != null) { + if (tu instanceof IWorkingCopy) + tu = ((IWorkingCopy) tu).getOriginalElement(); IFile file= (IFile) tu.getResource(); long timestamp= file != null ? file.getLocalTimeStamp() : 0; IASTFileLocation loc= declName.getFileLocation(); @@ -332,8 +334,9 @@ public class IndexUI { return null; } - public static ITranslationUnit getTranslationUnit(ICProject cproject, IASTName name) { - return getTranslationUnit(cproject, name.getFileLocation()); + public static ITranslationUnit getTranslationUnit(IASTName name) { + IASTTranslationUnit astTranslationUnit = name.getTranslationUnit(); + return astTranslationUnit == null ? null : astTranslationUnit.getOriginatingTranslationUnit(); } public static ITranslationUnit getTranslationUnit(ICProject cproject, IIndexName name) {