1 /* 2 * Copyright 2015 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.google.auto.value.processor; 17 18 import com.google.auto.value.extension.AutoValueExtension; 19 import com.google.auto.value.extension.AutoValueExtension.BuilderContext; 20 import com.google.common.collect.ImmutableMap; 21 import com.google.common.collect.ImmutableSet; 22 import com.google.common.collect.Maps; 23 import java.util.Map; 24 import java.util.Optional; 25 import java.util.Set; 26 import javax.annotation.processing.ProcessingEnvironment; 27 import javax.lang.model.element.ExecutableElement; 28 import javax.lang.model.element.TypeElement; 29 import javax.lang.model.type.TypeMirror; 30 31 class ExtensionContext implements AutoValueExtension.Context { 32 33 private final ProcessingEnvironment processingEnvironment; 34 private final TypeElement autoValueClass; 35 private final ImmutableMap<String, ExecutableElement> properties; 36 private final ImmutableMap<String, TypeMirror> propertyTypes; 37 private final ImmutableSet<ExecutableElement> abstractMethods; 38 private Optional<BuilderContext> builderContext = Optional.empty(); 39 ExtensionContext( ProcessingEnvironment processingEnvironment, TypeElement autoValueClass, ImmutableMap<String, ExecutableElement> properties, ImmutableMap<ExecutableElement, TypeMirror> propertyMethodsAndTypes, ImmutableSet<ExecutableElement> abstractMethods)40 ExtensionContext( 41 ProcessingEnvironment processingEnvironment, 42 TypeElement autoValueClass, 43 ImmutableMap<String, ExecutableElement> properties, 44 ImmutableMap<ExecutableElement, TypeMirror> propertyMethodsAndTypes, 45 ImmutableSet<ExecutableElement> abstractMethods) { 46 this.processingEnvironment = processingEnvironment; 47 this.autoValueClass = autoValueClass; 48 this.properties = properties; 49 this.propertyTypes = 50 ImmutableMap.copyOf(Maps.transformValues(properties, propertyMethodsAndTypes::get)); 51 this.abstractMethods = abstractMethods; 52 } 53 setBuilderContext(BuilderContext builderContext)54 void setBuilderContext(BuilderContext builderContext) { 55 this.builderContext = Optional.of(builderContext); 56 } 57 58 @Override processingEnvironment()59 public ProcessingEnvironment processingEnvironment() { 60 return processingEnvironment; 61 } 62 63 @Override packageName()64 public String packageName() { 65 return TypeSimplifier.packageNameOf(autoValueClass); 66 } 67 68 @Override autoValueClass()69 public TypeElement autoValueClass() { 70 return autoValueClass; 71 } 72 73 @Override finalAutoValueClassName()74 public String finalAutoValueClassName() { 75 return AutoValueProcessor.generatedSubclassName(autoValueClass, 0); 76 } 77 78 @Override properties()79 public Map<String, ExecutableElement> properties() { 80 return properties; 81 } 82 83 @Override propertyTypes()84 public Map<String, TypeMirror> propertyTypes() { 85 return propertyTypes; 86 } 87 88 @Override abstractMethods()89 public Set<ExecutableElement> abstractMethods() { 90 return abstractMethods; 91 } 92 93 @Override builder()94 public Optional<BuilderContext> builder() { 95 return builderContext; 96 } 97 } 98