From bd655c6a8a06f1de638266ac2d980b27c1ffe118 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Sat, 14 Aug 2010 05:36:25 +0000 Subject: [PATCH] bug 322695: Can't access preferences of any unrelated CDT project having "bad" project in workspace --- .../managedbuilder/internal/ui/Messages.java | 2 + .../internal/ui/Messages.properties | 2 + .../ui/properties/ToolChainEditTab.java | 67 ++++++++++++------- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.java index 3261246c13b..0c2734a774a 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.java @@ -240,6 +240,8 @@ public class Messages extends NLS { public static String ToolChainEditTab_7; public static String ToolChainEditTab_8; public static String ToolChainEditTab_9; + public static String ToolChainEditTab_OrphanedBuilder; + public static String ToolChainEditTab_OrphanedToolchain; public static String ToolSelectionDialog_0; public static String ToolSelectionDialog_1; public static String ToolSelectionDialog_10; diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.properties b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.properties index dc5a1de3c07..484e2341bb3 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.properties +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.properties @@ -99,6 +99,8 @@ ToolChainEditTab_6=-- NO TOOL -- ToolChainEditTab_7=incompatibility with ToolChainEditTab_8=source extension conflict with ToolChainEditTab_9=toolchain +ToolChainEditTab_OrphanedBuilder=Orphaned builder: ID={0}, name={1} +ToolChainEditTab_OrphanedToolchain=Orphaned toolchain: ID={0}, name={1} NewVarDialog_0=Variable name: NewVarDialog_1=Apply to all configurations NewCfgDialog_0=Existing configuration diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolChainEditTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolChainEditTab.java index 92a9ab2d14c..d7477630abe 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolChainEditTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolChainEditTab.java @@ -40,6 +40,7 @@ import org.eclipse.cdt.managedbuilder.tcmodification.IToolListModification; import org.eclipse.cdt.managedbuilder.tcmodification.IToolModification; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; +import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; @@ -204,7 +205,13 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { private void showErrorMessage() { if (ri instanceof IFolderInfo) { IFolderInfoModification foim = (IFolderInfoModification)mod; - if (foim.isToolChainCompatible()) { + IToolChain toolChain = ((IFolderInfoModification)mod).getToolChain(); + IToolChain realToolChain = ManagedBuildManager.getRealToolChain(toolChain); + if (realToolChain==null) { + // The toolchain is not derived from extension + String errText = NLS.bind(Messages.ToolChainEditTab_OrphanedToolchain, toolChain.getId(), toolChain.getName()); + st_toolchain.setText(errText); + } else if (foim.isToolChainCompatible()) { st_toolchain.setText(EMPTY_STR); } else { String s = foim.getToolChainCompatibilityStatus().getMessage(); @@ -214,10 +221,18 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { if (foim instanceof IConfigurationModification) { IConfigurationModification cm = (IConfigurationModification)foim; if (!cm.isBuilderCompatible()) { - CompatibilityStatus cs = cm.getBuilderCompatibilityStatus(); - if (cs != null) { - String s = cs.getMessage(); - st_builder.setText(s); + IBuilder builder = cfg.getBuilder(); + IBuilder realBuilder = ManagedBuildManager.getRealBuilder(builder); + if (realBuilder==null) { + // The builder is not derived from extension + String errText = NLS.bind(Messages.ToolChainEditTab_OrphanedBuilder, builder.getId(), builder.getName()); + st_builder.setText(errText); + } else { + CompatibilityStatus cs = cm.getBuilderCompatibilityStatus(); + if (cs != null) { + String s = cs.getMessage(); + st_builder.setText(s); + } } } } @@ -228,9 +243,13 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { } private void fillToolChainCombo() { - IToolChain tc = null; - if (ri instanceof IFolderInfo) - tc = ManagedBuildManager.getRealToolChain(((IFolderInfoModification)mod).getToolChain()); + IToolChain realToolChain = null; + if (ri instanceof IFolderInfo) { + IToolChain toolChainInstance = ((IFolderInfoModification)mod).getToolChain(); + realToolChain = ManagedBuildManager.getRealToolChain(toolChainInstance); + if (realToolChain==null) + realToolChain = toolChainInstance; + } c_toolchain.removeAll(); boolean isMng = cfg.getBuilder().isManagedBuildOn(); @@ -242,16 +261,15 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { tcs = fim.getCompatibleToolChains(); IToolChain[] tcs1 = new IToolChain[tcs.length + 1]; System.arraycopy(tcs, 0, tcs1, 0, tcs.length); - tcs1[tcs.length] = tc; // add existing toolchain + tcs1[tcs.length] = realToolChain; // add existing toolchain tcs = tcs1; } - for (int i=0; i list = new ArrayList(); @@ -283,14 +303,15 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { if (b_dispCompatible.getSelection() && (ri instanceof IFolderInfo)) { IFolderInfoModification fim = (IFolderInfoModification)mod; if (fim instanceof IConfigurationModification) { - IBuilder[] bs1 = ((IConfigurationModification)fim).getCompatibleBuilders(); - bs = new IBuilder[bs1.length + 1]; - System.arraycopy(bs1, 0, bs, 0, bs1.length); - bs[bs1.length] = b; + bs = ((IConfigurationModification)fim).getCompatibleBuilders(); + IBuilder[] bs1 = new IBuilder[bs.length + 1]; + System.arraycopy(bs, 0, bs1, 0, bs.length); + bs1[bs.length] = realBuilder; + bs = bs1; } } for (int i=0; i