Make com.facebook.buck.util.concurrent.MoreExecutors available to our JUnitRunner.
Summary:
BuckBlockJUnit4ClassRunner contains some copy/paste code from MoreExecutors because
our JUnit runner uses a restricted classpath. This diff refactors things to share
the MoreExecutors code with our JUnitRunner.
Also remove duplicate documentation in BuckBlockJUnit4ClassRunner.
Test Plan: Sandcastle builds.
diff --git a/build.xml b/build.xml
index 7e075b7..7520c21 100644
--- a/build.xml
+++ b/build.xml
@@ -7,7 +7,6 @@
<property name="lib.dir" value="${basedir}/lib" />
<property name="third-party.dir" value="${basedir}/third-party" />
<property name="build.dir" value="${basedir}/build" />
- <property name="testrunner.src.dir" value="${src.dir}/com/facebook/buck/junit/" />
<property name="testrunner.classes.dir" value="${build.dir}/testrunner/classes" />
<property name="abi_processor.src.dir" value="${src.dir}/com/facebook/buck/java/abi/" />
<property name="abi_processor.classes.dir" value="${build.dir}/abi_processor/classes" />
@@ -90,7 +89,8 @@
<target name="compile-testrunner" depends="checkversion">
<mkdir dir="${testrunner.classes.dir}" />
- <javac srcdir="${testrunner.src.dir}"
+ <javac srcdir="${src.dir}"
+ includes="com/facebook/buck/junit/**,src/com/facebook/buck/util/concurrent/MoreExecutors.java"
destdir="${testrunner.classes.dir}"
classpathref="junit"
debug="on"
diff --git a/src/com/facebook/buck/junit/BUCK b/src/com/facebook/buck/junit/BUCK
index d91e09c..87e05ea 100644
--- a/src/com/facebook/buck/junit/BUCK
+++ b/src/com/facebook/buck/junit/BUCK
@@ -6,6 +6,7 @@
# Java API. The objective is to limit the set of files added to the ClassLoader that runs the
# test, as not to interfere with the results of the test.
'//lib:junit',
+ '//src/com/facebook/buck/util/concurrent:concurrent_for_junit_runner',
],
visibility = [
'//test/com/facebook/buck/junit:junit',
diff --git a/src/com/facebook/buck/junit/BuckBlockJUnit4ClassRunner.java b/src/com/facebook/buck/junit/BuckBlockJUnit4ClassRunner.java
index 5674f34..f6e8962 100644
--- a/src/com/facebook/buck/junit/BuckBlockJUnit4ClassRunner.java
+++ b/src/com/facebook/buck/junit/BuckBlockJUnit4ClassRunner.java
@@ -16,6 +16,8 @@
package com.facebook.buck.junit;
+import com.facebook.buck.util.concurrent.MoreExecutors;
+
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Timeout;
@@ -36,8 +38,6 @@
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -55,15 +55,7 @@
// Executors.newSingleThreadExecutor(). The problem with Executors.newSingleThreadExecutor() is
// that it does not let us specify a RejectedExecutionHandler, which we need to ensure that
// garbage is not spewed to the user's console if the build fails.
- // Executors.newSingleThreadExecutor(). The problem with Executors.newSingleThreadExecutor() is
- // that it does not let us specify a RejectedExecutionHandler, which we need to ensure that
- // garbage is not spewed to the user's console if the build fails.
- private final ExecutorService executor = new ThreadPoolExecutor(
- /* corePoolSize */ 1,
- /* maximumPoolSize */ 1,
- /* keepAliveTime */ 0L, TimeUnit.MILLISECONDS,
- /* workQueue */ new LinkedBlockingQueue<Runnable>(),
- /* handler */ new ThreadPoolExecutor.DiscardPolicy());
+ private final ExecutorService executor = MoreExecutors.newSingleThreadExecutor();
private final long defaultTestTimeoutMillis;
diff --git a/src/com/facebook/buck/util/concurrent/BUCK b/src/com/facebook/buck/util/concurrent/BUCK
index 92540c6..8ef25f2 100644
--- a/src/com/facebook/buck/util/concurrent/BUCK
+++ b/src/com/facebook/buck/util/concurrent/BUCK
@@ -7,3 +7,13 @@
visibility = ['PUBLIC'],
)
+java_library(
+ name = 'concurrent_for_junit_runner',
+ srcs = [ 'MoreExecutors.java' ],
+ deps = [
+ # IMPORTANT! This list is to remain empty. See src/com/facebook/buck/junit/BUCK.
+ ],
+ visibility = [
+ '//src/com/facebook/buck/junit:junit',
+ ],
+)