summaryrefslogtreecommitdiffstats
path: root/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java
diff options
context:
space:
mode:
Diffstat (limited to 'jack-tests/src/com/android/jack/test/toolchain/Toolchain.java')
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/Toolchain.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java
new file mode 100644
index 0000000..d35d814
--- /dev/null
+++ b/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * 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.android.jack.test.toolchain;
+
+import java.io.File;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.annotation.processing.Processor;
+
+/**
+ * A toolchain the ouptut of which can be redirected to user defined streams.
+ */
+public abstract class Toolchain implements IToolchain {
+
+ protected boolean withDebugInfos = false;
+
+ @CheckForNull
+ protected Class<? extends Processor> annotationProcessorClass;
+
+ /**
+ * Java source level.
+ */
+ public static enum SourceLevel {
+ JAVA_6,
+ JAVA_7,
+ }
+
+ @Nonnull
+ protected SourceLevel sourceLevel = SourceLevel.JAVA_6;
+ @Nonnull
+ protected List<File> staticLibs = Collections.emptyList();
+ @Nonnull
+ protected List<File> proguardFlags = Collections.emptyList();
+ @CheckForNull
+ protected File jarjarRules;
+
+ @Nonnull
+ protected PrintStream stdOut = System.out;
+ @Nonnull
+ protected PrintStream stdErr = System.err;
+ @Nonnull
+ protected PrintStream outRedirectStream = System.out;
+ @Nonnull
+ protected PrintStream errRedirectStream = System.err;
+
+ Toolchain() {}
+
+ @Override
+ @Nonnull
+ public abstract void srcToExe(@Nonnull String classpath, @Nonnull File out,
+ @Nonnull File... sources) throws Exception;
+
+ @Override
+ @Nonnull
+ public abstract void srcToLib(@Nonnull String classpath, @Nonnull File out,
+ boolean zipFiles, @Nonnull File... sources) throws Exception;
+
+ @Override
+ @Nonnull
+ public abstract void libToDex(@Nonnull File in, @Nonnull File out) throws Exception;
+
+ @Override
+ @Nonnull
+ public abstract void libToLib(@Nonnull File in, @Nonnull File out) throws Exception;
+
+ @Override
+ @Nonnull
+ public Toolchain setWithDebugInfos(boolean withDebugInfos) {
+ this.withDebugInfos = withDebugInfos;
+ return this;
+ }
+
+ @Override
+ @Nonnull
+ public final Toolchain setAnnotationProcessorClass(
+ @Nonnull Class<? extends Processor> annotationProcessorClass) {
+ this.annotationProcessorClass = annotationProcessorClass;
+ return this;
+ }
+
+ @Override
+ @Nonnull
+ public Toolchain setSourceLevel(@Nonnull SourceLevel sourceLevel) {
+ this.sourceLevel = sourceLevel;
+ return this;
+ }
+
+ @Override
+ @Nonnull
+ public final Toolchain addProguardFlags(@Nonnull File... proguardFlags) {
+ if (this.proguardFlags == Collections.EMPTY_LIST) {
+ this.proguardFlags = new ArrayList<File>(proguardFlags.length);
+ }
+ Collections.addAll(this.proguardFlags, proguardFlags);
+ return this;
+ }
+
+ @Override
+ @Nonnull
+ public final Toolchain setJarjarRules(@Nonnull File jarjarRules) {
+ this.jarjarRules = jarjarRules;
+ return this;
+ }
+
+ @Override
+ @Nonnull
+ public final Toolchain addStaticLibs(@Nonnull File... staticLibs) {
+ if (this.staticLibs == Collections.EMPTY_LIST) {
+ this.staticLibs = new ArrayList<File>(staticLibs.length);
+ }
+ Collections.addAll(this.staticLibs, staticLibs);
+ return this;
+ }
+
+ @Override
+ @Nonnull
+ public final Toolchain setOutputStream(@Nonnull OutputStream outputStream) {
+ if (outRedirectStream != null) {
+ outRedirectStream.close();
+ }
+ outRedirectStream = new PrintStream(outputStream);
+ return this;
+ }
+
+ @Override
+ @Nonnull
+ public final Toolchain setErrorStream(@Nonnull OutputStream errorStream) {
+ if (errRedirectStream != null) {
+ errRedirectStream.close();
+ }
+ errRedirectStream = new PrintStream(errorStream);
+ return this;
+ }
+}