/*
* Copyright 2012-2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.roaster.model;
import java.util.List;
import org.jboss.forge.roaster.Internal;
import org.jboss.forge.roaster.Origin;
/**
* Represents an annotation on some Java element.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public interface Annotation<O extends JavaType<O>> extends Internal, Origin<O>
{
boolean isSingleValue();
boolean isMarker();
boolean isNormal();
String getName();
String getQualifiedName();
<T extends Enum<T>> T getEnumValue(Class<T> type);
<T extends Enum<T>> T getEnumValue(Class<T> type, String name);
<T extends Enum<T>> T[] getEnumArrayValue(Class<T> type);
<T extends Enum<T>> T[] getEnumArrayValue(Class<T> type, String name);
String getLiteralValue();
String getLiteralValue(String name);
List<ValuePair> getValues();
String getStringValue();
String getStringValue(String name);
String[] getStringArrayValue();
String[] getStringArrayValue(String name);
Annotation<O> getAnnotationValue();
Annotation<O> getAnnotationValue(String name);
Annotation<O>[] getAnnotationArrayValue();
Annotation<O>[] getAnnotationArrayValue(String name);
Class<?> getClassValue();
Class<?> getClassValue(String name);
Class<?>[] getClassArrayValue();
Class<?>[] getClassArrayValue(String name);
boolean isTypeElementDefined(String name);
}