You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When launch mode, tool chain or launch configuration cannot be loaded, CBuildConfiguration's constructor throws a CoreException with code of STATUS_BUILD_CONFIG_NOT_VALID.
This currently leads to Build not configured correctly error when trying to build. There may be other paths that need updating.
Saving the IStatus's message and returning that later we can display to the user this info when they build:
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuilder.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuilder.java
index f826df0fb0..f2907da510 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuilder.java+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuilder.java@@ -2,6 +2,7 @@ package org.eclipse.cdt.core.build;
import java.io.IOException;
import java.util.Map;
+import java.util.Optional;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.resources.IConsole;
@@ -36,9 +37,13 @@ public class CBuilder extends IncrementalProjectBuilder {
console.start(project);
// Get the build configuration
- ICBuildConfiguration config = getBuildConfig().getAdapter(ICBuildConfiguration.class);+ // XXX Why was adapter used and not manager directly?+ ICBuildConfigurationManager manager = CCorePlugin.getService(ICBuildConfigurationManager.class);+ ICBuildConfiguration config = manager.getBuildConfiguration(getBuildConfig());
if (config == null) {
- console.getErrorStream().write(Messages.CBuilder_NotConfiguredCorrectly);+ Optional<String> errorMessage = manager.getBuildConfigurationErroMessage(getBuildConfig());+ String message = errorMessage.orElse(Messages.CBuilder_NotConfiguredCorrectly);+ console.getErrorStream().write(message);
return null;
}
@@ -59,9 +64,13 @@ public class CBuilder extends IncrementalProjectBuilder {
console.start(project);
// Get the build configuration
- ICBuildConfiguration config = getBuildConfig().getAdapter(ICBuildConfiguration.class);+ // XXX Why was adapter used and not manager directly?+ ICBuildConfigurationManager manager = CCorePlugin.getService(ICBuildConfigurationManager.class);+ ICBuildConfiguration config = manager.getBuildConfiguration(getBuildConfig());
if (config == null) {
- console.getErrorStream().write(Messages.CBuilder_NotConfiguredCorrectly2);+ Optional<String> errorMessage = manager.getBuildConfigurationErroMessage(getBuildConfig());+ String message = errorMessage.orElse(Messages.CBuilder_NotConfiguredCorrectly);+ console.getErrorStream().write(message);
return;
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java
index 8ea561a53b..959f3211e5 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfigurationManager.java@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.cdt.core.build;
+import java.util.Optional;+
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
@@ -98,4 +100,9 @@ public interface ICBuildConfigurationManager {
*/
boolean supports(IProject project) throws CoreException;
+ /**+ * @since 9.0+ */+ Optional<String> getBuildConfigurationErroMessage(IBuildConfiguration buildConfig);+
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java
index c53b16cc99..62013c060c 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildConfigurationManager.java@@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import org.eclipse.cdt.core.CCorePlugin;
@@ -94,7 +95,7 @@ public class CBuildConfigurationManager
private Map<String, Provider> providers;
private Map<IBuildConfiguration, ICBuildConfiguration> configs = new HashMap<>();
- private Set<IBuildConfiguration> noConfigs = new HashSet<>();+ private Map<IBuildConfiguration, String> noConfigs = new HashMap<>();
public CBuildConfigurationManager() {
ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
@@ -194,7 +195,7 @@ public class CBuildConfigurationManager
ICBuildConfiguration config = null;
Set<IProject> projects = new HashSet<>();
synchronized (configs) {
- Iterator<IBuildConfiguration> iterator = noConfigs.iterator();+ Iterator<IBuildConfiguration> iterator = noConfigs.keySet().iterator();
while (iterator.hasNext()) {
IBuildConfiguration buildConfig = iterator.next();
String configName = null;
@@ -247,7 +248,8 @@ public class CBuildConfigurationManager
ICBuildConfiguration config = null;
boolean resetBinaryParser = false;
synchronized (configs) {
- if (!noConfigs.contains(buildConfig)) {+ if (!noConfigs.containsKey(buildConfig)) {+ String noConfigErrorMessage = ""; //$NON-NLS-1$
config = configs.get(buildConfig);
if (config == null) {
String configName = null;
@@ -272,8 +274,10 @@ public class CBuildConfigurationManager
config = provider.getCBuildConfiguration(buildConfig, configName);
} catch (CoreException e) {
IStatus status = e.getStatus();
- if (!status.getPlugin().equals(CCorePlugin.PLUGIN_ID)- || status.getCode() != CCorePlugin.STATUS_BUILD_CONFIG_NOT_VALID) {+ if (status.getPlugin().equals(CCorePlugin.PLUGIN_ID)+ && status.getCode() == CCorePlugin.STATUS_BUILD_CONFIG_NOT_VALID) {+ noConfigErrorMessage = status.getMessage();+ } else {
throw e;
}
}
@@ -286,7 +290,7 @@ public class CBuildConfigurationManager
}
if (config == null) {
- noConfigs.add(buildConfig);+ noConfigs.put(buildConfig, noConfigErrorMessage);
}
}
}
@@ -447,4 +451,8 @@ public class CBuildConfigurationManager
return false;
}
+ @Override+ public Optional<String> getBuildConfigurationErroMessage(IBuildConfiguration buildConfig) {+ return Optional.ofNullable(noConfigs.get(buildConfig));+ }
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/Messages.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/Messages.java
index 98529b1bf4..81d637ef50 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/Messages.java+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/Messages.java@@ -19,7 +19,6 @@ public class Messages extends NLS {
public static String CBuilder_ExceptionWhileBuilding;
public static String CBuilder_ExceptionWhileBuilding2;
public static String CBuilder_NotConfiguredCorrectly;
- public static String CBuilder_NotConfiguredCorrectly2;
public static String CBuildConfiguration_CBuildConfiguration_LaunchModeMissong;
public static String CBuildConfiguration_CBuildConfiguration_LaunchTargetMissing;
public static String CBuildConfiguration_CBuildConfiguration_ToolchainMissing;
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/messages.properties b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/messages.properties
index bbe8af1ab5..54e970ffd9 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/messages.properties+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/messages.properties@@ -11,7 +11,6 @@
CBuilder_ExceptionWhileBuilding=Exception while building
CBuilder_ExceptionWhileBuilding2=Exception while building
CBuilder_NotConfiguredCorrectly=Build not configured correctly\n
-CBuilder_NotConfiguredCorrectly2=Build not configured correctly\n
StandardBuildConfiguration_0=Building in: %s\n
StandardBuildConfiguration_1=Build complete (%d errors, %d warnings): %s\n
StandardBuildConfiguration_Failure=Error: %s
The text was updated successfully, but these errors were encountered:
Originally posted by @jonahgraham in #1076 (comment)
When launch mode, tool chain or launch configuration cannot be loaded,
CBuildConfiguration
's constructor throws aCoreException
with code ofSTATUS_BUILD_CONFIG_NOT_VALID
.This currently leads to
Build not configured correctly
error when trying to build. There may be other paths that need updating.Saving the
IStatus
's message and returning that later we can display to the user this info when they build:The text was updated successfully, but these errors were encountered: