// Copyright 2015 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). package com.twitter.intellij.pants.service.python.component.impl; // Copyright 2015 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). import com.intellij.execution.RunManagerAdapter; import com.intellij.execution.RunManagerEx; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.jetbrains.python.run.AbstractPythonRunConfiguration; import com.twitter.intellij.pants.service.python.component.PantsPythonProjectComponent; import com.twitter.intellij.pants.util.PantsUtil; import org.jetbrains.annotations.NotNull; import java.util.Optional; public class PantsPythonProjectComponentImpl extends AbstractProjectComponent implements PantsPythonProjectComponent { protected PantsPythonProjectComponentImpl(Project project) { super(project); } @Override public void projectOpened() { super.projectOpened(); if (myProject.isDefault()) { return; } RunManagerEx.getInstanceEx(myProject).addRunManagerListener( new RunManagerAdapter() { @Override public void runConfigurationAdded(@NotNull RunnerAndConfigurationSettings settings) { super.runConfigurationAdded(settings); final RunConfiguration runConfiguration = settings.getConfiguration(); if (!(runConfiguration instanceof AbstractPythonRunConfiguration)) { return; } final String workingDirectory = ((AbstractPythonRunConfiguration)runConfiguration).getWorkingDirectory(); if (StringUtil.isEmpty(workingDirectory)) { final Optional<VirtualFile> projectBuildRoot = PantsUtil.findBuildRoot(myProject); projectBuildRoot.ifPresent(file -> ((AbstractPythonRunConfiguration)runConfiguration).setWorkingDirectory(file.getCanonicalPath())); } } } ); } }