From fdd018365cdb43e9e5a4aa5967960ea71e663c3d Mon Sep 17 00:00:00 2001 From: William Riley Date: Wed, 14 Feb 2018 09:18:08 +0000 Subject: [PATCH] Bug 531131 - Consider superclass value to avoid unnecessary changes Consider the superclass value when setting pre & post build steps, error parsers, tool commands & tool command line patterns to avoid changing the .cproject file unnecessary Change-Id: Ida323982fe5bce7b0dd9b70eb23a6ee778be5403 Signed-off-by: William Riley --- .../internal/core/Configuration.java | 44 +++++++++---------- .../managedbuilder/internal/core/Tool.java | 24 +++++----- .../internal/core/ToolChain.java | 21 ++++----- 3 files changed, 47 insertions(+), 42 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java index 03f14a6256c..6b23ace7edf 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java @@ -1545,8 +1545,9 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild @Override public void setPrebuildStep(String step) { + String currentPrebuildStep = getPrebuildStep(); if (step == null && prebuildStep == null) return; - if (prebuildStep == null || step == null || !prebuildStep.equals(step)) { + if (currentPrebuildStep == null || step == null || !currentPrebuildStep.equals(step)) { prebuildStep = step; // rebuildNeeded = true; isDirty = true; @@ -1556,8 +1557,9 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild @Override public void setPostbuildStep(String step) { + String currentPostbuildStep = getPostbuildStep(); if (step == null && postbuildStep == null) return; - if (postbuildStep == null || step == null || !postbuildStep.equals(step)) { + if (currentPostbuildStep == null || step == null || !currentPostbuildStep.equals(step)) { postbuildStep = step; // rebuildNeeded = true; isDirty = true; @@ -1566,8 +1568,9 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild @Override public void setPreannouncebuildStep(String announceStep) { + String currentPreannouncebuildStep = getPreannouncebuildStep(); if (announceStep == null && preannouncebuildStep == null) return; - if (preannouncebuildStep == null || announceStep == null || !preannouncebuildStep.equals(announceStep)) { + if (currentPreannouncebuildStep == null || announceStep == null || !currentPreannouncebuildStep.equals(announceStep)) { preannouncebuildStep = announceStep; // rebuildNeeded = true; isDirty = true; @@ -1576,8 +1579,9 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild @Override public void setPostannouncebuildStep(String announceStep) { + String currentAnnounceStep = getPostannouncebuildStep(); if (announceStep == null && postannouncebuildStep == null) return; - if (postannouncebuildStep == null || announceStep == null || !postannouncebuildStep.equals(announceStep)) { + if (currentAnnounceStep == null || announceStep == null || !currentAnnounceStep.equals(announceStep)) { postannouncebuildStep = announceStep; // rebuildNeeded = true; isDirty = true; @@ -2307,16 +2311,16 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild public void setErrorParserAttribute(String[] ids) { if(ids == null){ - errorParserIds = null; + setErrorParserIds(null); } else if(ids.length == 0){ - errorParserIds = EMPTY_STRING; + setErrorParserIds(EMPTY_STRING); } else { StringBuilder buf = new StringBuilder(); buf.append(ids[0]); for(int i = 1; i < ids.length; i++){ buf.append(";").append(ids[i]); //$NON-NLS-1$ } - errorParserIds = buf.toString(); + setErrorParserIds(buf.toString()); } } @@ -2326,12 +2330,6 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild //reset resetErrorParsers(); } else { - resetErrorParsers(); - Set oldSet = contributeErrorParsers(null, true); - if(oldSet != null) { - oldSet.removeAll(Arrays.asList(ids)); - removeErrorParsers(oldSet); - } setErrorParserAttribute(ids); } } @@ -2346,17 +2344,19 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild } void removeErrorParsers(Set set){ - Set oldSet = contributeErrorParsers(null, false); - if(oldSet == null) - oldSet = new LinkedHashSet(); + if (set != null && set.isEmpty()) { + Set oldSet = contributeErrorParsers(null, false); + if (oldSet == null) + oldSet = new LinkedHashSet(); - oldSet.removeAll(set); - setErrorParserAttribute(oldSet.toArray(new String[oldSet.size()])); + oldSet.removeAll(set); + setErrorParserAttribute(oldSet.toArray(new String[oldSet.size()])); - IResourceInfo rcInfos[] = getResourceInfos(); - for(int i = 0; i < rcInfos.length; i++){ - ResourceInfo rcInfo = (ResourceInfo)rcInfos[i]; - rcInfo.removeErrorParsers(set); + IResourceInfo rcInfos[] = getResourceInfos(); + for (int i = 0; i < rcInfos.length; i++) { + ResourceInfo rcInfo = (ResourceInfo) rcInfos[i]; + rcInfo.removeErrorParsers(set); + } } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java index 92f5e97c252..d1cce5a2e39 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java @@ -2438,8 +2438,9 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch */ @Override public boolean setToolCommand(String cmd) { + String currentCommand = getToolCommand(); if (cmd == null && command == null) return false; - if (cmd == null || command == null || !cmd.equals(command)) { + if (cmd == null || currentCommand == null || !cmd.equals(currentCommand)) { command = cmd; isDirty = true; setRebuildState(true); @@ -2454,8 +2455,9 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch */ @Override public void setCommandLinePattern(String pattern) { + String currentPattern = getCommandLinePattern(); if (pattern == null && commandLinePattern == null) return; - if (pattern == null || commandLinePattern == null || !pattern.equals(commandLinePattern)) { + if (pattern == null || currentPattern == null || !pattern.equals(currentPattern)) { commandLinePattern = pattern; setRebuildState(true); isDirty = true; @@ -3889,26 +3891,28 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch } void removeErrorParsers(Set set){ - Set oldSet = contributeErrorParsers(null); - if(oldSet == null) - oldSet = new HashSet(); + if(set != null && !set.isEmpty()) { + Set oldSet = contributeErrorParsers(null); + if(oldSet == null) + oldSet = new HashSet(); - oldSet.removeAll(set); - setErrorParserList(oldSet.toArray(new String[oldSet.size()])); + oldSet.removeAll(set); + setErrorParserList(oldSet.toArray(new String[oldSet.size()])); + } } public void setErrorParserList(String[] ids) { if(ids == null){ - errorParserIds = null; + setErrorParserIds(null); } else if(ids.length == 0){ - errorParserIds = EMPTY_STRING; + setErrorParserIds(EMPTY_STRING); } else { StringBuilder buf = new StringBuilder(); buf.append(ids[0]); for(int i = 1; i < ids.length; i++){ buf.append(";").append(ids[i]); //$NON-NLS-1$ } - errorParserIds = buf.toString(); + setErrorParserIds(buf.toString()); } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java index 08ddaba9c67..4f514cc1382 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java @@ -2478,19 +2478,20 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv } void removeErrorParsers(FolderInfo info, Set set){ - Set oldSet = contributeErrorParsers(info, null, false); - if(oldSet == null) - oldSet = new HashSet(); + if (set != null && !set.isEmpty()) { + Set oldSet = contributeErrorParsers(info, null, false); + if (oldSet == null) + oldSet = new HashSet(); - oldSet.removeAll(set); - setErrorParserList(oldSet.toArray(new String[oldSet.size()])); + oldSet.removeAll(set); + setErrorParserList(oldSet.toArray(new String[oldSet.size()])); - info.removeErrorParsers(info.getFilteredTools(), set); + info.removeErrorParsers(info.getFilteredTools(), set); - - if(info.isRoot()){ - Builder builder = (Builder)info.getParent().getEditableBuilder(); - builder.removeErrorParsers(set); + if (info.isRoot()) { + Builder builder = (Builder) info.getParent().getEditableBuilder(); + builder.removeErrorParsers(set); + } } }