diff --git a/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java b/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java index 22262c59aa2a..3f3dcc647b54 100644 --- a/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java +++ b/plugins/android/src/org/jetbrains/android/facet/AndroidFacet.java @@ -26,6 +26,8 @@ import com.android.sdklib.internal.avd.AvdManager; import com.intellij.CommonBundle; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.configurations.ParametersList; +import com.intellij.execution.process.ProcessHandler; +import com.intellij.execution.process.ProcessOutputTypes; import com.intellij.facet.Facet; import com.intellij.facet.FacetManager; import com.intellij.facet.FacetTypeId; @@ -319,7 +321,7 @@ public class AndroidFacet extends Facet { return myAvdManager; } - public void launchEmulator(@Nullable final String avdName, @NotNull final String commands) { + public void launchEmulator(@Nullable final String avdName, @NotNull final String commands, @Nullable ProcessHandler handler) { AndroidPlatform platform = getConfiguration().getAndroidPlatform(); if (platform != null) { final String emulatorPath = platform.getSdk().getLocation() + File.separator + AndroidUtils.toolPath(EMULATOR); @@ -335,7 +337,10 @@ public class AndroidFacet extends Facet { commandLine.addParameter(s); } } - AndroidUtils.runExternalToolInSeparateThread(getModule().getProject(), commandLine); + if (handler != null) { + handler.notifyTextAvailable(commandLine.getCommandLineString() + '\n', ProcessOutputTypes.STDOUT); + } + AndroidUtils.runExternalToolInSeparateThread(getModule().getProject(), commandLine, handler); } } diff --git a/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java b/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java index be7a595ea92e..9b09f1aef046 100644 --- a/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java +++ b/plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java @@ -239,7 +239,7 @@ public class AndroidModuleBuilder extends JavaModuleBuilder { @Override public void run() { final Project project = module.getProject(); - AndroidUtils.runExternalTool(project, commandLine, true); + AndroidUtils.runExternalTool(project, commandLine, true, null); StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() { public void run() { diff --git a/plugins/android/src/org/jetbrains/android/run/AndroidRunningState.java b/plugins/android/src/org/jetbrains/android/run/AndroidRunningState.java index 753933f346d1..7c06a733ab3e 100644 --- a/plugins/android/src/org/jetbrains/android/run/AndroidRunningState.java +++ b/plugins/android/src/org/jetbrains/android/run/AndroidRunningState.java @@ -357,14 +357,14 @@ public abstract class AndroidRunningState implements RunProfileState, AndroidDeb chooseAvd(); } if (myAvdName != null) { - myFacet.launchEmulator(myAvdName, myCommandLine); + myFacet.launchEmulator(myAvdName, myCommandLine, getProcessHandler()); } else if (getProcessHandler().isStartNotified()) { getProcessHandler().destroyProcess(); } } else { - myFacet.launchEmulator(myAvdName, myCommandLine); + myFacet.launchEmulator(myAvdName, myCommandLine, getProcessHandler()); } } } diff --git a/plugins/android/src/org/jetbrains/android/run/DeviceChooser.java b/plugins/android/src/org/jetbrains/android/run/DeviceChooser.java index 19f42d98afa0..e78d25dfc054 100644 --- a/plugins/android/src/org/jetbrains/android/run/DeviceChooser.java +++ b/plugins/android/src/org/jetbrains/android/run/DeviceChooser.java @@ -219,7 +219,7 @@ public class DeviceChooser extends DialogWrapper implements AndroidDebugBridge.I if (chooser.getExitCode() != OK_EXIT_CODE) return; if (avd == null) return; } - myFacet.launchEmulator(avd != null ? avd.getName() : null, ""); + myFacet.launchEmulator(avd != null ? avd.getName() : null, "", null); } } diff --git a/plugins/android/src/org/jetbrains/android/util/AndroidUtils.java b/plugins/android/src/org/jetbrains/android/util/AndroidUtils.java index 9d4a12f6cad7..06925f9a9c9d 100644 --- a/plugins/android/src/org/jetbrains/android/util/AndroidUtils.java +++ b/plugins/android/src/org/jetbrains/android/util/AndroidUtils.java @@ -27,9 +27,7 @@ import com.intellij.execution.RunManagerEx; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.impl.ConsoleViewImpl; -import com.intellij.execution.process.OSProcessHandler; -import com.intellij.execution.process.ProcessAdapter; -import com.intellij.execution.process.ProcessEvent; +import com.intellij.execution.process.*; import com.intellij.execution.ui.ConsoleView; import com.intellij.execution.ui.ConsoleViewContentType; import com.intellij.facet.ProjectFacetManager; @@ -445,14 +443,23 @@ public class AndroidUtils { public static void runExternalToolInSeparateThread(@NotNull final Project project, @NotNull final GeneralCommandLine commandLine) { + runExternalToolInSeparateThread(project, commandLine, null); + } + + public static void runExternalToolInSeparateThread(@NotNull final Project project, + @NotNull final GeneralCommandLine commandLine, + @Nullable final ProcessHandler processHandler) { ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { - runExternalTool(project, commandLine, false); + runExternalTool(project, commandLine, false, processHandler); } }); } - public static void runExternalTool(final Project project, GeneralCommandLine commandLine, boolean printOutputToConsole) { + public static void runExternalTool(final Project project, + GeneralCommandLine commandLine, + boolean printOutputToAndroidConsole, + ProcessHandler processHandler) { String[] commands = commandLine.getCommands(); String command = StringUtil.join(commands, " "); LOG.info("Execute: " + command); @@ -468,17 +475,22 @@ public class AndroidUtils { result = e.getMessage(); } - if (result != null && printOutputToConsole) { - final ConsoleViewContentType contentType = success ? - ConsoleViewContentType.NORMAL_OUTPUT : - ConsoleViewContentType.ERROR_OUTPUT; - final String finalResult = result; - UIUtil.invokeLaterIfNeeded(new Runnable() { - @Override - public void run() { - printMessageToConsole(project, finalResult, contentType); - } - }); + if (result != null) { + if (printOutputToAndroidConsole) { + final ConsoleViewContentType contentType = success ? + ConsoleViewContentType.NORMAL_OUTPUT : + ConsoleViewContentType.ERROR_OUTPUT; + final String finalResult = result; + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + printMessageToConsole(project, finalResult, contentType); + } + }); + } + else if (processHandler != null) { + processHandler.notifyTextAvailable(result + '\n', ProcessOutputTypes.STDOUT); + } } }