From ff0a6cb55ee2b9f661079e11c005a0ba2af75c0f Mon Sep 17 00:00:00 2001 From: Bruno Medeiros Date: Fri, 24 Jul 2015 15:34:56 +0100 Subject: [PATCH] @LANG: -> follow up changes. --- .../core/engine/GoBuildManagerTest.java | 10 +- .../launch/ProjectBuildArtifactValidator.java | 4 +- .../core/operations/build/BuildManager.java | 4 +- .../operations/build/BuildTargetRunner.java | 26 +++--- .../build/CommonBuildTargetOperation.java | 28 +++--- .../core/operations/GoBuildManager.java | 36 +++++--- .../goclipse/core/operations/GoBuilder.java | 2 +- .../ui/launch/MainLaunchConfigurationTab.java | 2 +- .../launch/GoMainLaunchConfigurationTab.java | 92 ++++++++++--------- .../goclipse/tooling/env/GoEnvironment.java | 12 +-- 10 files changed, 120 insertions(+), 96 deletions(-) diff --git a/plugin_ide.core.tests/src/com/googlecode/goclipse/core/engine/GoBuildManagerTest.java b/plugin_ide.core.tests/src/com/googlecode/goclipse/core/engine/GoBuildManagerTest.java index 09331d915..ad0629b17 100644 --- a/plugin_ide.core.tests/src/com/googlecode/goclipse/core/engine/GoBuildManagerTest.java +++ b/plugin_ide.core.tests/src/com/googlecode/goclipse/core/engine/GoBuildManagerTest.java @@ -78,12 +78,12 @@ protected BuildManager getBuildManager() { } protected BuildTarget testGetBuildTargetFor(ProjectBuildInfo buildInfo, String targetName, String buildConfig, - String buildType) throws CommonException { + String buildType) throws CommonException, CoreException { return testGetBuildTargetFor(buildInfo, targetName, buildConfig, buildType, buildConfig); } protected BuildTarget testGetBuildTargetFor(ProjectBuildInfo buildInfo, String targetName, String goPackageName, - String buildType, String relArtifactPath) throws CommonException { + String buildType, String relArtifactPath) throws CommonException, CoreException { BuildTarget buildTarget = buildInfo.getBuildTargetFor(targetName); assertAreEqual(buildTarget.getTargetName(), targetName); @@ -92,11 +92,11 @@ protected BuildTarget testGetBuildTargetFor(ProjectBuildInfo buildInfo, String t assertAreEqual(buildTargetOp.getBuildTypeName(), buildType); if(relArtifactPath == null) { - verifyThrows(() -> buildTargetOp.getArtifactPath3(), CommonException.class); + verifyThrows(() -> buildTargetOp.getArtifactPath(), CommonException.class); } else { Location binLocation = getProjectLocation().resolve("bin"); - assertAreEqual(buildTargetOp.getArtifactPath3(), - binLocation.resolve(relArtifactPath + MiscUtil.getExecutableSuffix()).toPath()); + assertAreEqual(buildTargetOp.getArtifactPath(), + binLocation.resolve(relArtifactPath + MiscUtil.getExecutableSuffix()).toString()); } diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/launch/ProjectBuildArtifactValidator.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/launch/ProjectBuildArtifactValidator.java index 615f2f2e5..f5f360926 100644 --- a/plugin_ide.core/src-lang/melnorme/lang/ide/core/launch/ProjectBuildArtifactValidator.java +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/launch/ProjectBuildArtifactValidator.java @@ -84,9 +84,9 @@ protected Path getValidExecutableFilePath2() throws CoreException, CommonExcepti String exePathString = settings.getExecutablePath_Attribute(); if(exePathString != null) { - return buildTargetOperation.getValidArtifactPath3(exePathString); + return buildTargetOperation.getValidArtifactPath(exePathString); } - return buildTargetOperation.getValidArtifactPath3(); + return buildTargetOperation.getValidArtifactPath(); } public Location toAbsolute(Path exePath) throws StatusException, CoreException { diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/BuildManager.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/BuildManager.java index 36138b0df..05c564d2a 100644 --- a/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/BuildManager.java +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/BuildManager.java @@ -226,11 +226,11 @@ public String getBuildTargetName(String buildConfigName, String buildType) { return buildConfigName + StringUtil.prefixStr(BUILD_TYPE_NAME_SEPARATOR, buildType); } - public static String getBuildConfigString(String targetName) { + public String getBuildConfigString(String targetName) { return StringUtil.substringUntilMatch(targetName, BUILD_TYPE_NAME_SEPARATOR); } - public static String getBuildTypeString(String targetName) { + public String getBuildTypeString(String targetName) { return StringUtil.segmentAfterMatch(targetName, BUILD_TYPE_NAME_SEPARATOR); } diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/BuildTargetRunner.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/BuildTargetRunner.java index b897cb4e5..58b9d2711 100644 --- a/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/BuildTargetRunner.java +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/BuildTargetRunner.java @@ -15,6 +15,7 @@ import java.nio.file.Path; import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; import melnorme.lang.ide.core.LangCore; import melnorme.lang.ide.core.launch.LaunchMessages; @@ -41,6 +42,10 @@ public BuildManager getBuildManager() { return LangCore.getBuildManager(); } + public IProject getProject() { + return project; + } + public BuildConfiguration getBuildConfiguration() { return buildConfiguration2; } @@ -57,7 +62,7 @@ public String getBuildTypeName() { return buildTypeName; } - public String getEffectiveBuildOptions() throws CommonException { + public String getEffectiveBuildOptions() throws CommonException, CoreException { String buildOptions = getBuildOptions(); if(buildOptions != null) { return buildOptions; @@ -104,10 +109,11 @@ public String getName() { } public abstract String getDefaultBuildOptions(BuildTargetRunner buildTargetRunner) - throws CommonException; + throws CommonException, CoreException; - public String getArtifactPath(BuildTargetRunner buildTargetRunner) { - return buildTargetRunner.getBuildConfiguration().getArtifactPath(); + public String getArtifactPath(BuildTargetRunner buildTargetOp) + throws CommonException, CoreException { + return buildTargetOp.getBuildConfiguration().getArtifactPath(); } } @@ -118,21 +124,19 @@ protected BuildType getBuildType() throws CommonException { return getBuildManager().getBuildType_NonNull(getBuildTypeName()); } - public String getDefaultBuildOptions() throws CommonException { + public String getDefaultBuildOptions() throws CommonException, CoreException { return getBuildType().getDefaultBuildOptions(this); } - /* FIXME: rename */ - public String getArtifactPath3() throws CommonException { + public String getArtifactPath() throws CommonException, CoreException { return getBuildType().getArtifactPath(this); } - public Path getValidArtifactPath3() throws CommonException { - String artifactPathStr = getArtifactPath3(); - return getValidArtifactPath3(artifactPathStr); + public Path getValidArtifactPath() throws CommonException, CoreException { + return getValidArtifactPath(getArtifactPath()); } - public Path getValidArtifactPath3(String artifactPathStr) throws CommonException { + public Path getValidArtifactPath(String artifactPathStr) throws CommonException { if(artifactPathStr == null || artifactPathStr.isEmpty()) { throw new CommonException(LaunchMessages.BuildTarget_NoArtifactPathSpecified); } diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/CommonBuildTargetOperation.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/CommonBuildTargetOperation.java index 596761e8b..5ec14ba13 100644 --- a/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/CommonBuildTargetOperation.java +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/build/CommonBuildTargetOperation.java @@ -57,7 +57,7 @@ public String getBuildType() { return StringUtil.nullAsEmpty(buildTarget.getBuildTypeName()); } - protected String getEffectiveBuildOptions() throws CommonException { + protected String getEffectiveBuildOptions() throws CommonException, CoreException { return buildTarget.getEffectiveBuildOptions(); } @@ -67,27 +67,33 @@ protected String[] getEvaluatedAndParserArguments() throws CoreException, Common @Override public void execute(IProgressMonitor pm) throws CoreException, CommonException, OperationCancellation { + ProcessBuilder pb = getToolProcessBuilder(); + ExternalProcessResult processResult = runBuildTool(pm, pb); + processBuildOutput(processResult); + } + + protected ProcessBuilder getToolProcessBuilder() throws CoreException, CommonException, OperationCancellation { ArrayList2 commands = new ArrayList2(); addToolCommand(commands); addMainArguments(commands); commands.addElements(getEvaluatedAndParserArguments()); - - ExternalProcessResult processResult = startProcess(pm, commands); - processBuildOutput(processResult); + return getProcessBuilder(commands); } - protected void addToolCommand(ArrayList2 commands) throws CommonException { + protected void addToolCommand(ArrayList2 commands) + throws CoreException, CommonException, OperationCancellation { commands.add(getBuildToolPath().toString()); } - protected abstract void addMainArguments(ArrayList2 commands); - - // TODO: write some default for this method, refactor associated code. - protected abstract ExternalProcessResult startProcess(IProgressMonitor pm, ArrayList2 commands) - throws CommonException, OperationCancellation; + protected abstract void addMainArguments(ArrayList2 commands) + throws CoreException, CommonException, OperationCancellation; - protected abstract void processBuildOutput(ExternalProcessResult processResult) throws CoreException; + protected abstract ProcessBuilder getProcessBuilder(ArrayList2 commands) + throws CommonException, OperationCancellation, CoreException; + protected abstract void processBuildOutput(ExternalProcessResult processResult) + throws CoreException, CommonException, OperationCancellation; + } \ No newline at end of file diff --git a/plugin_ide.core/src/com/googlecode/goclipse/core/operations/GoBuildManager.java b/plugin_ide.core/src/com/googlecode/goclipse/core/operations/GoBuildManager.java index 13c797c0b..7b088ac29 100644 --- a/plugin_ide.core/src/com/googlecode/goclipse/core/operations/GoBuildManager.java +++ b/plugin_ide.core/src/com/googlecode/goclipse/core/operations/GoBuildManager.java @@ -17,8 +17,6 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; - import com.googlecode.goclipse.core.GoCoreMessages; import com.googlecode.goclipse.core.GoEnvironmentPrefs; import com.googlecode.goclipse.core.GoProjectEnvironment; @@ -27,7 +25,6 @@ import com.googlecode.goclipse.tooling.env.GoEnvironment; import melnorme.lang.ide.core.LangCore; -import melnorme.lang.ide.core.launch.LaunchUtils; import melnorme.lang.ide.core.operations.OperationInfo; import melnorme.lang.ide.core.operations.ToolMarkersUtil; import melnorme.lang.ide.core.operations.build.BuildManager; @@ -41,6 +38,7 @@ import melnorme.lang.ide.core.project_model.ProjectBuildInfo; import melnorme.lang.ide.core.utils.ResourceUtils; import melnorme.lang.tooling.data.StatusLevel; +import melnorme.lang.utils.ProcessUtils; import melnorme.utilbox.collections.ArrayList2; import melnorme.utilbox.collections.Indexable; import melnorme.utilbox.concurrency.OperationCancellation; @@ -86,6 +84,19 @@ public BuildTarget getBuildTargetFor(ProjectBuildInfo projectBuildInfo, String t return createBuildTarget(targetName, false, null); } + @Override + public BuildTargetRunner getBuildTargetOperation(IProject project, BuildTarget buildTarget) + throws CommonException { + String targetName = buildTarget.getTargetName(); + String buildConfigName = getBuildConfigString(targetName); + String buildTypeName = getBuildTypeString(targetName); + + /* FIXME: adapt this code in parent */ + BuildConfiguration buildConfiguration = new BuildConfiguration(buildConfigName, null); + + return createBuildTargetOperation(project, buildConfiguration, buildTypeName, buildTarget); + } + @Override public BuildTargetRunner createBuildTargetOperation(IProject project, BuildConfiguration buildConfig, String buildTypeName, BuildTarget buildSettings) { @@ -113,7 +124,7 @@ protected GoPackageName getValidGoPackageName(String goPackageString) throws Com @Override public String getDefaultBuildOptions(BuildTargetRunner buildTargetOp) throws CommonException { - String goPackageSpec = getGoPackageSpec(buildTargetOp.project, buildTargetOp.getBuildConfigName()); + String goPackageSpec = getGoPackageSpec(buildTargetOp.getProject(), buildTargetOp.getBuildConfigName()); return getBuildCommand() + " -v -gcflags \"-N -l\" " + goPackageSpec; } @@ -137,8 +148,8 @@ protected String getGoPackageSpec(IProject project, String goPackageSpec) throws } @Override - public String getArtifactPath(BuildTargetRunner buildTargetOp) { - Location binFolderLocation = GoProjectEnvironment.getBinFolderLocation(buildTargetOp.project); + public String getArtifactPath(BuildTargetRunner buildTargetOp) throws CommonException { + Location binFolderLocation = GoProjectEnvironment.getBinFolderLocation(buildTargetOp.getProject()); String binFilePath = getBinFilePath(getValidGoPackageName(buildTargetOp.getBuildConfigName())); return binFolderLocation.resolve(binFilePath + MiscUtil.getExecutableSuffix()).toString(); @@ -214,8 +225,7 @@ protected void addMainArguments(ArrayList2 commands) { } @Override - protected ExternalProcessResult startProcess(IProgressMonitor pm, ArrayList2 commands) - throws CommonException, OperationCancellation, CoreException { + protected ProcessBuilder getProcessBuilder(ArrayList2 commands) throws CoreException, CommonException { Location projectLocation = ResourceUtils.getProjectLocation(project); goEnv = getValidGoEnvironment(project); @@ -226,10 +236,9 @@ protected ExternalProcessResult startProcess(IProgressMonitor pm, ArrayList2 goBuildCmdLine = GoBuildManager.getToolCommandLine(); goBuildCmdLine.addElements("clean", "-i", "-x"); GoBuildManager.addSourcePackagesToCmdLine(project, goBuildCmdLine, goEnv); - return goEnv.createProcessBuilder(goBuildCmdLine, getProjectLocation()); + return goEnv.createProcessBuilder(goBuildCmdLine, getProjectLocation(), true); } } \ No newline at end of file diff --git a/plugin_ide.ui/src-lang/melnorme/lang/ide/ui/launch/MainLaunchConfigurationTab.java b/plugin_ide.ui/src-lang/melnorme/lang/ide/ui/launch/MainLaunchConfigurationTab.java index 49a07ab80..a3db0e008 100644 --- a/plugin_ide.ui/src-lang/melnorme/lang/ide/ui/launch/MainLaunchConfigurationTab.java +++ b/plugin_ide.ui/src-lang/melnorme/lang/ide/ui/launch/MainLaunchConfigurationTab.java @@ -87,7 +87,7 @@ public MainLaunchTab_ProgramPathField() { @Override protected String getDefaultFieldValue() { try { - return getValidatedBuildTargetRunner().getArtifactPath3(); + return getValidatedBuildTargetRunner().getArtifactPath(); } catch(CoreException | CommonException e) { return null; } diff --git a/plugin_ide.ui/src/com/googlecode/goclipse/ui/launch/GoMainLaunchConfigurationTab.java b/plugin_ide.ui/src/com/googlecode/goclipse/ui/launch/GoMainLaunchConfigurationTab.java index 70146b3bf..d2f580337 100644 --- a/plugin_ide.ui/src/com/googlecode/goclipse/ui/launch/GoMainLaunchConfigurationTab.java +++ b/plugin_ide.ui/src/com/googlecode/goclipse/ui/launch/GoMainLaunchConfigurationTab.java @@ -28,6 +28,7 @@ import com.googlecode.goclipse.tooling.env.GoEnvironment; import melnorme.lang.ide.core.LangCore; +import melnorme.lang.ide.core.operations.build.BuildTarget; import melnorme.lang.ide.launching.LaunchConstants; import melnorme.lang.ide.ui.fields.ProjectRelativePathField; import melnorme.lang.ide.ui.launch.MainLaunchConfigurationTab; @@ -61,25 +62,7 @@ public GoMainLaunchConfigurationTab() { } protected ButtonTextField init_createGoPackageField() { - return new EnablementButtonTextField("Go package to build:", null, "Select...") { - @Override - protected String getDefaultFieldValue() throws CommonException { - return null; - } - - @Override - protected void createContents_all(Composite topControl) { - super.createContents_all(topControl); - - buildTypeField.createComponent(topControl, new GridData(GridData.FILL_HORIZONTAL)); - } - - @Override - protected String getNewValueFromButtonSelection() throws StatusException { - return GoMainLaunchConfigurationTab.this.openProgramPathDialog(validateProject()); - } - - }; + return new GoPackageField("Go package to build:", null, "Select..."); } protected ComboOptionsField init_createBuildTypeField() { @@ -96,13 +79,6 @@ protected CheckBoxField createUseDefaultField(String enablementCheckBoxLabel) { }; } - @Override - protected void createCustomControls(Composite parent) { - goPackageField.createComponent(parent, new GridData(GridData.FILL_HORIZONTAL)); -// buildTargetField.createComponent(parent, new GridData(GridData.FILL_HORIZONTAL)); - programPathField.createComponent(parent, new GridData(GridData.FILL_HORIZONTAL)); - } - @Override protected void initBindings() { super.initBindings(); @@ -110,29 +86,38 @@ protected void initBindings() { buildTypeField.addValueChangedListener(this::buildTargetFieldChanged); } - /* ----------------- ----------------- */ + /* ----------------- Control creation ----------------- */ @Override - public void initializeFrom(ILaunchConfiguration config) { - super.initializeFrom(config); - String buildTargetName = getConfigAttribute(config, LaunchConstants.ATTR_BUILD_TARGET, ""); - String buildConfiguration = LangCore.getBuildManager().getBuildConfigString(buildTargetName); - String buildTypeName = LangCore.getBuildManager().getBuildTypeString(buildTargetName); - goPackageField.setFieldValue(buildConfiguration); - buildTypeField.setFieldValue(buildTypeName); - if(buildTypeField.getFieldValue() == null) { - buildTypeField.setFieldValue(buildTypeField.getComboOptions().get(0)); - } + protected void createCustomControls(Composite parent) { + goPackageField.createComponent(parent, new GridData(GridData.FILL_HORIZONTAL)); +// buildTargetField.createComponent(parent, new GridData(GridData.FILL_HORIZONTAL)); + programPathField.createComponent(parent, new GridData(GridData.FILL_HORIZONTAL)); } - @Override - protected String getBuildTargetName() { - String buildType = buildTypeField.getFieldValue(); - return goPackageField.getFieldValue() + StringUtil.prefixStr("#", buildType); + protected class GoPackageField extends EnablementButtonTextField { + public GoPackageField(String labelText, String useDefaultField_Label, String buttonlabel) { + super(labelText, useDefaultField_Label, buttonlabel); + } + + @Override + protected String getDefaultFieldValue() throws CommonException { + return null; + } + + @Override + protected void createContents_all(Composite topControl) { + super.createContents_all(topControl); + + buildTypeField.createComponent(topControl, new GridData(GridData.FILL_HORIZONTAL)); + } + + @Override + protected String getNewValueFromButtonSelection() throws StatusException { + return GoMainLaunchConfigurationTab.this.openProgramPathDialog(validateProject()); + } } - /* ----------------- ----------------- */ - protected String openProgramPathDialog(IProject project) { // TODO: this should be refactored to show only main packages @@ -164,4 +149,25 @@ public String getText(Object element) { return null; } + /* ----------------- save/apply ----------------- */ + + @Override + public void initializeFrom(ILaunchConfiguration config) { + super.initializeFrom(config); + String buildTargetName = getConfigAttribute(config, LaunchConstants.ATTR_BUILD_TARGET, ""); + String buildConfiguration = LangCore.getBuildManager().getBuildConfigString(buildTargetName); + String buildTypeName = LangCore.getBuildManager().getBuildTypeString(buildTargetName); + goPackageField.setFieldValue(buildConfiguration); + buildTypeField.setFieldValue(buildTypeName); + if(buildTypeField.getFieldValue() == null) { + buildTypeField.setFieldValue(buildTypeField.getComboOptions().get(0)); + } + } + + @Override + protected String getBuildTargetName() { + String buildType = buildTypeField.getFieldValue(); + return goPackageField.getFieldValue() + StringUtil.prefixStr("#", buildType); + } + } \ No newline at end of file diff --git a/plugin_tooling/src/com/googlecode/goclipse/tooling/env/GoEnvironment.java b/plugin_tooling/src/com/googlecode/goclipse/tooling/env/GoEnvironment.java index 672958e79..2c6b054ff 100644 --- a/plugin_tooling/src/com/googlecode/goclipse/tooling/env/GoEnvironment.java +++ b/plugin_tooling/src/com/googlecode/goclipse/tooling/env/GoEnvironment.java @@ -161,10 +161,6 @@ public Location getGoRootToolsDir() throws CommonException { /* ----------------- process builder ----------------- */ - public ProcessBuilder createProcessBuilder(List commandLine) throws CommonException { - return createProcessBuilder(commandLine, null); - } - public ProcessBuilder createProcessBuilder(List commandLine, Location workingDir) throws CommonException { return createProcessBuilder(commandLine, workingDir, true); } @@ -172,7 +168,11 @@ public ProcessBuilder createProcessBuilder(List commandLine, Location wo public ProcessBuilder createProcessBuilder(List commandLine, Location workingDir, boolean goRootInPath) throws CommonException { ProcessBuilder pb = ProcessUtils.createProcessBuilder(commandLine, workingDir); - + setupProcessEnv(pb, goRootInPath); + return pb; + } + + public void setupProcessEnv(ProcessBuilder pb, boolean goRootInPath) throws CommonException { Map env = pb.environment(); putMapEntry(env, GoEnvironmentConstants.GOROOT, goRoot.asString()); @@ -189,8 +189,6 @@ public ProcessBuilder createProcessBuilder(List commandLine, Location wo // Add GoRoot to path. See #113 for rationale ProcessUtils.addDirToPathEnv(getGoRoot_Location().toPath(), pb); } - - return pb; } protected void putMapEntry(Map env, String key, String value) {