diff options
author | Yohann Roussel <yroussel@google.com> | 2014-12-18 12:17:52 +0100 |
---|---|---|
committer | Yohann Roussel <yroussel@google.com> | 2015-03-10 17:11:56 +0100 |
commit | d6ccb85505c0d7a0bd6544d67f6d43e40775a76b (patch) | |
tree | 62938b6bc8fb0f1b78d844dcaf4884330315234e /jack-tests/src/com/android/jack | |
parent | b001ab34cbf7a73ccfe749be405db9fd67efaa95 (diff) | |
download | toolchain_jack-d6ccb85505c0d7a0bd6544d67f6d43e40775a76b.tar.gz toolchain_jack-d6ccb85505c0d7a0bd6544d67f6d43e40775a76b.tar.bz2 toolchain_jack-d6ccb85505c0d7a0bd6544d67f6d43e40775a76b.zip |
Jack support for annotation processor.
Does not include any support for including class files generated
by annotation processors.
Change-Id: Id4006301d588875f822ff84fa90db10fd616ab00
Diffstat (limited to 'jack-tests/src/com/android/jack')
8 files changed, 103 insertions, 39 deletions
diff --git a/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java b/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java index be3414b3..13fc5bfb 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java +++ b/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java @@ -27,10 +27,12 @@ import com.android.jack.test.runner.RuntimeRunnerFactory; import com.android.jack.test.util.ExecFileException; import com.android.jack.test.util.ExecuteFile; import com.android.jack.util.NamingTools; +import com.android.sched.util.stream.ByteStreamSucker; import org.junit.Assume; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; @@ -583,4 +585,33 @@ public abstract class AbstractTestTools { return rtLocation; } + public static void copyFileToDir(@Nonnull File fileToCopy, @Nonnull String relativePath, + @Nonnull File dest) throws IOException { + FileOutputStream fos = null; + FileInputStream fis = null; + try { + fis = new FileInputStream(fileToCopy); + File copiedFile = new File(dest, relativePath); + File parentDir = copiedFile.getParentFile(); + if (!parentDir.exists()) { + boolean res = parentDir.mkdirs(); + if (!res) { + throw new AssertionError(); + } + } + try { + fos = new FileOutputStream(copiedFile); + ByteStreamSucker sucker = new ByteStreamSucker(fis, fos); + sucker.suck(); + } finally { + if (fos != null) { + fos.close(); + } + } + } finally { + if (fis != null) { + fis.close(); + } + } + } } diff --git a/jack-tests/src/com/android/jack/test/toolchain/IToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/IToolchain.java index 7fa26205..fb97ef6c 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/IToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/IToolchain.java @@ -23,7 +23,6 @@ import java.io.OutputStream; import java.util.List; import javax.annotation.Nonnull; -import javax.annotation.processing.Processor; /** @@ -69,8 +68,8 @@ public interface IToolchain { IToolchain setWithDebugInfos(boolean withDebugInfos); @Nonnull - IToolchain setAnnotationProcessorClass( - @Nonnull Class<? extends Processor> annotationProcessorClass); + IToolchain setAnnotationProcessorClasses( + @Nonnull List<String> annotationProcessorClasses); @Nonnull IToolchain setSourceLevel(@Nonnull SourceLevel sourceLevel); diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java index 2d7f6f2b..52e4b3fa 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java @@ -16,6 +16,7 @@ package com.android.jack.test.toolchain; +import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.android.jack.Options; @@ -194,6 +195,20 @@ public class JackApiV01Toolchain extends JackApiToolchainBase { if (jarjarRules != null) { apiV01Config.setJarJarConfigFile(jarjarRules); } + apiV01Config.setProcessorOptions(annotationProcessorOptions); + + if (annotationProcessorClasses != null) { + apiV01Config.setProcessorNames(annotationProcessorClasses); + } + + + if (processorPath != null) { + List<File> fileList = new ArrayList<File>(); + for (String entry : Splitter.on(File.pathSeparatorChar).split(processorPath)) { + fileList.add(new File(entry)); + } + apiV01Config.setProcessorPath(fileList); + } } private void libToCommon(@Nonnull File... in) throws Exception { diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java index 34610eb8..a08fe713 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java @@ -23,7 +23,9 @@ import com.android.jack.test.TestsProperties; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; @@ -42,16 +44,31 @@ public abstract class JackBasedToolchain extends AndroidToolchain { LEGACY } - - @CheckForNull - protected File annotationProcessorOutDir; @Nonnull protected List<File> resImport = new ArrayList<File>(); + @Nonnull + protected final Map<String, String> annotationProcessorOptions = new HashMap<String, String>(); + @CheckForNull + protected String processorPath; @Nonnull public abstract JackBasedToolchain addProperty(@Nonnull String propertyName, @Nonnull String propertyValue); + @Nonnull + public final JackBasedToolchain addAnnotationProcessorOption(@Nonnull String propertyName, + @Nonnull String propertyValue) { + annotationProcessorOptions.put(propertyName, propertyValue); + return this; + } + + @Nonnull + public final JackBasedToolchain setAnnotationProcessorPath( + @Nonnull String processorPath) { + this.processorPath = processorPath; + return this; + } + public final JackBasedToolchain setMultiDexKind(@Nonnull MultiDexKind kind) { switch (kind) { case NATIVE: @@ -75,13 +92,6 @@ public abstract class JackBasedToolchain extends AndroidToolchain { return this; } - @Nonnull - public final JackBasedToolchain setAnnotationProcessorOutDir( - @Nonnull File annotationProcessorOutDir) { - this.annotationProcessorOutDir = annotationProcessorOutDir; - return this; - } - @Override @Nonnull public JackBasedToolchain setSourceLevel(@Nonnull SourceLevel sourceLevel) { diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java index 3542d03e..c68edda0 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java @@ -16,6 +16,8 @@ package com.android.jack.test.toolchain; +import com.google.common.base.Joiner; + import com.android.jack.Options; import com.android.jack.Options.VerbosityLevel; import com.android.jack.util.ExecuteFile; @@ -82,15 +84,6 @@ public class JackCliToolchain extends JackBasedToolchain { args.add("-g"); } - if (annotationProcessorClass != null) { - args.add("-processor"); - args.add(annotationProcessorClass.getName()); - } - if (annotationProcessorOutDir != null) { - args.add("-d"); - args.add(annotationProcessorOutDir.getAbsolutePath()); - } - AbstractTestTools.addFile(args, /* mustExist = */ false, sources); ExecuteFile exec = new ExecuteFile(args.toArray(new String[args.size()])); @@ -178,14 +171,7 @@ public class JackCliToolchain extends JackBasedToolchain { args.add("-g"); } - if (annotationProcessorClass != null) { - args.add("-processor"); - args.add(annotationProcessorClass.getName()); - } - if (annotationProcessorOutDir != null) { - args.add("-d"); - args.add(annotationProcessorOutDir.getAbsolutePath()); - } + addAnnotationProcessorArgs(args); for (File staticLib : staticLibs) { args.add("--import"); @@ -335,4 +321,21 @@ public class JackCliToolchain extends JackBasedToolchain { return this; } + private void addAnnotationProcessorArgs(@Nonnull List<String> args) { + for (Entry<String, String> entry : annotationProcessorOptions.entrySet()) { + args.add("-A"); + args.add(entry.getKey() + "=" + entry.getValue()); + } + + if (annotationProcessorClasses != null) { + args.add("--processor"); + args.add(Joiner.on(',').join(annotationProcessorClasses)); + } + + if (processorPath != null) { + args.add("--processorpath"); + args.add(processorPath); + } + } + } diff --git a/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java index f35e0538..489ef524 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java @@ -307,9 +307,9 @@ public class LegacyJillToolchain extends JillBasedToolchain { addSourceLevel(sourceLevel, arguments); - if (annotationProcessorClass != null) { + if (annotationProcessorClasses != null) { arguments.add("-processor"); - arguments.add(annotationProcessorClass.getName()); + arguments.add(Joiner.on(',').join(annotationProcessorClasses)); } arguments.add("-bootclasspath"); diff --git a/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java index 809393f1..7a94bd82 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java @@ -16,6 +16,8 @@ package com.android.jack.test.toolchain; +import com.google.common.base.Joiner; + import com.android.dx.command.dexer.Main.Arguments; import com.android.jack.test.TestsProperties; import com.android.jack.test.util.ExecFileException; @@ -228,6 +230,11 @@ public class LegacyToolchain extends AndroidToolchain { } addSourceLevel(sourceLevel, args); + if (annotationProcessorClasses != null) { + args.add("-processor"); + args.add(Joiner.on(',').join(annotationProcessorClasses)); + } + args.add("-encoding"); args.add("utf8"); @@ -283,9 +290,9 @@ public class LegacyToolchain extends AndroidToolchain { arguments.add("-encoding"); arguments.add("utf8"); - if (annotationProcessorClass != null) { + if (annotationProcessorClasses != null) { arguments.add("-processor"); - arguments.add(annotationProcessorClass.getName()); + arguments.add(Joiner.on(',').join(annotationProcessorClasses)); } arguments.add("-bootclasspath"); diff --git a/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java index cf2ed55c..131b055d 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java @@ -27,7 +27,6 @@ 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. @@ -40,7 +39,7 @@ public abstract class Toolchain implements IToolchain { protected List<File> classpath = new ArrayList<File>(); @CheckForNull - protected Class<? extends Processor> annotationProcessorClass; + protected List<String> annotationProcessorClasses; /** * Java source level. @@ -125,9 +124,9 @@ public abstract class Toolchain implements IToolchain { @Override @Nonnull - public final Toolchain setAnnotationProcessorClass( - @Nonnull Class<? extends Processor> annotationProcessorClass) { - this.annotationProcessorClass = annotationProcessorClass; + public final Toolchain setAnnotationProcessorClasses( + @Nonnull List<String> annotationProcessorClasses) { + this.annotationProcessorClasses = annotationProcessorClasses; return this; } |