1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2016 The Dagger Authors. 3*f585d8a3SJacky Wang * 4*f585d8a3SJacky Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5*f585d8a3SJacky Wang * you may not use this file except in compliance with the License. 6*f585d8a3SJacky Wang * You may obtain a copy of the License at 7*f585d8a3SJacky Wang * 8*f585d8a3SJacky Wang * http://www.apache.org/licenses/LICENSE-2.0 9*f585d8a3SJacky Wang * 10*f585d8a3SJacky Wang * Unless required by applicable law or agreed to in writing, software 11*f585d8a3SJacky Wang * distributed under the License is distributed on an "AS IS" BASIS, 12*f585d8a3SJacky Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*f585d8a3SJacky Wang * See the License for the specific language governing permissions and 14*f585d8a3SJacky Wang * limitations under the License. 15*f585d8a3SJacky Wang */ 16*f585d8a3SJacky Wang 17*f585d8a3SJacky Wang package dagger.internal.codegen; 18*f585d8a3SJacky Wang 19*f585d8a3SJacky Wang import static com.google.common.base.StandardSystemProperty.JAVA_CLASS_PATH; 20*f585d8a3SJacky Wang import static com.google.common.base.StandardSystemProperty.PATH_SEPARATOR; 21*f585d8a3SJacky Wang import static com.google.testing.compile.Compiler.javac; 22*f585d8a3SJacky Wang import static java.util.stream.Collectors.collectingAndThen; 23*f585d8a3SJacky Wang import static java.util.stream.Collectors.toList; 24*f585d8a3SJacky Wang 25*f585d8a3SJacky Wang import com.google.auto.value.processor.AutoAnnotationProcessor; 26*f585d8a3SJacky Wang import com.google.common.base.Splitter; 27*f585d8a3SJacky Wang import com.google.common.collect.ImmutableList; 28*f585d8a3SJacky Wang import com.google.testing.compile.Compiler; 29*f585d8a3SJacky Wang import java.io.File; 30*f585d8a3SJacky Wang import java.util.Arrays; 31*f585d8a3SJacky Wang import javax.annotation.processing.Processor; 32*f585d8a3SJacky Wang 33*f585d8a3SJacky Wang /** {@link Compiler} instances for testing Dagger. */ 34*f585d8a3SJacky Wang public final class Compilers { 35*f585d8a3SJacky Wang private static final String GUAVA = "guava"; 36*f585d8a3SJacky Wang 37*f585d8a3SJacky Wang static final ImmutableList<File> CLASS_PATH_WITHOUT_GUAVA_OPTION = 38*f585d8a3SJacky Wang Splitter.on(PATH_SEPARATOR.value()).splitToList(JAVA_CLASS_PATH.value()).stream() 39*f585d8a3SJacky Wang .filter(jar -> !jar.contains(GUAVA)) 40*f585d8a3SJacky Wang // Remove Bazel's runner deploy jar which leaks Guava classes into the classpath and 41*f585d8a3SJacky Wang // the compile testing tests. 42*f585d8a3SJacky Wang .filter(jar -> !jar.contains("Runner_deploy.jar")) 43*f585d8a3SJacky Wang // Remove the kotlin-compiler jar which leaks Guava classes into the classpath and 44*f585d8a3SJacky Wang // the compile testing tests. 45*f585d8a3SJacky Wang .filter(jar -> !jar.contains("kotlin-compiler.jar")) 46*f585d8a3SJacky Wang .map(File::new) 47*f585d8a3SJacky Wang .collect(collectingAndThen(toList(), ImmutableList::copyOf)); 48*f585d8a3SJacky Wang 49*f585d8a3SJacky Wang static final ImmutableList<String> DEFAULT_JAVACOPTS = 50*f585d8a3SJacky Wang ImmutableList.of( 51*f585d8a3SJacky Wang "-Adagger.experimentalDaggerErrorMessages=enabled"); 52*f585d8a3SJacky Wang 53*f585d8a3SJacky Wang /** 54*f585d8a3SJacky Wang * Returns a compiler that runs the Dagger and {@code @AutoAnnotation} processors, along with 55*f585d8a3SJacky Wang * extras. 56*f585d8a3SJacky Wang */ daggerCompiler(Processor... extraProcessors)57*f585d8a3SJacky Wang public static Compiler daggerCompiler(Processor... extraProcessors) { 58*f585d8a3SJacky Wang ImmutableList.Builder<Processor> processors = ImmutableList.builder(); 59*f585d8a3SJacky Wang processors.add(new ComponentProcessor(), new AutoAnnotationProcessor()); 60*f585d8a3SJacky Wang processors.add(extraProcessors); 61*f585d8a3SJacky Wang return javac().withProcessors(processors.build()).withOptions(DEFAULT_JAVACOPTS); 62*f585d8a3SJacky Wang } 63*f585d8a3SJacky Wang compilerWithOptions(CompilerMode... compilerModes)64*f585d8a3SJacky Wang public static Compiler compilerWithOptions(CompilerMode... compilerModes) { 65*f585d8a3SJacky Wang ImmutableList.Builder<String> options = ImmutableList.builder(); 66*f585d8a3SJacky Wang for (CompilerMode compilerMode : compilerModes) { 67*f585d8a3SJacky Wang options = options.addAll(compilerMode.javacopts()); 68*f585d8a3SJacky Wang } 69*f585d8a3SJacky Wang return compilerWithOptions(options.build()); 70*f585d8a3SJacky Wang } 71*f585d8a3SJacky Wang compilerWithOptions(String... options)72*f585d8a3SJacky Wang public static Compiler compilerWithOptions(String... options) { 73*f585d8a3SJacky Wang return compilerWithOptions(Arrays.asList(options)); 74*f585d8a3SJacky Wang } 75*f585d8a3SJacky Wang compilerWithOptions(Iterable<String> options)76*f585d8a3SJacky Wang public static Compiler compilerWithOptions(Iterable<String> options) { 77*f585d8a3SJacky Wang return daggerCompiler() 78*f585d8a3SJacky Wang .withOptions(ImmutableList.builder().addAll(DEFAULT_JAVACOPTS).addAll(options).build()); 79*f585d8a3SJacky Wang } 80*f585d8a3SJacky Wang Compilers()81*f585d8a3SJacky Wang private Compilers() {} 82*f585d8a3SJacky Wang } 83