Java tutorial
/* * 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.parser; import com.facebook.buck.model.BuildTarget; import com.facebook.buck.rules.AbstractBuildRuleBuilder; import com.facebook.buck.rules.AnnotationProcessingParams; import com.facebook.buck.rules.DefaultJavaLibraryRule; import com.facebook.buck.java.JavacOptionsUtil; import com.google.common.base.Optional; import java.util.List; public class JavaLibraryBuildRuleFactory extends AbstractBuildRuleFactory { public static final String ANNOTATION_PROCESSORS = "annotation_processors"; @Override public DefaultJavaLibraryRule.Builder newBuilder() { return DefaultJavaLibraryRule.newJavaLibraryRuleBuilder(); } @Override protected void amendBuilder(AbstractBuildRuleBuilder abstractBuilder, BuildRuleFactoryParams params) throws NoSuchBuildTargetException { DefaultJavaLibraryRule.Builder builder = ((DefaultJavaLibraryRule.Builder) abstractBuilder); Optional<String> proguardConfig = params.getOptionalStringAttribute("proguard_config"); if (proguardConfig.isPresent()) { String proguardConfigFile = params.resolveFilePathRelativeToBuildFileDirectory(proguardConfig.get()); builder.setProguardConfig(proguardConfigFile); } boolean exportDeps = params.getBooleanAttribute("export_deps"); builder.setExportDeps(exportDeps); extractAnnotationProcessorParameters(builder.getAnnotationProcessingBuilder(), builder, params); Optional<String> sourceLevel = params.getOptionalStringAttribute("source"); builder.setSourceLevel(sourceLevel.or(JavacOptionsUtil.DEFAULT_SOURCE_LEVEL)); Optional<String> targetLevel = params.getOptionalStringAttribute("target"); builder.setTargetLevel(targetLevel.or(JavacOptionsUtil.DEFAULT_TARGET_LEVEL)); } static void extractAnnotationProcessorParameters(AnnotationProcessingParams.Builder annotationProcessingBuilder, AbstractBuildRuleBuilder buildRuleBuilder, BuildRuleFactoryParams params) throws NoSuchBuildTargetException { // annotation_processors // // Names of the classes used for annotation processing. These must be implemented // in a BuildTarget listed in annotation_processor_deps. List<String> annotationProcessors = params.getOptionalListAttribute(ANNOTATION_PROCESSORS); if (!annotationProcessors.isEmpty()) { annotationProcessingBuilder.addAllProcessors(annotationProcessors); // annotation_processor_deps // // These are the targets that implement one or more of the annotation_processors. BuildTarget target = params.target; ParseContext buildFileParseContext = ParseContext.forBaseName(target.getBaseName()); for (String processor : params.getOptionalListAttribute("annotation_processor_deps")) { BuildTarget buildTarget = params.buildTargetParser.parse(processor, buildFileParseContext); buildRuleBuilder.addDep(buildTarget.getFullyQualifiedName()); annotationProcessingBuilder.addProcessorBuildTarget(buildTarget); } // annotation_processor_params // // These will be prefixed with "-A" when passing to javac. They may be of the // form "parameter_name" or "parameter_name=string_value". for (String parameter : params.getOptionalListAttribute("annotation_processor_params")) { annotationProcessingBuilder.addParameter(parameter); } // annotation_processor_only // // If true, we only run annotation processors and do not compile. boolean processOnly = params.getBooleanAttribute("annotation_processor_only"); annotationProcessingBuilder.setProcessOnly(processOnly); } } }