org.aspectj.lang.reflect.AjType Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aspectjweaver Show documentation
Show all versions of aspectjweaver Show documentation
The AspectJ weaver introduces advices to java classes
/* *******************************************************************
* Copyright (c) 2005 Contributors.
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://eclipse.org/legal/epl-v10.html
*
* Contributors:
* Adrian Colyer Initial implementation
* ******************************************************************/
package org.aspectj.lang.reflect;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
/**
* The runtime representation of a type (Aspect, Class, Interface, Annotation, Enum, or Array) in an AspectJ
* program.
*/
public interface AjType extends Type, AnnotatedElement {
/**
* @return the name of this type, in the same format as returned by Class.getName()
*/
public String getName();
/**
* @return the package in which this type is declared
*/
public Package getPackage();
/**
* @return the interfaces implemented by this type
*/
public AjType[] getInterfaces();
/**
* @return the modifiers declared for this type. The return value can be interpreted
* using java.lang.reflect.Modifier
*/
public int getModifiers();
/**
* @return the java.lang.Class that corresponds to this AjType
*/
public Class getJavaClass();
// scope
/**
* @return the supertype of this type. If this type represents Object or a primitive type
* then null is returned.
*/
public AjType getSupertype();
/**
* @return the generic supertype of this type, as defined by Class.getGenericSupertype
*/
public Type getGenericSupertype();
/**
* @return the enclosing Method if this type represents a local or anonymous type declared within a method
*/
public Method getEnclosingMethod();
/**
* @return the enclosing Method if this type represents a local or anonymous type declared within a constructor
*/
public Constructor getEnclosingConstructor();
/**
* @return the immediately enclosing type of this type.
*/
public AjType getEnclosingType();
/**
* @return the AjType representing the typei n which it was declared (if this type is a member of another type)
*/
public AjType getDeclaringType();
/**
* @return the per-clause if this is an aspect, otherwise null
*/
public PerClause getPerClause();
// inner types
/**
* @return an array containing all the public types that are members of this type
*/
public AjType[] getAjTypes();
/**
* @return an array containing all the types declared by this type
*/
public AjType[] getDeclaredAjTypes();
// constructors
/**
* @param parameterTypes the types of the constructor parameters
* @return the constructor object for the specified public constructor of this type
* @throws NoSuchMethodException if constructor not found
*/
public Constructor getConstructor(AjType... parameterTypes) throws NoSuchMethodException;
/**
* @return all of the public constructors of this type
*/
public Constructor[] getConstructors();
/**
* @param parameterTypes the types of the constructor parameters
* @return the constructor object for the specified constructor of this type
* @throws NoSuchMethodException if constructor not found
*/
public Constructor getDeclaredConstructor(AjType... parameterTypes) throws NoSuchMethodException;
/**
* @return all the constructors declared in this type
*/
public Constructor[] getDeclaredConstructors();
// fields
/**
* @param name the field name
* @return the declared field
* @throws NoSuchFieldException if no field of that name is found
*/
public Field getDeclaredField(String name) throws NoSuchFieldException;
/**
* @return all the fields declared in this type
*/
public Field[] getDeclaredFields();
/**
* @param name the field name
* @return the public field with the given name
* @throws NoSuchFieldException if field not found
*/
public Field getField(String name) throws NoSuchFieldException;
/**
* @return the public fields declared by this type
*/
public Field[] getFields();
// methods
/**
* @param name the method name
* @param parameterTypes the types of the method parameters
* @return the method object for the specified method declared in this type
* @throws NoSuchMethodException if the method cannot be found
*/
public Method getDeclaredMethod(String name, AjType... parameterTypes) throws NoSuchMethodException;
/**
* @param name the method name
* @param parameterTypes the types of the method parameters
* @return the method object for the specified public method declared in this type
* @throws NoSuchMethodException if the method cannot be found
*/
public Method getMethod(String name, AjType... parameterTypes) throws NoSuchMethodException;
/**
* @return all the methods declared by this type
*/
public Method[] getDeclaredMethods();
/**
* @return all the public methods of this type
*/
public Method[] getMethods();
// pointcuts
/**
* @param name the pointcut name
* @return the pointcut object representing the specified pointcut declared by this type
* @throws NoSuchPointcutException if no pointcut of that name can be found
*/
public Pointcut getDeclaredPointcut(String name) throws NoSuchPointcutException;
/**
* @param name the pointcut name
* @return the pointcut object representing the specified public pointcut
* @throws NoSuchPointcutException if no pointcut of that name can be found
*/
public Pointcut getPointcut(String name) throws NoSuchPointcutException;
/**
* @return all of the pointcuts declared by this type
*/
public Pointcut[] getDeclaredPointcuts();
/**
* @return all of the public pointcuts of this type
*/
public Pointcut[] getPointcuts();
// advice
/**
* @param ofTypes the {@link AdviceKind}s of interest
* @return all of the advice declared by this type, of an advice kind contained in the
* parameter list.
*/
public Advice[] getDeclaredAdvice(AdviceKind... ofTypes);
/**
* @param ofTypes the {@link AdviceKind}s of interest
* @return all of the advice for this type, of an advice kind contained in the parameter
* list.
*/
public Advice[] getAdvice(AdviceKind... ofTypes);
/**
* For an annotation style advice member,
* this is the name of the annotated method. For a code-style advice declaration, this
* is the name given in the @AdviceName annotation if present.
*
* @param name the advice name
* @return the advice with the given name.
* @throws NoSuchAdviceException if no advice can be found with that name
*/
public Advice getAdvice(String name) throws NoSuchAdviceException;
/** For an annotation style advice member,
* this is the name of the annotated method. For a code-style advice declaration, this
* is the name given in the @AdviceName annotation if present.
*
* @param name the advice name
* @return the advice declared in this type with the given name.
* @throws NoSuchAdviceException if no advice can be found with that name
*/
public Advice getDeclaredAdvice(String name) throws NoSuchAdviceException;
// inter-type declarations
/**
* @param name the method name
* @param target the target of the inter-type declaration
* @param parameterTypes the types of the inter-type method declaration
* @return the inter-type method declared by this type matching the given specification
* @throws NoSuchMethodException if the inter-type declaration cannot be found
*/
public InterTypeMethodDeclaration getDeclaredITDMethod(String name, AjType target, AjType... parameterTypes) throws NoSuchMethodException;
/**
* @return all of the inter-type methods declared by this type
*/
public InterTypeMethodDeclaration[] getDeclaredITDMethods();
/**
* @param name the method name
* @param target the target of the inter-type declaration
* @param parameterTypes the types of the inter-type method declaration
* @return the public inter-type method of this type matching the given specification
* @throws NoSuchMethodException if the inter-type declaration cannot be found
*/
public InterTypeMethodDeclaration getITDMethod(String name, AjType target, AjType... parameterTypes) throws NoSuchMethodException;
/**
* @return all of the public inter-type declared methods of this type
*/
public InterTypeMethodDeclaration[] getITDMethods();
/**
* @param target the target of the inter-type constructor of interest
* @param parameterTypes the types of the parameter of the inter-type constructor of interest
* @return the inter-type constructor declared by this type matching the given specification
* @throws NoSuchMethodException if the inter-type declaration cannot be found
*/
public InterTypeConstructorDeclaration getDeclaredITDConstructor(AjType target, AjType... parameterTypes) throws NoSuchMethodException;
/**
* @return all of the inter-type constructors declared by this type
*/
public InterTypeConstructorDeclaration[] getDeclaredITDConstructors();
/**
* @param target the target of the inter-type constructor of interest
* @param parameterTypes the types of the parameter of the inter-type constructor of interest
* @return the public inter-type constructor matching the given specification
* @throws NoSuchMethodException if the inter-type declaration cannot be found
*/
public InterTypeConstructorDeclaration getITDConstructor(AjType target, AjType... parameterTypes) throws NoSuchMethodException;
/**
* @return all of the public inter-type constructors of this type
*/
public InterTypeConstructorDeclaration[] getITDConstructors();
/**
* @param name the field name
* @param target the target type for the inter-type declaration
* @return the inter-type field declared in this type with the given specification
* @throws NoSuchFieldException if the inter-type declaration cannot be found
*/
public InterTypeFieldDeclaration getDeclaredITDField(String name, AjType target) throws NoSuchFieldException;
/**
* @return all of the inter-type fields declared in this type
*/
public InterTypeFieldDeclaration[] getDeclaredITDFields();
/**
* @param name the field name
* @param target the target type for the inter-type declaration
* @return the public inter-type field matching the given specification
* @throws NoSuchFieldException if the inter-type declaration cannot be found
*/
public InterTypeFieldDeclaration getITDField(String name, AjType target) throws NoSuchFieldException;
/**
* @return all of the public inter-type fields for this type
*/
public InterTypeFieldDeclaration[] getITDFields();
// declare statements
/**
* @return all of the declare error and declare warning members of this type,
* including declare error/warning members inherited from super-types
*/
public DeclareErrorOrWarning[] getDeclareErrorOrWarnings();
/**
* @return all of the declare parents members of this type, including
* declare parent members inherited from super-types
*/
public DeclareParents[] getDeclareParents();
/**
* @return all of the declare soft members of this type, including declare
* soft members inherited from super-types
*/
public DeclareSoft[] getDeclareSofts();
/**
* @return all of the declare annotation members of this type, including declare
* annotation members inherited from super-types
*/
public DeclareAnnotation[] getDeclareAnnotations();
/**
* @return all of the declare precedence members of this type, including declare
* precedence members inherited from super-types
*/
public DeclarePrecedence[] getDeclarePrecedence();
// misc
/**
* @return the elements of this enum class, or null if this type does not represent
* an enum type.
*/
public T[] getEnumConstants();
/**
* @return an array of TypeVariable objects that represent the type variables declared by
* this type (if any)
*/
public TypeVariable>[] getTypeParameters();
/**
* @return true if this is an enum type
*/
public boolean isEnum();
/**
* @param o the object to check for assignment compatibility
* @return true if the given object is assignment-compatible with an object of the type represented
* by this AjType
*/
public boolean isInstance(Object o);
/**
* @return true if this is an interface type
*/
public boolean isInterface();
/**
* @return true if and only if the underlying type is a local class
*/
public boolean isLocalClass();
/**
* @return true if and only if the underlying type is a member class
*/
public boolean isMemberClass();
/**
* @return true if this is an array type
*/
public boolean isArray();
/**
* @return true if this object represents a primitive type
*/
public boolean isPrimitive();
/**
* @return true if this is an aspect type
*/
public boolean isAspect();
/**
* @return true if and only if the underlying type is a member aspect
*/
public boolean isMemberAspect();
/**
* @return true if and only if the underlying type is a privileged aspect
*/
public boolean isPrivileged();
}