package krasa.visualvm;
import com.intellij.execution.CantRunException;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.runners.JavaProgramPatcher;
import com.intellij.openapi.diagnostic.Logger;
import krasa.visualvm.action.StartVisualVMConsoleAction;
public class VisualVMJavaProgramPatcher extends JavaProgramPatcher {
private static final Logger log = Logger.getInstance(VisualVMJavaProgramPatcher.class.getName());
long lastExecution;
@Override
public void patchJavaParameters(Executor executor, RunProfile configuration, JavaParameters javaParameters) {
LogHelper.print("#patchJavaParameters start", this);
if (Hacks.BUNDLED_SERVERS_RUN_PROFILE.equals(configuration.getClass().getName())) {
LogHelper.print("patchJavaParameters com.intellij.javaee.run.configuration.CommonStrategy", this);
if (System.currentTimeMillis() - lastExecution > 1000) {
LogHelper.print("patchJavaParameters com.intellij.javaee.run.configuration.CommonStrategy patching", this);
VisualVMContext visualVMContext = patch(javaParameters);
new StartVisualVMConsoleAction().setVisualVMContextToRecentlyCreated(visualVMContext);
lastExecution = System.currentTimeMillis();
}
} else {
patch(javaParameters);
}
}
private VisualVMContext patch(JavaParameters javaParameters) {
String jdkPath = null;
try {
if (javaParameters.getJdk() != null && javaParameters.getJdk().getHomeDirectory() != null) {
jdkPath = javaParameters.getJdkPath();
}
} catch (CantRunException e) {
// return;
}
final Long appId = VisualVMHelper.getNextID();
LogHelper.print("Patching: jdkPath=" + jdkPath + "; appId=" + appId, this);
for (String arg : VisualVMHelper.getJvmArgs(appId)) {
javaParameters.getVMParametersList().prepend(arg);
}
VisualVMContext visualVMContext = new VisualVMContext(appId, jdkPath);
visualVMContext.save();
return visualVMContext;
}
}