blob: 0c248a9f6f5fd62c715a3163f12b541b927994e3 [file] [log] [blame]
/*
* Copyright (C) 2012 Google, 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.google.auto.value.processor;
import org.apache.velocity.runtime.parser.node.SimpleNode;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
/**
* The variables to substitute into the autovalue.vm template.
*
* @author emcmanus@google.com (Éamonn McManus)
*/
@SuppressWarnings("unused") // the fields in this class are only read via reflection
class AutoValueTemplateVars extends TemplateVars {
/** The properties defined by the parent class's abstract methods. */
List<AutoValueProcessor.Property> props;
/** Whether to generate an equals(Object) method. */
Boolean equals;
/** Whether to generate a hashCode() method. */
Boolean hashCode;
/** Whether to generate a toString() method. */
Boolean toString;
/** The fully-qualified names of the classes to be imported in the generated class. */
SortedSet<String> imports;
/**
* The spelling of the javax.annotation.Generated class: Generated or javax.annotation.Generated.
*/
String generated;
/** The spelling of the java.util.Arrays class: Arrays or java.util.Arrays. */
String arrays;
/** The spelling of the java.util.BitSet class: BitSet or java.util.BitSet. */
String bitSet;
/**
* The full spelling of the {@code @GwtCompatible} annotation to add to this class, or an empty
* string if there is none. A non-empty value might look something like
* {@code "@com.google.common.annotations.GwtCompatible(serializable = true)"}.
*/
String gwtCompatibleAnnotation;
/** The text of the serialVersionUID constant, or empty if there is none. */
String serialVersionUID;
/**
* The package of the class with the {@code @AutoValue} annotation and its generated subclass.
*/
String pkg;
/**
* The name of the class with the {@code @AutoValue} annotation, including containing
* classes but not including the package name.
*/
String origClass;
/** The simple name of the class with the {@code @AutoValue} annotation. */
String simpleClassName;
/** The simple name of the generated subclass. */
String subclass;
/**
* The formal generic signature of the class with the {@code @AutoValue} annotation and its
* generated subclass. This is empty, or contains type variables with optional bounds,
* for example {@code <K, V extends K>}.
*/
String formalTypes;
/**
* The generic signature used by the generated subclass for its superclass reference.
* This is empty, or contains only type variables with no bounds, for example
* {@code <K, V>}.
*/
String actualTypes;
/**
* The generic signature in {@link #actualTypes} where every variable has been replaced
* by a wildcard, for example {@code <?, ?>}.
*/
String wildcardTypes;
/**
* The name of the builder type as it should appear in source code, or empty if there is no
* builder type. If class {@code Address} contains {@code @AutoValue.Builder} class Builder
* then this will typically be {@code "Address.Builder"}.
*/
String builderTypeName = "";
/**
* The formal generic signature of the {@code AutoValue.Builder} class. This is empty, or contains
* type variables with optional bounds, for example {@code <K, V extends K>}.
*/
String builderFormalTypes = "";
/**
* The generic signature used by the generated builder subclass for its superclass reference.
* This is empty, or contains only type variables with no bounds, for example
* {@code <K, V>}.
*/
String builderActualTypes = "";
/**
* True if the builder being implemented is an interface, false if it is an abstract class.
*/
Boolean builderIsInterface = false;
/**
* The simple name of the builder's build method, often {@code "build"}.
*/
String buildMethodName = "";
/**
* A map from property names (like foo) to the corresponding setter method names (foo or setFoo).
*/
Map<String, String> builderSetterNames = Collections.emptyMap();
/**
* The names of any {@code toBuilder()} methods, that is methods that return the builder type.
*/
List<String> toBuilderMethods;
/**
* The simple names of validation methods (marked {@code @AutoValue.Validate}) in the AutoValue
* class. (Currently, this set is either empty or a singleton.)
*/
Set<String> validators = Collections.emptySet();
private static final SimpleNode TEMPLATE = parsedTemplateForResource("autovalue.vm");
@Override
SimpleNode parsedTemplate() {
return TEMPLATE;
}
}