Skip to content
This repository has been archived by the owner on Apr 3, 2018. It is now read-only.

Commit

Permalink
Merging [MelnormeLang]
Browse files Browse the repository at this point in the history
  • Loading branch information
bruno-medeiros committed Apr 27, 2016
2 parents 40c5ae4 + bbf2dbf commit a493411
Show file tree
Hide file tree
Showing 32 changed files with 445 additions and 288 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

import static melnorme.lang.ide.core.LangCore_Actual.VAR_NAME_SdkToolPath;
import static melnorme.lang.ide.core.operations.build.BuildTargetsSerializer_Test.bt;
import static melnorme.lang.ide.core.operations.build.BuildTargetsSerializer_Test.cmd;
import static melnorme.lang.ide.core.operations.build.VariablesResolver.variableRefString;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertFail;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
Expand Down Expand Up @@ -232,11 +233,12 @@ public void test_compositeBuildTargetSettings() throws Exception {

protected CompositeBuildTargetSettings btSettings(
String buildTargetName, String buildArguments, String artifactPath) {
return getBuiltTargetSettingsValidator(project.getName(), buildTargetName, buildArguments, artifactPath);
CommandInvocation buildCommand = buildArguments == null ? null : new CommandInvocation(buildArguments);
return getBuiltTargetSettingsValidator(project.getName(), buildTargetName, buildCommand, artifactPath);
}

protected CompositeBuildTargetSettings getBuiltTargetSettingsValidator(
String projectName, String buildTargetName, String buildArguments, String artifactPath) {
String projectName, String buildTargetName, CommandInvocation buildCommand, String artifactPath) {

BuildTargetSource buildTargetSource = new BuildTargetSource() {
@Override
Expand All @@ -257,8 +259,8 @@ public String getBuildTargetName() {

CompositeBuildTargetSettings btSettings = new CompositeBuildTargetSettings(buildTargetSource) {
@Override
public String getBuildArguments() {
return buildArguments;
public CommandInvocation getBuildCommand() {
return buildCommand;
}

@Override
Expand Down Expand Up @@ -296,15 +298,15 @@ protected void testBuildOperation() throws CommonException, StatusException {
ProjectBuildInfo buildInfo = buildMgr.getBuildInfo(project);

BuildTarget btA = buildMgr.getBuildTarget(project, "TargetA", true);
assertTrue(btA.getData().getBuildArguments() == null);
assertTrue(btA.getData().getBuildCommand() == null);

assertAreEqual(
btA.getBuildOperation(toolMgr, opMonitor).getEffectiveProccessCommandLine(),
list(strSDKTool(), "default:", "build_args")
);

BuildTarget btB = buildMgr.getBuildTarget(project, "TargetB", true);
assertTrue(btB.getData().getBuildArguments() != null);
assertTrue(btB.getData().getBuildCommand() != null);

assertAreEqual(
btB.getBuildOperation(toolMgr, opMonitor).getEffectiveProccessCommandLine(),
Expand All @@ -317,7 +319,7 @@ protected void testBuildOperation() throws CommonException, StatusException {
verifyThrows(
() -> getBuildOperation(buildInfo, btB, ""),

CommonException.class, "Build command is empty"
CommonException.class, "No command specified"
);

}
Expand Down Expand Up @@ -350,7 +352,7 @@ protected void testBuildOperation_Vars(ProjectBuildInfo buildInfo, BuildTarget b
protected Indexable<String> getBuildOperation(ProjectBuildInfo buildInfo, BuildTarget btB, String buildArguments)
throws CommonException {
BuildTargetData dataCopy = btB.getDataCopy();
dataCopy.buildArguments = buildArguments;
dataCopy.buildCommand = cmd(buildArguments);
BuildTarget newBuildTarget = buildInfo.buildMgr.createBuildTarget(buildInfo.project, dataCopy);

ToolManager toolMgr = buildInfo.buildMgr.getToolManager();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,24 @@

public class BuildTargetsSerializer_Test extends CommonTest {

public static CommandInvocation cmd(String commandArguments) {
return commandArguments == null ? null :new CommandInvocation(commandArguments);
}

public static BuildTargetData bt(String targetName, boolean enabled, boolean autoEnabled,
String buildArguments, String executablePath) {
return btd(targetName, enabled, autoEnabled, cmd(buildArguments), executablePath);
}

public static BuildTargetData btd(String targetName, boolean enabled, boolean autoEnabled,
CommandInvocation buildCommand, String executablePath) {
BuildTargetData bt = new BuildTargetData(
targetName,
enabled,
autoEnabled,
buildArguments,
executablePath
);
targetName,
enabled,
autoEnabled,
buildCommand,
executablePath
);

assertEquals(bt, bt);
assertEquals(bt, new BuildTargetData().setData(bt));
Expand All @@ -44,18 +53,18 @@ public static BuildTargetData bt(String targetName, boolean enabled, boolean aut
public void test$() throws Exception {
testSerialize(new ArrayList2<>());
testSerialize(new ArrayList2<>(bt("", false, false, null, null)));
testSerialize(new ArrayList2<>(bt("", true, true, "-opt", "foo.exe")));
testSerialize(new ArrayList2<>(btd("", true, true, cmd("-opt"), "foo.exe")));
testSerialize(new ArrayList2<>(
bt("", false, true, "", ""),
bt("blah", true, false, "-opt", "foo.exe"),
btd("", false, true, cmd(""), ""),
btd("blah", true, false, cmd("-opt"), "foo.exe"),
bt("xxx", true, false, null, "foo/bar.ooo")
));
}

protected void testSerialize(ArrayList2<BuildTargetData> buildTargetsData) {
try {
String xml = serializer.writeProjectBuildInfo(buildTargetsData);
assertAreEqual(buildTargetsData, serializer.readProjectBuildInfo(xml));
String xml = serializer.writeToString(buildTargetsData);
assertAreEqual(buildTargetsData, serializer.readFromString(xml));
} catch(CommonException e) {
assertFail();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,44 +22,44 @@
import melnorme.lang.ide.core.operations.build.BuildManager;
import melnorme.lang.ide.core.operations.build.BuildTarget;
import melnorme.lang.ide.core.operations.build.BuildTargetData;
import melnorme.lang.ide.core.operations.build.CommandInvocation;
import melnorme.lang.ide.core.operations.build.CommandInvocationSerializer;
import melnorme.lang.ide.core.operations.build.ProjectBuildInfo;
import melnorme.lang.ide.launching.LaunchConstants;
import melnorme.utilbox.core.CommonException;
import melnorme.utilbox.misc.StringUtil;

public class BuildTargetLaunchCreator extends ProjectLaunchSettings {

protected final CommandInvocationSerializer commandInvocationSerializer = new CommandInvocationSerializer();

public BuildTargetData data = new BuildTargetData();

public BuildTargetLaunchCreator() {
}

public BuildTargetLaunchCreator(String projectName,
String targetName, String buildArguments, String executablePath) {
this(projectName, new BuildTargetData(targetName, true, true, buildArguments, executablePath));
}

public BuildTargetLaunchCreator(String projectName, BuildTargetData data) {
super(projectName);
this.data = data;
}

public BuildTargetLaunchCreator(ILaunchConfiguration config) throws CoreException {
public BuildTargetLaunchCreator(ILaunchConfiguration config) throws CoreException, CommonException {
super(config);

data.targetName = config.getAttribute(LaunchConstants.ATTR_BUILD_TARGET, "");
data.executablePath = LaunchUtils.getOptionalAttribute(config,
LaunchConstants.ATTR_PROGRAM_PATH_USE_DEFAULT, LaunchConstants.ATTR_PROGRAM_PATH);
data.buildArguments = LaunchUtils.getOptionalAttribute(config,
LaunchConstants.ATTR_BUILD_ARGUMENTS_USE_DEFAULT, LaunchConstants.ATTR_BUILD_ARGUMENTS);
data.buildCommand = commandInvocationSerializer.readFromString(
LaunchUtils.getOptionalAttribute(config,
LaunchConstants.ATTR_BUILD_COMMAND_USE_DEFAULT, LaunchConstants.ATTR_BUILD_COMMAND));
}

public String getTargetName() {
return data.targetName;
}

public String getBuildArguments() {
return data.buildArguments;
public CommandInvocation getBuildCommand() {
return data.buildCommand;
}

public String getExecutablePath() {
Expand All @@ -81,7 +81,7 @@ public BuildTargetLaunchCreator initFromProject(IProject project) throws CommonE

BuildTarget defaultBuildTarget = buildInfo.getDefaultBuildTarget();
data.targetName = defaultBuildTarget.getTargetName();
data.buildArguments = null;
data.buildCommand = null;
data.executablePath = null;

return this;
Expand All @@ -97,11 +97,13 @@ protected String getSuggestedConfigName_do() {
}

@Override
protected void saveToConfig_rest(ILaunchConfigurationWorkingCopy config) {
protected void saveToConfig_rest(ILaunchConfigurationWorkingCopy config) throws CommonException {
String serializedBuildCommand = commandInvocationSerializer.writeToString(data.buildCommand);

config.setAttribute(LaunchConstants.ATTR_BUILD_TARGET, getTargetName());
LaunchUtils.setOptionalValue(config,
LaunchConstants.ATTR_BUILD_ARGUMENTS_USE_DEFAULT,
LaunchConstants.ATTR_BUILD_ARGUMENTS, data.buildArguments);
LaunchConstants.ATTR_BUILD_COMMAND_USE_DEFAULT,
LaunchConstants.ATTR_BUILD_COMMAND, serializedBuildCommand);
LaunchUtils.setOptionalValue(config,
LaunchConstants.ATTR_PROGRAM_PATH_USE_DEFAULT,
LaunchConstants.ATTR_PROGRAM_PATH, data.executablePath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import melnorme.lang.ide.core.operations.build.BuildTarget;
import melnorme.lang.ide.core.operations.build.BuildTargetData;
import melnorme.lang.ide.core.operations.build.CommandInvocation;
import melnorme.utilbox.core.CommonException;

/**
Expand All @@ -28,7 +29,7 @@ public CompositeBuildTargetSettings(BuildTargetSource btSupplier) {
}

// can be null
public abstract String getBuildArguments();
public abstract CommandInvocation getBuildCommand();

// can be null
public abstract String getExecutablePath();
Expand All @@ -42,13 +43,13 @@ public BuildTarget getValidBuildTarget() throws CommonException {
}

protected BuildTarget getValidBuildTarget2(BuildTarget originalBuildTarget) {
String buildArguments = getBuildArguments();
CommandInvocation buildCommand = getBuildCommand();
String executablePath = getExecutablePath();

BuildTargetData data = originalBuildTarget.getDataCopy();

if(buildArguments != null) {
data.buildArguments = buildArguments;
if(buildCommand != null) {
data.buildCommand = buildCommand;
}
if(executablePath != null) {
data.executablePath = executablePath;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,16 @@
import org.eclipse.core.resources.IResource;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;

import melnorme.utilbox.core.CommonException;

public interface ILaunchConfigSerializer {

ProjectLaunchSettings initFrom(IResource contextualResource);

default void saveToConfig(ILaunchConfigurationWorkingCopy config) {
default void saveToConfig(ILaunchConfigurationWorkingCopy config) throws CommonException {
saveToConfig(config, false);
}

void saveToConfig(ILaunchConfigurationWorkingCopy config, boolean rename);
void saveToConfig(ILaunchConfigurationWorkingCopy config, boolean rename) throws CommonException;

}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ protected ILaunchManager getLaunchManager() {
return DebugPlugin.getDefault().getLaunchManager();
}

public ILaunchConfiguration createNewConfiguration(ILaunchConfigurationType launchCfgType) throws CoreException {
public ILaunchConfiguration createNewConfiguration(ILaunchConfigurationType launchCfgType)
throws CoreException, CommonException {
String suggestedName = getSuggestedConfigName();

String launchName = getLaunchManager().generateLaunchConfigurationName(suggestedName);
Expand All @@ -106,7 +107,7 @@ protected String getSuggestedConfigName_do() {
}

@Override
public void saveToConfig(ILaunchConfigurationWorkingCopy config, boolean rename) {
public void saveToConfig(ILaunchConfigurationWorkingCopy config, boolean rename) throws CommonException {
config.setAttribute(LaunchConstants.ATTR_PROJECT_NAME, projectName);

config.setMappedResources(array(getProject()));
Expand All @@ -121,7 +122,7 @@ public void saveToConfig(ILaunchConfigurationWorkingCopy config, boolean rename)
}

@SuppressWarnings("unused")
protected void saveToConfig_rest(ILaunchConfigurationWorkingCopy config) {
protected void saveToConfig_rest(ILaunchConfigurationWorkingCopy config) throws CommonException {
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ protected Map<String, BuildTarget> getStoredTargetSettings(IProject project) {
if(targetsPrefValue != null) {
ArrayList2<BuildTargetData> buildTargetsData;
try {
buildTargetsData = createSerializer().readProjectBuildInfo(targetsPrefValue);
buildTargetsData = createSerializer().readFromString(targetsPrefValue);
} catch(CommonException ce) {
LangCore.logError("Error reading project build-info.", ce);
return existingBuildTargets;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,12 +147,12 @@ public String getDefaultBuildCommand() throws StatusException {
}
}

public String getEffectiveBuildCommand() throws StatusException {
String buildOptions = targetData.getBuildArguments();
if(buildOptions != null) {
return buildOptions;
public CommandInvocation getEffectiveBuildCommand2() throws StatusException {
CommandInvocation buildCommand = targetData.getBuildCommand();
if(buildCommand != null) {
return buildCommand;
}
return getDefaultBuildCommand();
return new CommandInvocation(getDefaultBuildCommand());
}

/* ----------------- ----------------- */
Expand Down Expand Up @@ -211,35 +211,17 @@ public Location getValidExecutableLocation(String exeFilePathString) throws Stat
/* ----------------- ----------------- */

public void validateForBuild(ToolManager toolManager) throws StatusException {
getCommandInvocation(toolManager).validate();
getValidExecutableLocation(); // TODO: Build Target Editor validate this
}

public CommandInvocation getCommandInvocation(ToolManager toolManager) throws StatusException {
String buildCommandString = getEffectiveBuildCommand();
VariablesResolver variablesResolver = toolManager.getVariablesManager(option(getProject()));
return new BuildCommandInvocation(buildCommandString, variablesResolver);
}

public static class BuildCommandInvocation extends CommandInvocation {
public BuildCommandInvocation(String commandArguments, VariablesResolver variablesResolver) {
super(commandArguments, variablesResolver);
}

@Override
protected void handleEmptyCommandLine() throws CommonException {
throw new CommonException("Build command is empty.");
}
getEffectiveBuildCommand2().validate(variablesResolver);
getValidExecutableLocation(); // TODO: Build Target Editor validate this
}

public BuildTargetOperation getBuildOperation(ToolManager toolManager, IOperationMonitor opMonitor)
throws CommonException {
assertNotNull(opMonitor);

CommandInvocation buildCommand = this.getCommandInvocation(toolManager);

return getBuildType().getBuildOperation(new BuildOperationParameters(opMonitor,
toolManager, this.getProject(), this.getBuildTargetName(), buildCommand));
toolManager, getProject(), getBuildTargetName(), getEffectiveBuildCommand2()));
}

}
Loading

0 comments on commit a493411

Please sign in to comment.