/*
* Copyright 2005 Werner Guttmann
*
* 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 org.exolab.castor.builder;
import org.exolab.castor.builder.info.ClassInfo;
import org.exolab.castor.builder.info.FieldInfo;
import org.exolab.castor.xml.schema.Facet;
import org.exolab.castor.xml.schema.SimpleType;
import org.exolab.javasource.JClass;
import org.exolab.javasource.JEnum;
import org.exolab.javasource.JEnumConstant;
import org.exolab.javasource.JField;
import org.exolab.javasource.JMethod;
/**
* This interface is a hook for (external) tools to add annotations to
* classes, fields and enums during the XML code generation process.
*
* Custom implementations of {@link AnnotationBuilder} instances can be
* added to a code generation execution using
* {@link SourceGenerator#addAnnotationBuilder(AnnotationBuilder)}
*
* @since 1.1.3
*/
public interface AnnotationBuilder {
/**
* add annotations to a JClass.
* @param classInfo the classInfo
* @param jClass the jClass
*/
void addClassAnnotations(ClassInfo classInfo, JClass jClass);
/**
* add annotation to a property definition.
* @param fieldInfo the fieldInfo
* @param field the jField
*/
void addFieldAnnotations(FieldInfo fieldInfo, JField field);
/**
* add annotations to a getter of a property.
* @param fieldInfo the fieldInfo
* @param method the getter method
*/
void addFieldGetterAnnotations(FieldInfo fieldInfo, JMethod method);
/**
* add annotations to a java5 enum.
* @param simpleType the corresponding simpleType
* @param jEnums the jEnum
*/
void addEnumAnnotations(SimpleType simpleType, JEnum jEnums);
/**
* add annotations to a java5 enum constant.
* @param facet the corresponding facet
* @param enumConstant the jEnumConstant
*/
void addEnumConstantAnnotations(Facet facet, JEnumConstant enumConstant);
}