View Javadoc

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 BSD-style license *
6    * a copy of which has been included with this distribution in the license.txt file.  *
7    **************************************************************************************/
8   package org.codehaus.aspectwerkz;
9   
10  import java.lang.reflect.Constructor;
11  import java.io.Serializable;
12  
13  /***
14   * Contains a pair of the original method and the wrapper method if such a method exists.
15   * 
16   * @author <a href="mailto:jboner@codehaus.org">Jonas Bonér </a>
17   */
18  public class ConstructorTuple implements Serializable {
19      private final Constructor m_wrapperConstructor;
20  
21      private final Constructor m_originalConstructor;
22  
23      private final Class m_declaringClass;
24  
25      /***
26       * Creates a new tuple.
27       * 
28       * @param wrapperConstructor
29       * @param originalConstructor
30       */
31      public ConstructorTuple(final Constructor wrapperConstructor, Constructor originalConstructor) {
32          if (originalConstructor == null) {
33              originalConstructor = wrapperConstructor;
34          }
35          if (wrapperConstructor.getDeclaringClass() != originalConstructor.getDeclaringClass()) {
36              throw new RuntimeException(wrapperConstructor.getName()
37                  + " and "
38                  + originalConstructor.getName()
39                  + " does not have the same declaring class");
40          }
41          m_declaringClass = wrapperConstructor.getDeclaringClass();
42          m_wrapperConstructor = wrapperConstructor;
43          m_wrapperConstructor.setAccessible(true);
44          m_originalConstructor = originalConstructor;
45          m_originalConstructor.setAccessible(true);
46      }
47  
48      public boolean isWrapped() {
49          return m_originalConstructor != null;
50      }
51  
52      public Class getDeclaringClass() {
53          return m_declaringClass;
54      }
55  
56      public Constructor getWrapperConstructor() {
57          return m_wrapperConstructor;
58      }
59  
60      public Constructor getOriginalConstructor() {
61          return m_originalConstructor;
62      }
63  
64      public String getName() {
65          return m_wrapperConstructor.getName();
66      }
67  }