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.reflect.impl.asm;
9
10 import org.codehaus.aspectwerkz.annotation.instrumentation.asm.CustomAttribute;
11 import org.codehaus.aspectwerkz.annotation.instrumentation.asm.CustomAttributeHelper;
12 import org.codehaus.aspectwerkz.annotation.AnnotationInfo;
13 import org.codehaus.aspectwerkz.reflect.ClassInfo;
14 import org.codehaus.aspectwerkz.reflect.MemberInfo;
15 import org.codehaus.aspectwerkz.transform.inlining.AsmHelper;
16 import org.objectweb.asm.Attribute;
17 import org.objectweb.asm.attrs.RuntimeInvisibleAnnotations;
18 import org.objectweb.asm.attrs.Annotation;
19 import org.objectweb.asm.attrs.RuntimeVisibleAnnotations;
20
21 import java.lang.ref.WeakReference;
22 import java.util.*;
23
24 /***
25 * ASM implementation of the MemberInfo interface.
26 *
27 * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
28 */
29 public abstract class AsmMemberInfo implements MemberInfo {
30
31 /***
32 * The member info.
33 */
34 protected final MemberStruct m_member;
35
36 /***
37 * The class loader wrapped in a weak ref.
38 */
39 protected final WeakReference m_loaderRef;
40
41 /***
42 * The declaring type name.
43 */
44 protected final String m_declaringTypeName;
45
46 /***
47 * The declaring type.
48 */
49 protected ClassInfo m_declaringType;
50
51 /***
52 * The annotations.
53 */
54 protected List m_annotations = null;
55
56 /***
57 * The class info repository.
58 */
59 protected final AsmClassInfoRepository m_classInfoRepository;
60
61 /***
62 * Creates a new member meta data instance.
63 *
64 * @param member
65 * @param declaringType
66 * @param loader
67 */
68 AsmMemberInfo(final MemberStruct member, final String declaringType, final ClassLoader loader) {
69 if (member == null) {
70 throw new IllegalArgumentException("member can not be null");
71 }
72 if (declaringType == null) {
73 throw new IllegalArgumentException("declaring type can not be null");
74 }
75 m_member = member;
76 m_loaderRef = new WeakReference(loader);
77 m_declaringTypeName = declaringType.replace('/', '.');
78 m_classInfoRepository = AsmClassInfoRepository.getRepository(loader);
79 }
80
81 /***
82 * Returns the name.
83 *
84 * @return the name
85 */
86 public String getName() {
87 return m_member.name;
88 }
89
90 /***
91 * Returns the modifiers.
92 *
93 * @return the modifiers
94 */
95 public int getModifiers() {
96 return m_member.modifiers;
97 }
98
99 /***
100 * Returns the declaring type.
101 *
102 * @return the declaring type
103 */
104 public ClassInfo getDeclaringType() {
105 if (m_declaringType == null) {
106 m_declaringType = m_classInfoRepository.getClassInfo(m_declaringTypeName);
107 }
108 return m_declaringType;
109 }
110 }