| /* |
| * Copyright 2016 The Bazel Authors. All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.google.idea.blaze.java.run; |
| |
| import com.google.idea.blaze.base.model.primitives.Kind; |
| import com.google.idea.blaze.base.run.BlazeCommandRunConfiguration; |
| import com.google.idea.sdkcompat.debugger.GenericDebuggerRunnerSdkCompatAdapter; |
| import com.intellij.execution.ExecutionException; |
| import com.intellij.execution.configurations.JavaParameters; |
| import com.intellij.execution.configurations.RemoteConnection; |
| import com.intellij.execution.configurations.RunProfile; |
| import com.intellij.execution.configurations.RunProfileState; |
| import com.intellij.execution.configurations.RunnerSettings; |
| import com.intellij.execution.executors.DefaultDebugExecutor; |
| import com.intellij.execution.runners.ExecutionEnvironment; |
| import com.intellij.execution.ui.RunContentDescriptor; |
| import javax.annotation.Nullable; |
| |
| /** A runner that adapts the GenericDebuggerRunner to work with Blaze run configurations. */ |
| public class BlazeJavaDebuggerRunner extends GenericDebuggerRunnerSdkCompatAdapter { |
| |
| // wait 10 minutes for the blaze build to complete before connecting |
| private static final long POLL_TIMEOUT_MILLIS = 10 * 60 * 1000; |
| |
| @Override |
| public String getRunnerId() { |
| return "Blaze-Debug"; |
| } |
| |
| @Override |
| public boolean canRun(final String executorId, final RunProfile profile) { |
| if (executorId.equals(DefaultDebugExecutor.EXECUTOR_ID) |
| && profile instanceof BlazeCommandRunConfiguration) { |
| BlazeCommandRunConfiguration configuration = (BlazeCommandRunConfiguration) profile; |
| Kind kind = configuration.getKindForTarget(); |
| return kind != null && BlazeJavaRunConfigurationHandlerProvider.supportsKind(kind); |
| } |
| return false; |
| } |
| |
| @Override |
| public void patch( |
| JavaParameters javaParameters, |
| RunnerSettings runnerSettings, |
| RunProfile runProfile, |
| final boolean beforeExecution) { |
| // We don't want to support Java run configuration patching. |
| } |
| |
| @Override |
| @Nullable |
| public RunContentDescriptor createContentDescriptor( |
| RunProfileState state, ExecutionEnvironment environment) throws ExecutionException { |
| if (!(state instanceof BlazeJavaRunProfileState)) { |
| return null; |
| } |
| BlazeJavaRunProfileState blazeState = (BlazeJavaRunProfileState) state; |
| RemoteConnection connection = blazeState.getRemoteConnection(); |
| return attachVirtualMachine(state, environment, connection, POLL_TIMEOUT_MILLIS); |
| } |
| } |