@Nullable @Override public String execute(@NotNull QueryStringDecoder urlDecoder, @NotNull FullHttpRequest request, @NotNull ChannelHandlerContext context) throws IOException { final JsonReader reader = createJsonReader(request); reader.beginObject(); final String name = reader.nextName(); final String url = reader.nextString(); reader.endObject(); if (URL_PARAM_NAME.equals(name) && url != null && url.startsWith(JetBrainsProtocolHandler.PROTOCOL)) { JetBrainsProtocolHandler.processJetBrainsLauncherParameters(url); ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { JBProtocolCommand.handleCurrentCommand(); } }, ModalityState.any()); } sendOk(request, context); return null; }
private static String[] checkForJetBrainsProtocolCommand(String[] args) { final String jbUrl = System.getProperty(JetBrainsProtocolHandler.class.getName()); if (jbUrl != null) { return new String[]{jbUrl}; } return args; }
/** * 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; } }; }
private static boolean isShutdownCommand() { return "shutdown".equals(JetBrainsProtocolHandler.getCommand()); }