From 7e9700c5a7a34d2b433d0aaaa1527c13abe51b3c Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Tue, 5 Feb 2008 14:38:33 +0000 Subject: [PATCH] Fix for 217860: toggle source/header switches to wrong source file --- .../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 60249b15b1f..40cce7e1083 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;