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

Commit

Permalink
LANG: Added enhanced BuildTargetSettings to proj-properties and launch.
Browse files Browse the repository at this point in the history
  • Loading branch information
bruno-medeiros committed Aug 1, 2015
1 parent c0a9178 commit 484a3be
Show file tree
Hide file tree
Showing 35 changed files with 792 additions and 292 deletions.
@@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2015, 2015 IBM Corporation and others. * Copyright (c) 2015 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
Expand All @@ -15,6 +15,7 @@
import org.junit.Test; import org.junit.Test;


import melnorme.lang.ide.core.LangCore; import melnorme.lang.ide.core.LangCore;
import melnorme.lang.ide.core.operations.build.BuildTarget.BuildTargetData;
import melnorme.utilbox.collections.ArrayList2; import melnorme.utilbox.collections.ArrayList2;
import melnorme.utilbox.core.CommonException; import melnorme.utilbox.core.CommonException;
import melnorme.utilbox.tests.CommonTest; import melnorme.utilbox.tests.CommonTest;
Expand All @@ -27,17 +28,18 @@ public class BuildTargetsSerializer_Test extends CommonTest {
public void testname() throws Exception { testname$(); } public void testname() throws Exception { testname$(); }
public void testname$() throws Exception { public void testname$() throws Exception {
testSerialize(new ArrayList2<>()); testSerialize(new ArrayList2<>());
testSerialize(new ArrayList2<>(createBuildTarget(true, "", "-opt"))); testSerialize(new ArrayList2<>(createBuildTarget(true, "", "-opt", "foo.exe")));
testSerialize(new ArrayList2<>(createBuildTarget(false, "", null))); testSerialize(new ArrayList2<>(createBuildTarget(false, "", null, null)));
testSerialize(new ArrayList2<>( testSerialize(new ArrayList2<>(
createBuildTarget(false, "", ""), createBuildTarget(false, "", "", ""),
createBuildTarget(true, "blah", "-opt"), createBuildTarget(true, "blah", "-opt", "foo.exe"),
createBuildTarget(true, "xxx", null) createBuildTarget(true, "xxx", null, "foo/bar.ooo")
)); ));
} }


protected BuildTarget createBuildTarget(boolean enabled, String targetName, String buildOptions) { protected BuildTarget createBuildTarget(boolean enabled, String targetName, String args, String filePath) {
return LangCore.getBuildManager().createBuildTarget(targetName, enabled, buildOptions); return LangCore.getBuildManager().createBuildTarget(
new BuildTargetData(targetName, enabled, args, filePath));
} }


protected void testSerialize(ArrayList2<BuildTarget> buildTargets) { protected void testSerialize(ArrayList2<BuildTarget> buildTargets) {
Expand Down
Expand Up @@ -26,30 +26,40 @@
public class BuildTargetLaunchSettings extends ProjectLaunchSettings { public class BuildTargetLaunchSettings extends ProjectLaunchSettings {


public String buildTargetName = null; public String buildTargetName = null;
public boolean isDefaultProgramPath = true; public boolean buildArguments_isDefault = true;
public String programPath = ""; public String buildArguments = null;
public boolean programPath_isDefault = true;
public String programPath = null;


public BuildTargetLaunchSettings() { public BuildTargetLaunchSettings() {
} }


public BuildTargetLaunchSettings(String projectName, String buildTargetName, public BuildTargetLaunchSettings(String projectName,
boolean isDefaultProgramPath, String programPath) { String buildTargetName, String buildArguments, String programPath) {
super(projectName); super(projectName);
this.buildTargetName = buildTargetName; this.buildTargetName = buildTargetName;
this.isDefaultProgramPath = isDefaultProgramPath; this.buildArguments = buildArguments;
this.buildArguments_isDefault = buildArguments == null;
this.programPath = programPath; this.programPath = programPath;
this.programPath_isDefault = programPath == null;
} }


public BuildTargetLaunchSettings(ILaunchConfiguration config) throws CoreException { public BuildTargetLaunchSettings(ILaunchConfiguration config) throws CoreException {
super(config); super(config);


buildTargetName = config.getAttribute(LaunchConstants.ATTR_BUILD_TARGET, ""); buildTargetName = config.getAttribute(LaunchConstants.ATTR_BUILD_TARGET, "");
isDefaultProgramPath = config.getAttribute(LaunchConstants.ATTR_PROGRAM_PATH_USE_DEFAULT, true); programPath_isDefault = config.getAttribute(LaunchConstants.ATTR_PROGRAM_PATH_USE_DEFAULT, true);
programPath = config.getAttribute(LaunchConstants.ATTR_PROGRAM_PATH, ""); programPath = config.getAttribute(LaunchConstants.ATTR_PROGRAM_PATH, "");
buildArguments_isDefault = config.getAttribute(LaunchConstants.ATTR_BUILD_ARGUMENTS_USE_DEFAULT, true);
buildArguments = config.getAttribute(LaunchConstants.ATTR_BUILD_ARGUMENTS, "");
}

public String getEffectiveBuildArguments() {
return buildArguments_isDefault ? null : buildArguments;
} }


public String getEffectiveProgramPath() { public String getEffectiveProgramPath() {
return isDefaultProgramPath ? null : programPath; return programPath_isDefault ? null : programPath;
} }


protected BuildManager getBuildManager() { protected BuildManager getBuildManager() {
Expand All @@ -67,8 +77,10 @@ public BuildTargetLaunchSettings initFromProject(IProject project) throws Common


BuildTarget defaultBuildTarget = buildInfo.getDefaultBuildTarget(); BuildTarget defaultBuildTarget = buildInfo.getDefaultBuildTarget();
buildTargetName = defaultBuildTarget.getTargetName(); buildTargetName = defaultBuildTarget.getTargetName();
isDefaultProgramPath = true; programPath_isDefault = true;
programPath = null; programPath = null;
buildArguments_isDefault = true;
buildArguments = null;


return this; return this;
} }
Expand All @@ -82,7 +94,9 @@ protected String getSuggestedConfigName_do() {
@Override @Override
protected void saveToConfig_rest(ILaunchConfigurationWorkingCopy config) { protected void saveToConfig_rest(ILaunchConfigurationWorkingCopy config) {
config.setAttribute(LaunchConstants.ATTR_BUILD_TARGET, buildTargetName); config.setAttribute(LaunchConstants.ATTR_BUILD_TARGET, buildTargetName);
config.setAttribute(LaunchConstants.ATTR_PROGRAM_PATH_USE_DEFAULT, isDefaultProgramPath); config.setAttribute(LaunchConstants.ATTR_BUILD_ARGUMENTS_USE_DEFAULT, buildArguments_isDefault);
config.setAttribute(LaunchConstants.ATTR_BUILD_ARGUMENTS, buildArguments);
config.setAttribute(LaunchConstants.ATTR_PROGRAM_PATH_USE_DEFAULT, programPath_isDefault);
config.setAttribute(LaunchConstants.ATTR_PROGRAM_PATH, programPath); config.setAttribute(LaunchConstants.ATTR_PROGRAM_PATH, programPath);
} }


Expand Down
Expand Up @@ -11,8 +11,6 @@
package melnorme.lang.ide.core.launch; package melnorme.lang.ide.core.launch;




import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;

import java.nio.file.Path; import java.nio.file.Path;


import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
Expand All @@ -21,27 +19,25 @@
import melnorme.lang.ide.core.LangCore; import melnorme.lang.ide.core.LangCore;
import melnorme.lang.ide.core.operations.build.BuildManager; import melnorme.lang.ide.core.operations.build.BuildManager;
import melnorme.lang.ide.core.operations.build.BuildTarget; import melnorme.lang.ide.core.operations.build.BuildTarget;
import melnorme.lang.ide.core.utils.ProjectValidator;
import melnorme.lang.ide.core.utils.ResourceUtils; import melnorme.lang.ide.core.utils.ResourceUtils;
import melnorme.lang.tooling.data.AbstractValidator2; import melnorme.lang.tooling.data.AbstractValidator2;
import melnorme.lang.tooling.data.ValidationMessages; import melnorme.lang.tooling.data.ValidationMessages;
import melnorme.utilbox.core.CommonException; import melnorme.utilbox.core.CommonException;
import melnorme.utilbox.misc.Location; import melnorme.utilbox.misc.Location;
import melnorme.utilbox.misc.PathUtil; import melnorme.utilbox.misc.PathUtil;


public class LaunchExecutableValidator extends AbstractValidator2 { public abstract class BuildTargetSettingsValidator extends AbstractValidator2 implements LaunchExecutableSettingsInput {


protected final IProject validProject; public BuildTargetSettingsValidator() {
protected final String buildTargetName; // can be null }
protected final String artifactPathOverride; // can be null


public LaunchExecutableValidator(IProject validProject, String buildTargetName, String artifactPathOverride) { public ProjectValidator getProjectValidator() {
this.validProject = assertNotNull(validProject); return new ProjectValidator(LangCore.NATURE_ID);
this.buildTargetName = buildTargetName;
this.artifactPathOverride = artifactPathOverride;
} }


public IProject getValidProject() { public IProject getValidProject() throws CommonException {
return validProject; return getProjectValidator().getProject(getProjectName());
} }


protected BuildManager getBuildManager() { protected BuildManager getBuildManager() {
Expand All @@ -50,20 +46,22 @@ protected BuildManager getBuildManager() {


/* ----------------- ----------------- */ /* ----------------- ----------------- */


public BuildTarget getBuildTarget() throws CoreException, CommonException { /* FIXME: need to create a BuildTarget based on the LaunchExecutableSettingsInput */
if(buildTargetName == null){
public BuildTarget getBuildTarget() throws CommonException {
if(getBuildTargetName() == null){
return null; return null;
} }
return getValidBuildTarget(); return getValidBuildTarget();
} }


public BuildTarget getValidBuildTarget() throws CoreException, CommonException { public BuildTarget getValidBuildTarget() throws CommonException {
return getBuildManager().getValidBuildTarget(getValidProject(), buildTargetName, false); return getBuildManager().getValidBuildTarget(getValidProject(), getBuildTargetName(), false);
} }


/* ----------------- ----------------- */ /* ----------------- ----------------- */


public String getDefaultArtifactPath() throws CommonException, CoreException { public String getDefaultArtifactPath() throws CommonException {
BuildTarget buildTarget = getBuildTarget(); BuildTarget buildTarget = getBuildTarget();
if(buildTarget == null) { if(buildTarget == null) {
return null; return null;
Expand All @@ -74,7 +72,7 @@ public String getDefaultArtifactPath() throws CommonException, CoreException {
public Location getValidExecutableLocation() throws CoreException, CommonException { public Location getValidExecutableLocation() throws CoreException, CommonException {
// Note we want to validate the default artifact path, even if it's not used because of the override. // Note we want to validate the default artifact path, even if it's not used because of the override.
String defaultArtifactPath = getDefaultArtifactPath(); String defaultArtifactPath = getDefaultArtifactPath();
String effectiveArtifactPath = artifactPathOverride != null ? artifactPathOverride : defaultArtifactPath; String effectiveArtifactPath = getArtifactPath() != null ? getArtifactPath() : defaultArtifactPath;
return getValidExecutableLocation(effectiveArtifactPath); return getValidExecutableLocation(effectiveArtifactPath);
} }


Expand All @@ -99,4 +97,19 @@ public Location toAbsolute(Path exePath) throws CommonException, CoreException {
return ResourceUtils.loc(getValidProject().getLocation()).resolve(exePath); return ResourceUtils.loc(getValidProject().getLocation()).resolve(exePath);
} }


/* ----------------- ----------------- */

public String getDefaultBuildArguments() throws CommonException {
BuildTarget buildTarget = getBuildTarget();
return getBuildManager().createBuildTargetValidator(getValidProject(), buildTarget).getDefaultBuildArguments();
}

public String getEffectiveBuildArguments() throws CommonException {
String buildArguments = getBuildArguments();
if(buildArguments == null) {
buildArguments = getDefaultBuildArguments();
}
return buildArguments;
}

} }
@@ -0,0 +1,29 @@
/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.core.launch;

import melnorme.utilbox.core.CommonException;

public interface LaunchExecutableSettingsInput {

// can be null
String getProjectName() throws CommonException;

// can be null
String getBuildTargetName();

// can be null
String getBuildArguments();

// can be null
String getArtifactPath();

}
Expand Up @@ -23,16 +23,16 @@


public class ProcessLaunchInfoValidator { public class ProcessLaunchInfoValidator {


protected final LaunchExecutableValidator launchExecutableValidator; protected final BuildTargetSettingsValidator buildSettingsValidator;


protected final String programArguments; protected final String programArguments;
protected final String workingDirectory; protected final String workingDirectory;
protected final Map<String, String> environmentVars; protected final Map<String, String> environmentVars;
protected final boolean appendEnvironmentVars; protected final boolean appendEnvironmentVars;


public ProcessLaunchInfoValidator(LaunchExecutableValidator launchExecutableValidator, String programArguments, public ProcessLaunchInfoValidator(BuildTargetSettingsValidator buildSettingsValidator, String programArguments,
String workingDirectory, Map<String, String> environmentVars, boolean appendEnvironmentVars) { String workingDirectory, Map<String, String> environmentVars, boolean appendEnvironmentVars) {
this.launchExecutableValidator = launchExecutableValidator; this.buildSettingsValidator = buildSettingsValidator;
this.programArguments = programArguments; this.programArguments = programArguments;
this.workingDirectory = workingDirectory; this.workingDirectory = workingDirectory;
this.environmentVars = environmentVars; this.environmentVars = environmentVars;
Expand All @@ -42,15 +42,15 @@ public ProcessLaunchInfoValidator(LaunchExecutableValidator launchExecutableVali
/* ----------------- ----------------- */ /* ----------------- ----------------- */


protected IProject getProject() throws CommonException, CoreException { protected IProject getProject() throws CommonException, CoreException {
return launchExecutableValidator.validProject; return buildSettingsValidator.getValidProject();
} }


protected BuildTarget getBuildTarget() throws CoreException, CommonException { protected BuildTarget getBuildTarget() throws CoreException, CommonException {
return launchExecutableValidator.getBuildTarget(); return buildSettingsValidator.getBuildTarget();
} }


protected Location getValidExecutableFileLocation() throws CoreException, CommonException { protected Location getValidExecutableFileLocation() throws CoreException, CommonException {
return launchExecutableValidator.getValidExecutableLocation(); return buildSettingsValidator.getValidExecutableLocation();
} }


/* ----------------- ----------------- */ /* ----------------- ----------------- */
Expand Down Expand Up @@ -90,6 +90,7 @@ public ProcessLaunchInfo getValidProcessLaunchInfo() throws CommonException, Cor
IProject project = getProject(); IProject project = getProject();
BuildTarget buildTarget = getBuildTarget(); BuildTarget buildTarget = getBuildTarget();
Location programLoc = getValidExecutableFileLocation(); Location programLoc = getValidExecutableFileLocation();

String[] processArgs = getProgramArguments(); String[] processArgs = getProgramArguments();
IPath workingDirectory = getWorkingDirectory(); IPath workingDirectory = getWorkingDirectory();
Map<String, String> configEnv = getValidEnvironmentVars(); Map<String, String> configEnv = getValidEnvironmentVars();
Expand Down

0 comments on commit 484a3be

Please sign in to comment.