| /* |
| * Copyright 2012-present Facebook, Inc. |
| * |
| * 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.facebook.buck.java; |
| |
| import com.facebook.buck.model.AnnotationProcessingData; |
| import com.facebook.buck.step.ExecutionContext; |
| import com.google.common.annotations.Beta; |
| import com.google.common.base.Joiner; |
| import com.google.common.base.Preconditions; |
| import com.google.common.base.Supplier; |
| import com.google.common.collect.ImmutableList; |
| |
| import java.io.File; |
| import java.util.Set; |
| |
| @Beta |
| public final class JavacOptionsUtil { |
| |
| public static final String DEFAULT_SOURCE_LEVEL = "6"; |
| public static final String DEFAULT_TARGET_LEVEL = "6"; |
| |
| /** Utility class: do not instantiate. */ |
| private JavacOptionsUtil() {} |
| |
| /** |
| * Adds the appropriate options for javac given the specified {@link com.facebook.buck.step.ExecutionContext}. |
| */ |
| static void addOptions( |
| ImmutableList.Builder<String> optionsBuilder, |
| ExecutionContext context, |
| File outputDirectory, |
| Set<String> classpathEntries, |
| Supplier<String> bootclasspathSupplier, |
| AnnotationProcessingData annotationProcessingData, |
| String sourceLevel, |
| String targetLevel) { |
| Preconditions.checkNotNull(optionsBuilder); |
| Preconditions.checkNotNull(context); |
| Preconditions.checkNotNull(outputDirectory); |
| Preconditions.checkNotNull(classpathEntries); |
| Preconditions.checkNotNull(bootclasspathSupplier); |
| Preconditions.checkNotNull(annotationProcessingData); |
| Preconditions.checkNotNull(sourceLevel); |
| Preconditions.checkNotNull(targetLevel); |
| |
| // verbose flag, if appropriate. |
| if (context.getVerbosity().shouldUseVerbosityFlagIfAvailable()) { |
| optionsBuilder.add("-verbose"); |
| } |
| |
| // Add some standard options. |
| optionsBuilder.add("-target", sourceLevel); |
| optionsBuilder.add("-source", targetLevel); |
| |
| // Include all debug information. Let Proguard be responsible for stripping it from production |
| // builds. |
| optionsBuilder.add("-g"); |
| |
| // Specify the output directory. |
| optionsBuilder.add("-d").add(outputDirectory.getAbsolutePath()); |
| |
| // Override the bootclasspath if Buck is building Java code for Android. |
| String bootclasspath = bootclasspathSupplier.get(); |
| if (bootclasspath != null) { |
| optionsBuilder.add("-bootclasspath", bootclasspath); |
| } |
| |
| // Build up and set the classpath. |
| if (!classpathEntries.isEmpty()) { |
| String classpath = Joiner.on(":").join(classpathEntries); |
| optionsBuilder.add("-classpath", classpath); |
| } |
| |
| // Add annotation processors. |
| if (!annotationProcessingData.isEmpty()) { |
| |
| // Specify where to generate sources so IntelliJ can pick them up. |
| String generateTo = annotationProcessingData.getGeneratedSourceFolderName(); |
| if (generateTo != null) { |
| optionsBuilder.add("-s").add(generateTo); |
| } |
| |
| // Specify processorpath to search for processors. |
| optionsBuilder.add("-processorpath", |
| Joiner.on(':').join(annotationProcessingData.getSearchPathElements())); |
| |
| // Specify names of processors. |
| if (!annotationProcessingData.getNames().isEmpty()) { |
| optionsBuilder.add("-processor", Joiner.on(',').join(annotationProcessingData.getNames())); |
| } |
| |
| // Add processor parameters. |
| for (String parameter : annotationProcessingData.getParameters()) { |
| optionsBuilder.add("-A" + parameter); |
| } |
| |
| if (annotationProcessingData.getProcessOnly()) { |
| optionsBuilder.add("-proc:only"); |
| } |
| } |
| } |
| } |