You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
3.4 KiB
159 lines
3.4 KiB
7 years ago
|
/* *******************************************************************
|
||
|
* 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
|
||
|
*
|
||
|
* ******************************************************************/
|
||
7 years ago
|
package com.fr.third.aspectj.weaver;
|
||
7 years ago
|
|
||
|
import java.util.Collections;
|
||
|
import java.util.Iterator;
|
||
|
import java.util.Set;
|
||
|
|
||
|
public abstract class AbstractAnnotationAJ implements AnnotationAJ {
|
||
|
|
||
|
protected final ResolvedType type;
|
||
|
|
||
|
private Set<String> supportedTargets = null; // @target meta annotation
|
||
|
|
||
|
public AbstractAnnotationAJ(ResolvedType type) {
|
||
|
this.type = type;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final ResolvedType getType() {
|
||
|
return type;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final String getTypeSignature() {
|
||
|
return type.getSignature();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final String getTypeName() {
|
||
|
return type.getName();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final boolean allowedOnAnnotationType() {
|
||
|
ensureAtTargetInitialized();
|
||
|
if (supportedTargets.isEmpty()) {
|
||
|
return true;
|
||
|
}
|
||
|
return supportedTargets.contains("ANNOTATION_TYPE");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final boolean allowedOnField() {
|
||
|
ensureAtTargetInitialized();
|
||
|
if (supportedTargets.isEmpty()) {
|
||
|
return true;
|
||
|
}
|
||
|
return supportedTargets.contains("FIELD");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final boolean allowedOnRegularType() {
|
||
|
ensureAtTargetInitialized();
|
||
|
if (supportedTargets.isEmpty()) {
|
||
|
return true;
|
||
|
}
|
||
|
return supportedTargets.contains("TYPE");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final void ensureAtTargetInitialized() {
|
||
|
if (supportedTargets == null) {
|
||
|
AnnotationAJ atTargetAnnotation = retrieveAnnotationOnAnnotation(UnresolvedType.AT_TARGET);
|
||
|
if (atTargetAnnotation == null) {
|
||
|
supportedTargets = Collections.emptySet();
|
||
|
} else {
|
||
|
supportedTargets = atTargetAnnotation.getTargets();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final String getValidTargets() {
|
||
|
StringBuffer sb = new StringBuffer();
|
||
|
sb.append("{");
|
||
|
for (Iterator<String> iter = supportedTargets.iterator(); iter.hasNext();) {
|
||
|
String evalue = iter.next();
|
||
|
sb.append(evalue);
|
||
|
if (iter.hasNext()) {
|
||
|
sb.append(",");
|
||
|
}
|
||
|
}
|
||
|
sb.append("}");
|
||
|
return sb.toString();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public final boolean specifiesTarget() {
|
||
|
ensureAtTargetInitialized();
|
||
|
return !supportedTargets.isEmpty();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Helper method to retrieve an annotation on an annotation e.g. retrieveAnnotationOnAnnotation(UnresolvedType.AT_TARGET)
|
||
|
*/
|
||
|
private final AnnotationAJ retrieveAnnotationOnAnnotation(UnresolvedType requiredAnnotationSignature) {
|
||
|
AnnotationAJ[] annos = type.getAnnotations();
|
||
|
for (int i = 0; i < annos.length; i++) {
|
||
|
AnnotationAJ a = annos[i];
|
||
|
if (a.getTypeSignature().equals(requiredAnnotationSignature.getSignature())) {
|
||
|
return annos[i];
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public abstract boolean isRuntimeVisible();
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public abstract Set<String> getTargets();
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public abstract boolean hasNameValuePair(String name, String value);
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public abstract boolean hasNamedValue(String name);
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public abstract String stringify();
|
||
|
|
||
|
}
|