1 /*************************************************************************************** 2 * Copyright (c) Jonas Bonér, Alexandre Vasseur. All rights reserved. * 3 * http://aspectwerkz.codehaus.org * 4 * ---------------------------------------------------------------------------------- * 5 * The software in this package is published under the terms of the LGPL license * 6 * a copy of which has been included with this distribution in the license.txt file. * 7 **************************************************************************************/ 8 package org.codehaus.aspectwerkz.joinpoint.impl; 9 10 import org.codehaus.aspectwerkz.ConstructorTuple; 11 import org.codehaus.aspectwerkz.annotation.Annotation; 12 import org.codehaus.aspectwerkz.annotation.Annotations; 13 import org.codehaus.aspectwerkz.joinpoint.ConstructorSignature; 14 15 import java.lang.reflect.Constructor; 16 import java.util.List; 17 18 /*** 19 * Implementation for the constructor signature. 20 * 21 * @author <a href="mailto:jboner@codehaus.org">Jonas Bonér </a> 22 */ 23 public class ConstructorSignatureImpl implements ConstructorSignature { 24 private final Class m_declaringType; 25 26 private final ConstructorTuple m_constructorTuple; 27 28 /*** 29 * @param declaringType 30 * @param constructorTuple 31 */ 32 public ConstructorSignatureImpl(final Class declaringType, final ConstructorTuple constructorTuple) { 33 m_declaringType = declaringType; 34 m_constructorTuple = constructorTuple; 35 } 36 37 /*** 38 * Returns the constructor tuple. 39 * 40 * @return the constructor tuple 41 */ 42 public ConstructorTuple getConstructorTuple() { 43 return m_constructorTuple; 44 } 45 46 /*** 47 * Returns the constructor. 48 * 49 * @return the constructor 50 */ 51 public Constructor getConstructor() { 52 return m_constructorTuple.getOriginalConstructor(); 53 } 54 55 /*** 56 * Returns the declaring class. 57 * 58 * @return the declaring class 59 */ 60 public Class getDeclaringType() { 61 return m_declaringType; 62 } 63 64 /*** 65 * Returns the modifiers for the signature. <p/>Could be used like this: 66 * 67 * <pre> 68 * boolean isPublic = java.lang.reflect.Modifier.isPublic(signature.getModifiers()); 69 * </pre> 70 * 71 * @return the mofifiers 72 */ 73 public int getModifiers() { 74 return m_constructorTuple.getOriginalConstructor().getModifiers(); 75 } 76 77 /*** 78 * Returns the name (f.e. name of method of field). 79 * 80 * @return 81 */ 82 public String getName() { 83 return m_constructorTuple.getName(); 84 } 85 86 /*** 87 * Returns the exception types declared by the code block. 88 * 89 * @return the exception types 90 */ 91 public Class[] getExceptionTypes() { 92 return m_constructorTuple.getOriginalConstructor().getExceptionTypes(); 93 } 94 95 /*** 96 * Returns the parameter types. 97 * 98 * @return the parameter types 99 */ 100 public Class[] getParameterTypes() { 101 return m_constructorTuple.getOriginalConstructor().getParameterTypes(); 102 } 103 104 /*** 105 * Return the annotation with a specific name. 106 * 107 * @param annotationName the annotation name 108 * @return the annotation or null 109 */ 110 public Annotation getAnnotation(final String annotationName) { 111 return Annotations.getAnnotation(annotationName, m_constructorTuple.getWrapperConstructor()); 112 } 113 114 /*** 115 * Return a list with the annotations with a specific name. 116 * 117 * @param annotationName the annotation name 118 * @return the annotations in a list (can be empty) 119 */ 120 public List getAnnotations(final String annotationName) { 121 return Annotations.getAnnotations(annotationName, m_constructorTuple.getWrapperConstructor()); 122 } 123 124 /*** 125 * Return all the annotations <p/>Each annotation is wrapped in 126 * {@link org.codehaus.aspectwerkz.annotation.AnnotationInfo}instance. 127 * 128 * @return a list with the annotations 129 */ 130 public List getAnnotationInfos() { 131 return Annotations.getAnnotationInfos(m_constructorTuple.getWrapperConstructor()); 132 } 133 134 /*** 135 * Returns a string representation of the signature. 136 * 137 * @return a string representation 138 * @TODO: implement toString to something meaningful 139 */ 140 public String toString() { 141 return super.toString(); 142 } 143 }