1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2017 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.Preconditions.checkState; 20*f585d8a3SJacky Wang 21*f585d8a3SJacky Wang import com.google.common.base.Splitter; 22*f585d8a3SJacky Wang import com.google.common.collect.FluentIterable; 23*f585d8a3SJacky Wang import com.google.common.collect.ImmutableList; 24*f585d8a3SJacky Wang import com.google.common.collect.ImmutableMap; 25*f585d8a3SJacky Wang import java.util.List; 26*f585d8a3SJacky Wang 27*f585d8a3SJacky Wang /** The configuration options for compiler modes. */ 28*f585d8a3SJacky Wang // TODO(bcorso): Consider moving the java version into its own separate enum. 29*f585d8a3SJacky Wang public enum CompilerMode { 30*f585d8a3SJacky Wang DEFAULT_MODE, 31*f585d8a3SJacky Wang DEFAULT_JAVA7_MODE("-source", "7", "-target", "7"), 32*f585d8a3SJacky Wang FAST_INIT_MODE("-Adagger.fastInit=enabled"), 33*f585d8a3SJacky Wang FAST_INIT_JAVA7_MODE("-Adagger.fastInit=enabled", "-source", "7", "-target", "7"), 34*f585d8a3SJacky Wang ; 35*f585d8a3SJacky Wang 36*f585d8a3SJacky Wang /** Returns the compiler modes as a list of parameters for parameterized tests */ 37*f585d8a3SJacky Wang public static final ImmutableList<Object[]> TEST_PARAMETERS = 38*f585d8a3SJacky Wang ImmutableList.copyOf( 39*f585d8a3SJacky Wang new Object[][] {{CompilerMode.DEFAULT_MODE}, {CompilerMode.FAST_INIT_MODE}}); 40*f585d8a3SJacky Wang 41*f585d8a3SJacky Wang private final ImmutableList<String> javacopts; 42*f585d8a3SJacky Wang CompilerMode(String... javacopts)43*f585d8a3SJacky Wang private CompilerMode(String... javacopts) { 44*f585d8a3SJacky Wang this.javacopts = ImmutableList.copyOf(javacopts); 45*f585d8a3SJacky Wang } 46*f585d8a3SJacky Wang 47*f585d8a3SJacky Wang /** 48*f585d8a3SJacky Wang * Returns the javacopts as a map of key-value pairs. 49*f585d8a3SJacky Wang * 50*f585d8a3SJacky Wang * @throws IllegalStateException if the javacopts are not of the form "-Akey=value". 51*f585d8a3SJacky Wang */ processorOptions()52*f585d8a3SJacky Wang public ImmutableMap<String, String> processorOptions() { 53*f585d8a3SJacky Wang ImmutableMap.Builder<String, String> builder = ImmutableMap.builder(); 54*f585d8a3SJacky Wang for (String javacopt : javacopts) { 55*f585d8a3SJacky Wang // Throw if there's a javacopt in this mode that is not an annotation processor option. 56*f585d8a3SJacky Wang checkState(javacopt.startsWith("-A")); 57*f585d8a3SJacky Wang List<String> splits = Splitter.on('=').splitToList(javacopt.substring(2)); 58*f585d8a3SJacky Wang checkState(splits.size() == 2); 59*f585d8a3SJacky Wang builder.put(splits.get(0), splits.get(1)); 60*f585d8a3SJacky Wang } 61*f585d8a3SJacky Wang return builder.buildOrThrow(); 62*f585d8a3SJacky Wang } 63*f585d8a3SJacky Wang 64*f585d8a3SJacky Wang /** Returns the javacopts for this compiler mode. */ javacopts()65*f585d8a3SJacky Wang public FluentIterable<String> javacopts() { 66*f585d8a3SJacky Wang return FluentIterable.from(javacopts); 67*f585d8a3SJacky Wang } 68*f585d8a3SJacky Wang } 69