# HG changeset patch # User stechong # Date 1271877241 18000 # Node ID 7adc53ca384404a5ad365458b03fa745189aa521 # Parent 5995486b4beddc26025b553b221ffa8b0d53a9be Fix for Bug 10757 (Build is not started when "Use default incremental builder" option is set in preferences). diff -r 5995486b4bed -r 7adc53ca3844 builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java --- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java Tue Apr 20 13:33:46 2010 -0500 +++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java Wed Apr 21 14:14:01 2010 -0500 @@ -148,6 +148,7 @@ IProject currentProject = getProject(); ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager().getProjectInfo(currentProject); if (cpi != null) { + ICarbideBuildConfiguration defaultConfig = cpi.getDefaultConfiguration(); if (cpi.incrementalBuilderEnabled()) { // the callOnEmptyDelta builder attribute is set, so we get called // not matter what, even with an empty delta. this means that when the @@ -157,30 +158,29 @@ IResourceDelta delta = getDelta(currentProject); if (delta != null) { // something in the workspace has changed. see if a rebuild is needed. - if (!shouldRebuild(delta)) { - - // also rebuild if the project has errors - boolean hasErrors = false; - try { - for (IMarker currMarker : getProject().findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE)){ - if (currMarker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR) == IMarker.SEVERITY_ERROR){ - hasErrors = true; - break; + if (shouldRebuild(delta)) { + // set rebuild flag in build configs + shouldRebuildConfigs(cpi); + } else { + if (defaultConfig != null) { + // check current build config to see if rebuild is needed + CarbideBuildConfiguration config = (CarbideBuildConfiguration) defaultConfig; + if (!config.getRebuildNeeded()) { + // also rebuild if the project has errors + if (!projectHasErrors()) { + return null; } } - - } catch (CoreException e){ - e.printStackTrace(); - } - - if (!hasErrors) { - return null; + } else { + // also rebuild if the project has errors + if (!projectHasErrors()) { + return null; + } } } } } - ICarbideBuildConfiguration defaultConfig = cpi.getDefaultConfiguration(); if (defaultConfig != null) { CarbideCommandLauncher launcher = new CarbideCommandLauncher(currentProject, monitor, getParserIdArray(defaultConfig.getErrorParserId()), cpi.getINFWorkingDirectory()); launcher.showCommand(true); @@ -188,6 +188,12 @@ } else { CarbideBuilderPlugin.createCarbideProjectMarker(currentProject, IMarker.SEVERITY_ERROR, "Project has no configurations.", IMarker.PRIORITY_HIGH); } + + if (!monitor.isCanceled() && cpi.incrementalBuilderEnabled() && defaultConfig != null) { + // reset rebuild flag in current build config after build succeeded + CarbideBuildConfiguration config = ((CarbideBuildConfiguration) defaultConfig); + config.setRebuildNeeded(false); + } } monitor.done(); @@ -219,6 +225,31 @@ return false; } + protected void shouldRebuildConfigs(ICarbideProjectInfo cpi) { + List configs = cpi.getBuildConfigurations(); + ICarbideBuildConfiguration defaultConfig = cpi.getDefaultConfiguration(); + for (ICarbideBuildConfiguration config : configs) { + CarbideBuildConfiguration cbc = (CarbideBuildConfiguration) config; + cbc.setRebuildNeeded(true); + } + } + + protected boolean projectHasErrors() { + boolean hasErrors = false; + try { + for (IMarker currMarker : getProject().findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE)){ + if (currMarker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR) == IMarker.SEVERITY_ERROR){ + hasErrors = true; + break; + } + } + + } catch (CoreException e){ + e.printStackTrace(); + } + return hasErrors; + } + protected void clean(IProgressMonitor monitor) throws CoreException { SubMonitor subMonitor = SubMonitor.convert(monitor, 1); diff -r 5995486b4bed -r 7adc53ca3844 builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildConfiguration.java --- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildConfiguration.java Tue Apr 20 13:33:46 2010 -0500 +++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildConfiguration.java Wed Apr 21 14:14:01 2010 -0500 @@ -71,6 +71,7 @@ protected BuildConfigurationData buildConfigData; protected ROMBuilderInfo romBuilderInfo; protected SBSv2BuilderInfo sbsv2BuilderInfo; + protected boolean rebuildNeeded; public CarbideBuildConfiguration(IProject project, ISymbianBuildContext context) { super(context.getSDK(), context.getPlatformString(), context.getTargetString(), context.getSBSv2Alias()); @@ -83,6 +84,7 @@ if (context.getSBSv2Alias() != null){ sbsv2BuilderInfo = new SBSv2BuilderInfo(context); } + rebuildNeeded = true; } public void loadFromStorage(ICConfigurationDescription projDes) throws CoreException { @@ -446,4 +448,13 @@ } return getSDK().getReleaseRoot().append(releasePlatform.toLowerCase()).append(getTargetString().toLowerCase()); } + + public boolean getRebuildNeeded() { + return rebuildNeeded; + } + + public void setRebuildNeeded(boolean value) { + rebuildNeeded = value; + } + }