From 181747590c7d988fa3f2a137419e8f6b02402bbe Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Wed, 13 Apr 2016 19:35:23 +0200 Subject: [PATCH] [platform] introduces binary process handler --- .../process/BinaryOSProcessHandler.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 platform/platform-api/src/com/intellij/execution/process/BinaryOSProcessHandler.java diff --git a/platform/platform-api/src/com/intellij/execution/process/BinaryOSProcessHandler.java b/platform/platform-api/src/com/intellij/execution/process/BinaryOSProcessHandler.java new file mode 100644 index 000000000000..88ab706f9b86 --- /dev/null +++ b/platform/platform-api/src/com/intellij/execution/process/BinaryOSProcessHandler.java @@ -0,0 +1,62 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * 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.intellij.execution.process; + +import com.intellij.execution.ExecutionException; +import com.intellij.execution.configurations.GeneralCommandLine; +import com.intellij.openapi.util.io.BufferExposingByteArrayOutputStream; +import com.intellij.util.io.BaseDataReader; +import com.intellij.util.io.BinaryOutputReader; +import org.jetbrains.annotations.NotNull; + +import java.io.InputStream; +import java.util.concurrent.Future; + +public class BinaryOSProcessHandler extends OSProcessHandler { + private final BufferExposingByteArrayOutputStream myOutput = new BufferExposingByteArrayOutputStream(); + + public BinaryOSProcessHandler(@NotNull GeneralCommandLine commandLine) throws ExecutionException { + super(commandLine); + } + + @NotNull + public byte[] getOutput() { + return myOutput.getInternalBuffer(); + } + + @NotNull + @Override + protected BaseDataReader createOutputDataReader() { + return new SimpleBinaryReader(myProcess.getInputStream(), readerOptions().policy()); + } + + private class SimpleBinaryReader extends BinaryOutputReader { + private SimpleBinaryReader(InputStream stream, SleepingPolicy policy) { + super(stream, policy); + } + + @Override + protected void onBinaryAvailable(@NotNull byte[] data, int size) { + myOutput.write(data, 0, size); + } + + @NotNull + @Override + protected Future executeOnPooledThread(@NotNull Runnable runnable) { + return BinaryOSProcessHandler.this.executeOnPooledThread(runnable); + } + } +} \ No newline at end of file