package org.springframework.roo.classpath.details;
import java.util.List;
import java.util.Set;
import java.util.SortedMap;
import org.springframework.roo.model.JavaType;
/**
* Provides information about an ITD.
* <p>
* For simplicity of implementation this is not a complete representation of all
* members and other information available via Java bytecode. For example,
* static initialisers and inner classes are unsupported.
*
* @author Ben Alex
* @author Stefan Schmidt
* @since 1.0
*/
public interface ItdTypeDetails extends MemberHoldingTypeDetails {
/**
* Returns the name of type which holds the aspect itself.
* <p>
* Note that the type receiving the introductions can be determined via
* {@link #getName()}.
*
* @return the aspect {@link JavaType} (never null)
*/
JavaType getAspect();
/**
* Lists the field-level annotations.
* <p>
* This includes those annotations declared on the field, together with
* those defined via the ITD "declare @field: DestinationType: @Annotation"
* feature.
*
* @return an unmodifiable representation of the field and the annotations
* declared on this field (may be empty, but never null)
*/
List<DeclaredFieldAnnotationDetails> getFieldAnnotations();
/**
* Returns the {@link ClassOrInterfaceTypeDetails} representing the governor
* of this ITD.
*
* @return the governor {@link ClassOrInterfaceTypeDetails} (never null)
*/
ClassOrInterfaceTypeDetails getGovernor();
/**
* Lists the inner types.
*
* @return an unmodifiable representation of the inner types (may be empty
* but never null)
*/
List<ClassOrInterfaceTypeDetails> getInnerTypes();
/**
* Lists the method-level annotations.
* <p>
* This includes those annotations declared on the method, together with
* those defined via the ITD "declare @field: DestinationType: @Annotation"
* feature.
*
* @return an unmodifiable representation of the method and the annotations
* declared on this method (may be empty, but never null)
*/
List<DeclaredMethodAnnotationDetails> getMethodAnnotations();
/**
* @return the explicitly-registered imports this user wishes to have
* defined in the ITD (cannot be null, but may be empty) indicating
* if static.
*/
SortedMap<JavaType, Boolean> getRegisteredImports();
boolean isPrivilegedAspect();
/**
* Set of aspect declared on {@code declare precedence}
* AspectJ declaration.
*
* @return ordered aspect declared
*/
Set<JavaType> getDeclarePrecedence();
}