/* *******************************************************************
 * Copyright (c) 2008 Contributors
 * All rights reserved. 
 * This program and the accompanying materials are made available 
 * under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 *  
 * ******************************************************************/
package org.aspectj.weaver;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

This type represents the weavers abstraction of an annotation - it is not tied to any underlying BCI toolkit. The weaver actualy handles these through AnnotationX wrapper objects - until we start transforming the BCEL annotations into this form (expensive) or offer a clever visitor mechanism over the BCEL annotation stuff that builds these annotation types directly.
Author:AndyClement
/** * This type represents the weavers abstraction of an annotation - it is not tied to any underlying BCI toolkit. The weaver actualy * handles these through AnnotationX wrapper objects - until we start transforming the BCEL annotations into this form (expensive) * or offer a clever visitor mechanism over the BCEL annotation stuff that builds these annotation types directly. * * @author AndyClement */
public class StandardAnnotation extends AbstractAnnotationAJ { private final boolean isRuntimeVisible; private List<AnnotationNameValuePair> nvPairs = null; public StandardAnnotation(ResolvedType type, boolean isRuntimeVisible) { super(type); this.isRuntimeVisible = isRuntimeVisible; }
{@inheritDoc}
/** * {@inheritDoc} */
public boolean isRuntimeVisible() { return isRuntimeVisible; }
{@inheritDoc}
/** * {@inheritDoc} */
public String stringify() { StringBuffer sb = new StringBuffer(); sb.append("@").append(type.getClassName()); if (hasNameValuePairs()) { sb.append("("); for (AnnotationNameValuePair nvPair : nvPairs) { sb.append(nvPair.stringify()); } sb.append(")"); } return sb.toString(); } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Anno[" + getTypeSignature() + " " + (isRuntimeVisible ? "rVis" : "rInvis")); if (nvPairs != null) { sb.append(" "); for (Iterator<AnnotationNameValuePair> iter = nvPairs.iterator(); iter.hasNext();) { AnnotationNameValuePair element = iter.next(); sb.append(element.toString()); if (iter.hasNext()) { sb.append(","); } } } sb.append("]"); return sb.toString(); }
{@inheritDoc}
/** * {@inheritDoc} */
public boolean hasNamedValue(String n) { if (nvPairs == null) { return false; } for (int i = 0; i < nvPairs.size(); i++) { AnnotationNameValuePair pair = nvPairs.get(i); if (pair.getName().equals(n)) { return true; } } return false; }
{@inheritDoc}
/** * {@inheritDoc} */
public boolean hasNameValuePair(String n, String v) { if (nvPairs == null) { return false; } for (int i = 0; i < nvPairs.size(); i++) { AnnotationNameValuePair pair = nvPairs.get(i); if (pair.getName().equals(n)) { if (pair.getValue().stringify().equals(v)) { return true; } } } return false; }
{@inheritDoc}
/** * {@inheritDoc} */
public Set<String> getTargets() { if (!type.equals(UnresolvedType.AT_TARGET)) { return Collections.emptySet(); } AnnotationNameValuePair nvp = nvPairs.get(0); ArrayAnnotationValue aav = (ArrayAnnotationValue) nvp.getValue(); AnnotationValue[] avs = aav.getValues(); Set<String> targets = new HashSet<String>(); for (int i = 0; i < avs.length; i++) { EnumAnnotationValue value = (EnumAnnotationValue)avs[i]; targets.add(value.getValue()); } return targets; } public List<AnnotationNameValuePair> getNameValuePairs() { return nvPairs; } public boolean hasNameValuePairs() { return nvPairs != null && nvPairs.size() != 0; } public void addNameValuePair(AnnotationNameValuePair pair) { if (nvPairs == null) { nvPairs = new ArrayList<AnnotationNameValuePair>(); } nvPairs.add(pair); }
{@inheritDoc}
/** * {@inheritDoc} */
public String getStringFormOfValue(String name) { if (hasNameValuePairs()) { for (AnnotationNameValuePair nvPair : nvPairs) { if (nvPair.getName().equals(name)) { return nvPair.getValue().stringify(); } } } return null; } }