/************************************************************************************** * Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. * * http://aspectwerkz.codehaus.org * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the LGPL license * * a copy of which has been included with this distribution in the license.txt file. * **************************************************************************************/ package org.codehaus.aspectwerkz.reflect.impl.asm; import org.codehaus.aspectwerkz.reflect.ClassInfo; import org.codehaus.aspectwerkz.reflect.MemberInfo; import org.codehaus.backport175.reader.Annotation; import org.codehaus.backport175.reader.bytecode.AnnotationElement; import org.codehaus.backport175.reader.bytecode.AnnotationReader; import java.lang.ref.WeakReference; import java.util.*; /** * ASM implementation of the MemberInfo interface. * * @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a> */ public abstract class AsmMemberInfo implements MemberInfo { /** * The member info. */ protected final MemberStruct m_member; /** * The class loader wrapped in a weak ref. */ protected final WeakReference m_loaderRef; /** * The declaring type name. */ protected final String m_declaringTypeName; /** * The declaring type. */ protected ClassInfo m_declaringType; /** * The class info repository. */ protected final AsmClassInfoRepository m_classInfoRepository; /** * Creates a new member meta data instance. * * @param member * @param declaringType * @param loader */ AsmMemberInfo(final MemberStruct member, final String declaringType, final ClassLoader loader) { if (member == null) { throw new IllegalArgumentException("member can not be null"); } if (declaringType == null) { throw new IllegalArgumentException("declaring type can not be null"); } m_member = member; m_loaderRef = new WeakReference(loader); m_declaringTypeName = declaringType.replace('/', '.'); m_classInfoRepository = AsmClassInfoRepository.getRepository(loader); } /** * Returns the name. * * @return the name */ public String getName() { return m_member.name; } /** * Returns the modifiers. * * @return the modifiers */ public int getModifiers() { return m_member.modifiers; } /** * Returns the declaring type. * * @return the declaring type */ public ClassInfo getDeclaringType() { if (m_declaringType == null) { m_declaringType = m_classInfoRepository.getClassInfo(m_declaringTypeName); } return m_declaringType; } }