From bc335d2fb816b55de3473be4bc1a816a4fafcb97 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Tue, 5 Feb 2008 14:38:49 +0000 Subject: Fix for 217860: toggle source/header switches to wrong source file --- .../ui/editor/ToggleSourceAndHeaderAction.java | 35 +++++++++++++++------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ToggleSourceAndHeaderAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ToggleSourceAndHeaderAction.java index be517f4ea53..e753f7da3fb 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ToggleSourceAndHeaderAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ToggleSourceAndHeaderAction.java @@ -257,18 +257,31 @@ public class ToggleSourceAndHeaderAction extends TextEditorAction { } } - IProgressMonitor monitor= new NullProgressMonitor(); - PartnerFileComputer computer= new PartnerFileComputer(); - ASTProvider.getASTProvider().runOnAST(tUnit, ASTProvider.WAIT_ACTIVE_ONLY, monitor, computer); - IPath partnerFileLoation= computer.getPartnerFileLocation(); - if (partnerFileLoation != null) { - ITranslationUnit partnerUnit= (ITranslationUnit) CoreModel.getDefault().create(partnerFileLoation); - if (partnerUnit == null) { - partnerUnit= CoreModel.getDefault().createTranslationUnitFrom(tUnit.getCProject(), partnerFileLoation); + // search partner file based on filename/extension + ITranslationUnit partnerUnit= getPartnerFileFromFilename(tUnit); + + if (partnerUnit == null) { + // search partner file based on definition/declaration association + IProgressMonitor monitor= new NullProgressMonitor(); + PartnerFileComputer computer= new PartnerFileComputer(); + ASTProvider.getASTProvider().runOnAST(tUnit, ASTProvider.WAIT_ACTIVE_ONLY, monitor, computer); + IPath partnerFileLoation= computer.getPartnerFileLocation(); + if (partnerFileLoation != null) { + partnerUnit= (ITranslationUnit) CoreModel.getDefault().create(partnerFileLoation); + if (partnerUnit == null) { + partnerUnit= CoreModel.getDefault().createTranslationUnitFrom(tUnit.getCProject(), partnerFileLoation); + } } - return partnerUnit; } - // search partnerfile based on filename/extension + return partnerUnit; + } + + /** + * Find a partner translation unit based on filename/extension matching. + * + * @param a partner translation unit or null + */ + private ITranslationUnit getPartnerFileFromFilename(ITranslationUnit tUnit) { IPath sourceFileLocation= tUnit.getLocation(); if (sourceFileLocation == null) { return null; @@ -300,7 +313,7 @@ public class ToggleSourceAndHeaderAction extends TextEditorAction { } // external tanslation unit - try in same directory if (tUnit.getResource() == null) { - partnerFileLoation= partnerBasePath.removeLastSegments(1).append(partnerFileBasename); + IPath partnerFileLoation= partnerBasePath.removeLastSegments(1).append(partnerFileBasename); ITranslationUnit partnerUnit= CoreModel.getDefault().createTranslationUnitFrom(tUnit.getCProject(), partnerFileLoation); if (partnerUnit != null) { return partnerUnit; -- cgit v1.2.3