diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/includes/IncludeOrganizerTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/includes/IncludeOrganizerTest.java index 60f456fc59e..b01bf4c5304 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/includes/IncludeOrganizerTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/includes/IncludeOrganizerTest.java @@ -299,6 +299,26 @@ public class IncludeOrganizerTest extends IncludesTestBase { assertExpectedResults(); } + //f.h + //void f(int p); + + //f.cpp + //#include "f.h" + //void f(int p) { + //} + //==================== + //#include "f.h" + // + //void f(int p) { + //} + public void testExistingPartnerIncludeIsNotRemoved() throws Exception { + IPreferenceStore preferenceStore = getPreferenceStore(); + preferenceStore.setValue(PreferenceConstants.INCLUDES_UNUSED_STATEMENTS_DISPOSITION, + UnusedStatementDisposition.REMOVE.toString()); + preferenceStore.setValue(PreferenceConstants.FORWARD_DECLARE_FUNCTIONS, true); + assertExpectedResults(); + } + //h1.h //class A {}; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/includes/IncludeOrganizer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/includes/IncludeOrganizer.java index 3e9879201f0..b2dd84b589a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/includes/IncludeOrganizer.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/includes/IncludeOrganizer.java @@ -264,7 +264,8 @@ public class IncludeOrganizer { prototypes.add(prototype); } if (!allowReordering && prototype.getExistingInclude() != null - && !prototype.isRequired() && prototype.getHeader() != null // Unused and resolved. + && !prototype.isRequired() && prototype.getHeader() != null // Unused and resolved. + && !fContext.isPartnerFile(prototype.getHeader()) && isContainedInRegion(prototype.getExistingInclude(), includeReplacementRegion)) { switch (preferences.unusedStatementsDisposition) { case REMOVE: @@ -1082,8 +1083,9 @@ public class IncludeOrganizer { private String createIncludeDirective(IncludePrototype include, String lineComment) { StringBuilder buf = new StringBuilder(); - // Unresolved includes are preserved out of caution. - if (!include.isRequired() && include.getHeader() != null) { + // Unresolved includes are preserved out of caution. Partner include is always preserved. + if (!include.isRequired() && include.getHeader() != null + && !fContext.isPartnerFile(include.getHeader())) { switch (fContext.getPreferences().unusedStatementsDisposition) { case REMOVE: return null;