View Javadoc
1   /*
2    * Copyright (c) 2012-2024, jcabi.com
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met: 1) Redistributions of source code must retain the above
8    * copyright notice, this list of conditions and the following
9    * disclaimer. 2) Redistributions in binary form must reproduce the above
10   * copyright notice, this list of conditions and the following
11   * disclaimer in the documentation and/or other materials provided
12   * with the distribution. 3) Neither the name of the jcabi.com nor
13   * the names of its contributors may be used to endorse or promote
14   * products derived from this software without specific prior written
15   * permission.
16   *
17   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21   * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28   * OF THE POSSIBILITY OF SUCH DAMAGE.
29   */
30  package com.jcabi.aspects.aj;
31  
32  import java.lang.reflect.Method;
33  import java.lang.reflect.Modifier;
34  import org.aspectj.lang.JoinPoint;
35  import org.aspectj.lang.Signature;
36  import org.aspectj.lang.reflect.MethodSignature;
37  import org.aspectj.lang.reflect.SourceLocation;
38  
39  /**
40   * This class implements the methods from JointPoint interface.
41   *
42   * @since 1.0
43   */
44  final class ImprovedJoinPoint implements JoinPoint {
45  
46      /**
47       * The original joinpoint.
48       */
49      private final JoinPoint joinpoint;
50  
51      /**
52       * Constructor.
53       *
54       * @param jpt Origin instance
55       */
56      ImprovedJoinPoint(final JoinPoint jpt) {
57          this.joinpoint = jpt;
58      }
59  
60      @Override
61      public String toString() {
62          return this.joinpoint.toString();
63      }
64  
65      @Override
66      public String toShortString() {
67          return this.joinpoint.toShortString();
68      }
69  
70      @Override
71      public String toLongString() {
72          return this.joinpoint.toLongString();
73      }
74  
75      @Override
76      public Object getThis() {
77          return this.joinpoint.getThis();
78      }
79  
80      @Override
81      public Object getTarget() {
82          return this.joinpoint.getTarget();
83      }
84  
85      @Override
86      public Object[] getArgs() {
87          return this.joinpoint.getArgs();
88      }
89  
90      @Override
91      public Signature getSignature() {
92          return this.joinpoint.getSignature();
93      }
94  
95      @Override
96      public SourceLocation getSourceLocation() {
97          return this.joinpoint.getSourceLocation();
98      }
99  
100     @Override
101     public String getKind() {
102         return this.joinpoint.getKind();
103     }
104 
105     @Override
106     public JoinPoint.StaticPart getStaticPart() {
107         return this.joinpoint.getStaticPart();
108     }
109 
110     /**
111      * Calculate log target.
112      *
113      * @return The target
114      */
115     public Object targetize() {
116         final Object target;
117         final Method method = ((MethodSignature) this.joinpoint.getSignature()).getMethod();
118         if (Modifier.isStatic(method.getModifiers())) {
119             target = method.getDeclaringClass();
120         } else {
121             target = this.joinpoint.getTarget();
122         }
123         return target;
124     }
125 
126     /**
127      * Get current method.
128      *
129      * @return Current method in join point
130      */
131     public Method currentMethod() {
132         return ((MethodSignature) this.joinpoint.getSignature()).getMethod();
133     }
134 }