1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 14:12:10 +02:00

Bug 547174 - Clean core project doesn't always show active in console

- order build config names so when clean for a project goes through
  the build configs, it finds the active one last and thus it will
  appear in the CDT build console
- do this in CoreBuildLaunchbarTracker.setActiveBuildConfig()
- do this in CBuildConfiguration.setActive()
- do this in CoreBuildLaunchConfigDelegate.buildForLaunch()

Change-Id: I379d6c9ba298f02cbc75d16e9941527cd2f9f45c
This commit is contained in:
Jeff Johnston 2019-05-15 20:41:14 -04:00
parent 949dd8a45f
commit 86bfd4de7e
3 changed files with 50 additions and 4 deletions

View file

@ -29,9 +29,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -284,6 +286,18 @@ public abstract class CBuildConfiguration extends PlatformObject implements ICBu
CoreModel m = CoreModel.getDefault();
synchronized (m) {
IProjectDescription projectDesc = project.getDescription();
IBuildConfiguration[] bconfigs = project.getBuildConfigs();
Set<String> names = new LinkedHashSet<>();
for (IBuildConfiguration bconfig : bconfigs) {
names.add(bconfig.getName());
}
// must add default config name as it may not be in build config list
names.add(IBuildConfiguration.DEFAULT_CONFIG_NAME);
// ensure active config is last in list so clean build will clean
// active config last and this will be left in build console for user to see
names.remove(config.getName());
names.add(config.getName());
projectDesc.setActiveBuildConfig(config.getName());
project.setDescription(projectDesc, monitor);
}

View file

@ -12,13 +12,16 @@ package org.eclipse.cdt.debug.core.launch;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.cdt.core.build.ICBuildConfiguration;
import org.eclipse.cdt.core.build.ICBuildConfiguration2;
import org.eclipse.cdt.core.build.ICBuildConfigurationManager;
import org.eclipse.cdt.core.build.IToolChain;
import org.eclipse.cdt.core.build.IToolChainManager;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.cdt.debug.internal.core.InternalDebugCoreMessages;
@ -129,10 +132,24 @@ public class CoreBuildLaunchBarTracker implements ILaunchBarListener {
if (buildConfig != null
&& !buildConfig.getBuildConfiguration().equals(finalProject.getActiveBuildConfig())) {
// set it as active
IProjectDescription desc = finalProject.getDescription();
desc.setActiveBuildConfig(buildConfig.getBuildConfiguration().getName());
finalProject.setDescription(desc, monitor);
CoreModel m = CoreModel.getDefault();
synchronized (m) {
// set it as active
IProjectDescription desc = finalProject.getDescription();
IBuildConfiguration[] configs = finalProject.getBuildConfigs();
Set<String> names = new LinkedHashSet<>();
for (IBuildConfiguration config : configs) {
names.add(config.getName());
}
// must add default config name as it may not be in build config list
names.add(IBuildConfiguration.DEFAULT_CONFIG_NAME);
// ensure active config is last in list so clean build will clean
// active config last and this will be left in build console for user to see
names.remove(buildConfig.getBuildConfiguration().getName());
names.add(buildConfig.getBuildConfiguration().getName());
desc.setActiveBuildConfig(buildConfig.getBuildConfiguration().getName());
finalProject.setDescription(desc, monitor);
}
// notify the active build config that it is active
((ICBuildConfiguration2) buildConfig).setActive();
}

View file

@ -12,7 +12,9 @@ package org.eclipse.cdt.debug.core.launch;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.cdt.core.build.ICBuildConfiguration;
import org.eclipse.cdt.core.build.ICBuildConfigurationManager;
@ -22,6 +24,7 @@ import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.internal.core.InternalDebugCoreMessages;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
@ -143,6 +146,18 @@ public abstract class CoreBuildLaunchConfigDelegate extends LaunchConfigurationT
CoreModel m = CoreModel.getDefault();
synchronized (m) {
IProjectDescription desc = project.getDescription();
IBuildConfiguration[] bconfigs = project.getBuildConfigs();
Set<String> names = new LinkedHashSet<>();
for (IBuildConfiguration bconfig : bconfigs) {
names.add(bconfig.getName());
}
// must add default config name as it may not be in build config list
names.add(IBuildConfiguration.DEFAULT_CONFIG_NAME);
// ensure active config is last in list so clean build will clean
// active config last and this will be left in build console for user to see
names.remove(buildConfig.getBuildConfiguration().getName());
names.add(buildConfig.getBuildConfiguration().getName());
desc.setActiveBuildConfig(buildConfig.getBuildConfiguration().getName());
project.setDescription(desc, monitor);
}