Skip to content

Commit

Permalink
- build.gradle.template updated to build for eclipse plugins
Browse files Browse the repository at this point in the history
- Added Gradle plugin to Moonshine settings
- Added check and update Gradle classpath prior to start language-server to Gradle project
(reference #547)
  • Loading branch information
rat-moonshine committed May 14, 2019
1 parent d89e250 commit d5122b6
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ package actionScripts.impls
import actionScripts.plugins.away3d.Away3DPlugin;
import actionScripts.plugins.core.ProjectBridgeImplBase;
import actionScripts.plugins.git.GitHubPlugin;
import actionScripts.plugins.gradle.GradleBuildPlugin;
import actionScripts.plugins.help.view.TourDeFlexContentsView;
import actionScripts.plugins.help.view.events.VisualEditorEvent;
import actionScripts.plugins.maven.MavenBuildPlugin;
Expand Down Expand Up @@ -194,6 +195,7 @@ package actionScripts.impls
FullscreenPlugin,
AntBuildPlugin,
MavenBuildPlugin,
GradleBuildPlugin,
RunJavaProject,
PreviewPrimeFacesProjectPlugin,
SearchPlugin,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,47 +19,52 @@
////////////////////////////////////////////////////////////////////////////////
package actionScripts.languageServer
{
import actionScripts.events.GlobalEventDispatcher;
import actionScripts.events.ProjectEvent;
import actionScripts.languageServer.LanguageClient;
import actionScripts.locator.IDEModel;
import actionScripts.plugin.console.ConsoleOutputter;
import actionScripts.plugin.java.javaproject.vo.JavaProjectVO;
import actionScripts.utils.HtmlFormatter;
import actionScripts.valueObjects.ConstantsCoreVO;
import actionScripts.valueObjects.ProjectVO;
import actionScripts.valueObjects.Settings;

import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
import flash.events.NativeProcessExitEvent;
import flash.events.ProgressEvent;
import flash.filesystem.File;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.utils.ByteArray;
import flash.utils.IDataInput;

import no.doomsday.console.ConsoleUtil;
import flash.events.EventDispatcher;
import mx.core.FlexGlobals;
import mx.managers.PopUpManager;
import mx.utils.SHA256;
import flash.utils.ByteArray;
import components.popup.StandardPopup;

import spark.components.Button;
import flash.events.MouseEvent;
import mx.managers.PopUpManager;
import mx.core.FlexGlobals;
import flash.display.DisplayObject;

import actionScripts.events.ExecuteLanguageServerCommandEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import actionScripts.events.FilePluginEvent;
import actionScripts.events.GlobalEventDispatcher;
import actionScripts.events.ProjectEvent;
import actionScripts.events.StatusBarEvent;
import actionScripts.factory.FileLocation;
import actionScripts.languageServer.LanguageClient;
import actionScripts.locator.IDEModel;
import actionScripts.plugin.console.ConsoleOutputEvent;
import actionScripts.ui.editor.JavaTextEditor;
import actionScripts.plugin.console.ConsoleOutputter;
import actionScripts.plugin.java.javaproject.vo.JavaProjectVO;
import actionScripts.ui.editor.BasicTextEditor;
import actionScripts.events.StatusBarEvent;
import actionScripts.ui.editor.JavaTextEditor;
import actionScripts.utils.EnvironmentSetupUtils;
import actionScripts.utils.HtmlFormatter;
import actionScripts.utils.UtilsCore;
import actionScripts.utils.applyWorkspaceEdit;
import actionScripts.valueObjects.WorkspaceEdit;
import actionScripts.events.FilePluginEvent;
import actionScripts.utils.getProjectSDKPath;
import actionScripts.factory.FileLocation;
import actionScripts.valueObjects.ConstantsCoreVO;
import actionScripts.valueObjects.ProjectVO;
import actionScripts.valueObjects.Settings;
import actionScripts.valueObjects.WorkspaceEdit;

import components.popup.StandardPopup;

import no.doomsday.console.ConsoleUtil;

[Event(name="init",type="flash.events.Event")]
[Event(name="close",type="flash.events.Event")]
Expand Down Expand Up @@ -110,7 +115,7 @@ package actionScripts.languageServer
_dispatcher.addEventListener(ExecuteLanguageServerCommandEvent.EVENT_EXECUTE_COMMAND, executeLanguageServerCommandHandler);

prepareApplicationStorage();
startNativeProcess();
preTaskLanguageServer();
}

public function get project():ProjectVO
Expand Down Expand Up @@ -178,6 +183,14 @@ package actionScripts.languageServer
_languageClient.removeEventListener(Event.CLOSE, languageClient_closeHandler);
_languageClient = null;
}

private function preTaskLanguageServer():void
{
if (!requireUpdateGradleClasspath())
{
startNativeProcess();
}
}

private function prepareApplicationStorage():void
{
Expand Down Expand Up @@ -216,6 +229,67 @@ package actionScripts.languageServer
);
}
}

private function requireUpdateGradleClasspath():Boolean
{
// in case of Gradle project we need to
// update its eclipse plugin
if (IDEModel.getInstance().gradlePath && _project.hasGradleBuild())
{
if(_nativeProcess)
{
trace("Error: Java language server process already exists!");
return true;
}

var gradleFolder:File = new File(IDEModel.getInstance().gradlePath);
var gradleFileName:String = (Settings.os == "win") ? "gradle.bat" : "gradle";
gradleFileName = gradleFolder.resolvePath("bin/"+gradleFileName).nativePath;

var compilerArg:String = "\""+ gradleFileName +"\" eclipse";
EnvironmentSetupUtils.getInstance().initCommandGenerationToSetLocalEnvironment(onEnvironmentPrepared, null, [compilerArg]);
GlobalEventDispatcher.getInstance().dispatchEvent(new StatusBarEvent(
StatusBarEvent.LANGUAGE_SERVER_STATUS,
null, "Updating Gradle classpath", false
));
return true;
}

return false;

/*
* @local
*/
function onEnvironmentPrepared(value:String):void
{
var cmdFile:File;
var processArgs:Vector.<String> = new <String>[];

if (Settings.os == "win")
{
cmdFile = new File("c:\\Windows\\System32\\cmd.exe");
processArgs.push("/c");
processArgs.push(value);
}
else
{
cmdFile = new File("/bin/bash");
processArgs.push("-c");
processArgs.push(value);
}

_shellInfo = new NativeProcessStartupInfo();
_shellInfo.arguments = processArgs;
_shellInfo.executable = cmdFile;
_shellInfo.workingDirectory = new File(_project.folderLocation.fileBridge.nativePath);

_nativeProcess = new NativeProcess();
_nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, shellDataOnGradleClasspath);
_nativeProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, shellErrorOnGradleClasspath);
_nativeProcess.addEventListener(NativeProcessExitEvent.EXIT, shellExitAfterGradleClasspath);
_nativeProcess.start(_shellInfo);
}
}

private function startNativeProcess():void
{
Expand Down Expand Up @@ -351,7 +425,7 @@ package actionScripts.languageServer

if(!_waitingToRestart)
{
startNativeProcess();
preTaskLanguageServer();
}
}

Expand All @@ -378,6 +452,25 @@ package actionScripts.languageServer
ConsoleOutputter.formatOutput(HtmlFormatter.sprintfa(data, null), 'weak');
trace(data);
}

private function shellErrorOnGradleClasspath(e:ProgressEvent):void
{
var output:IDataInput = _nativeProcess.standardError;
var data:String = output.readUTFBytes(output.bytesAvailable);
ConsoleUtil.print("shellError while updating Gradle classpath" + data + ".");
ConsoleOutputter.formatOutput(HtmlFormatter.sprintfa(data, null), 'weak');
trace(data);
}

private function shellDataOnGradleClasspath(e:ProgressEvent):void
{
if(_nativeProcess)
{
var output:IDataInput = _nativeProcess.standardOutput;
var data:String = output.readUTFBytes(output.bytesAvailable);
ConsoleOutputter.formatOutput(HtmlFormatter.sprintfa(data, null), 'weak');
}
}

private function shellExit(e:NativeProcessExitEvent):void
{
Expand All @@ -398,6 +491,20 @@ package actionScripts.languageServer
if(_waitingToRestart)
{
_waitingToRestart = false;
preTaskLanguageServer();
}
}

private function shellExitAfterGradleClasspath(event:NativeProcessExitEvent):void
{
_nativeProcess.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA, shellErrorOnGradleClasspath);
_nativeProcess.removeEventListener(NativeProcessExitEvent.EXIT, shellExitAfterGradleClasspath);
_nativeProcess.removeEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, shellDataOnGradleClasspath);
_nativeProcess.exit();
_nativeProcess = null;

if (event.exitCode == 0)
{
startNativeProcess();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package actionScripts.plugins.gradle
{
import actionScripts.plugin.settings.ISettingsProvider;
import actionScripts.plugin.settings.vo.ISetting;
import actionScripts.plugin.settings.vo.PathSetting;
import actionScripts.plugins.build.ConsoleBuildPluginBase;
import actionScripts.valueObjects.ConstantsCoreVO;

public class GradleBuildPlugin extends ConsoleBuildPluginBase implements ISettingsProvider
{
protected var status:int;
protected var stopWithoutMessage:Boolean;

protected var buildId:String;
private var isProjectHasInvalidPaths:Boolean;

private static const BUILD_SUCCESS:RegExp = /BUILD SUCCESS/;
private static const WARNING:RegExp = /\[WARNING\]/;
private static const BUILD_FAILED:RegExp = /BUILD FAILED/;
private static const BUILD_FAILURE:RegExp = /BUILD FAILURE/;
private static const ERROR:RegExp = /\[ERROR\]/;

public function GradleBuildPlugin()
{
super();
}

override public function get name():String
{
return "Gradle Build Setup";
}

override public function get author():String
{
return ConstantsCoreVO.MOONSHINE_IDE_LABEL +" Project Team";
}

override public function get description():String
{
return "Apache Gradle® Build Plugin. Esc exits.";
}

public function get gradlePath():String
{
return model ? model.gradlePath : null;
}

public function set gradlePath(value:String):void
{
if (model.gradlePath != value)
{
model.gradlePath = value;
}
}

public function getSettingsList():Vector.<ISetting>
{
return Vector.<ISetting>([
new PathSetting(this, 'gradlePath', 'Gradle Home', true, gradlePath)
]);
}

override public function activate():void
{
super.activate();

/*dispatcher.addEventListener(GradleBuildEvent.START_GRADLE_BUILD, startConsoleBuildHandler);
dispatcher.addEventListener(GradleBuildEvent.STOP_GRADLE_BUILD, stopConsoleBuildHandler);*/
}

override public function deactivate():void
{
super.deactivate();

/*dispatcher.removeEventListener(GradleBuildEvent.START_GRADLE_BUILD, startConsoleBuildHandler);
dispatcher.removeEventListener(GradleBuildEvent.STOP_GRADLE_BUILD, stopConsoleBuildHandler);*/
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ package actionScripts.locator
public var antHomePath:FileLocation;
public var antScriptFile:FileLocation;
public var mavenPath:String;
public var gradlePath:String;
public var javaPathForTypeAhead:FileLocation;
public var svnPath:String;
public var gitPath:String;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
plugins {
id 'java'
id 'application' // allows 'run' task.
id 'eclipse' // allows dependencies to be exported to .classpath
}
repositories {
mavenCentral()
Expand Down

0 comments on commit d5122b6

Please sign in to comment.