Search in sources :

Example 1 with JavaCommandLineState

use of com.intellij.execution.configurations.JavaCommandLineState in project intellij by bazelbuild.

the class BlazeIntellijPluginConfiguration method getState.

/**
 * Plugin jar has been previously created via blaze build. This method: - copies jar to sandbox
 * environment - cracks open jar and finds plugin.xml (with ID, etc., needed for JVM args) - sets
 * up the SDK, etc. (use project SDK?) - sets up the JVM, and returns a JavaCommandLineState
 */
@Nullable
@Override
public RunProfileState getState(Executor executor, ExecutionEnvironment env) throws ExecutionException {
    final Sdk ideaJdk = pluginSdk;
    if (!IdeaJdkHelper.isIdeaJdk(ideaJdk)) {
        throw new ExecutionException("Choose an IntelliJ Platform Plugin SDK");
    }
    String sandboxHome = IdeaJdkHelper.getSandboxHome(ideaJdk);
    if (sandboxHome == null) {
        throw new ExecutionException("No sandbox specified for IntelliJ Platform Plugin SDK");
    }
    try {
        sandboxHome = new File(sandboxHome).getCanonicalPath();
    } catch (IOException e) {
        throw new ExecutionException("No sandbox specified for IntelliJ Platform Plugin SDK");
    }
    String buildNumber = IdeaJdkHelper.getBuildNumber(ideaJdk);
    final BlazeIntellijPluginDeployer deployer = new BlazeIntellijPluginDeployer(sandboxHome, buildNumber, getTarget());
    env.putUserData(BlazeIntellijPluginDeployer.USER_DATA_KEY, deployer);
    // copy license from running instance of idea
    IdeaJdkHelper.copyIDEALicense(sandboxHome);
    return new JavaCommandLineState(env) {

        @Override
        protected JavaParameters createJavaParameters() throws ExecutionException {
            List<String> pluginIds = deployer.deployNonBlocking();
            final JavaParameters params = new JavaParameters();
            ParametersList vm = params.getVMParametersList();
            fillParameterList(vm, vmParameters);
            fillParameterList(params.getProgramParametersList(), programParameters);
            IntellijWithPluginClasspathHelper.addRequiredVmParams(params, ideaJdk);
            vm.defineProperty(JetBrainsProtocolHandler.REQUIRED_PLUGINS_KEY, Joiner.on(',').join(pluginIds));
            if (!vm.hasProperty(PlatformUtils.PLATFORM_PREFIX_KEY) && buildNumber != null) {
                String prefix = IdeaJdkHelper.getPlatformPrefix(buildNumber);
                if (prefix != null) {
                    vm.defineProperty(PlatformUtils.PLATFORM_PREFIX_KEY, prefix);
                }
            }
            return params;
        }

        @Override
        protected OSProcessHandler startProcess() throws ExecutionException {
            deployer.blockUntilDeployComplete();
            final OSProcessHandler handler = super.startProcess();
            handler.addProcessListener(new ProcessAdapter() {

                @Override
                public void processTerminated(ProcessEvent event) {
                    deployer.deleteDeployment();
                }
            });
            return handler;
        }
    };
}
Also used : ProcessAdapter(com.intellij.execution.process.ProcessAdapter) ProcessEvent(com.intellij.execution.process.ProcessEvent) IOException(java.io.IOException) JavaCommandLineState(com.intellij.execution.configurations.JavaCommandLineState) ParametersList(com.intellij.execution.configurations.ParametersList) OSProcessHandler(com.intellij.execution.process.OSProcessHandler) JavaParameters(com.intellij.execution.configurations.JavaParameters) Sdk(com.intellij.openapi.projectRoots.Sdk) ExecutionException(com.intellij.execution.ExecutionException) File(java.io.File) Nullable(javax.annotation.Nullable)

Aggregations

ExecutionException (com.intellij.execution.ExecutionException)1 JavaCommandLineState (com.intellij.execution.configurations.JavaCommandLineState)1 JavaParameters (com.intellij.execution.configurations.JavaParameters)1 ParametersList (com.intellij.execution.configurations.ParametersList)1 OSProcessHandler (com.intellij.execution.process.OSProcessHandler)1 ProcessAdapter (com.intellij.execution.process.ProcessAdapter)1 ProcessEvent (com.intellij.execution.process.ProcessEvent)1 Sdk (com.intellij.openapi.projectRoots.Sdk)1 File (java.io.File)1 IOException (java.io.IOException)1 Nullable (javax.annotation.Nullable)1