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 }