/* * JBoss, Home of Professional Open Source * Copyright 2010, Red Hat Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.as.weld; import java.util.Set; import org.jboss.as.weld.discovery.AnnotationType; import org.jboss.jandex.DotName; import org.jboss.weld.util.Function; import org.jboss.weld.util.collections.ImmutableSet; import org.jboss.weld.util.collections.Iterables; /** * Class that stores the {@link DotName}s of CDI annotations. * */ public enum CdiAnnotations { /** * javax.decorator.Decorator CDI annotation. */ DECORATOR(Constants.JAVAX_DECORATOR, "Decorator"), /** * javax.decorator.Delegate CDI annotation. */ DELEGATE(Constants.JAVAX_DECORATOR, "Delegate"), /** * javax.enterprise.context.ApplicationScoped CDI annotation. */ APP_SCOPED(Constants.JAVAX_ENT_CONTEXT, "ApplicationScoped"), /** * javax.enterprise.context.ConversationScoped CDI annotation. */ CONV_SCOPED(Constants.JAVAX_ENT_CONTEXT, "ConversationScoped"), /** * javax.enterprise.context.RequestScoped CDI annotation. */ REQ_SCOPED(Constants.JAVAX_ENT_CONTEXT, "RequestScoped"), /** * javax.enterprise.context.SessionScoped CDI annotation. */ SESS_SCOPED(Constants.JAVAX_ENT_CONTEXT, "SessionScoped"), /** * javax.enterprise.context.NormalScope CDI annotation. */ NORM_SCOPE(Constants.JAVAX_ENT_CONTEXT, "NormalScope"), /** * javax.enterprise.context.Dependent CDI annotation. */ DEPENDENT(Constants.JAVAX_ENT_CONTEXT, "Dependent"), /** * javax.inject.Singleton annotation. */ SINGLETON(Constants.JAVAX_INJ, "Singleton"), /** * javax.enterprise.event.Observes CDI annotation. */ OBSERVES(Constants.JAVAX_ENT_EVT, "Observes"), /** * javax.enterprise.inject.Alternative CDI annotation. */ ALTERNATIVE(Constants.JAVAX_ENT_INJ, "Alternative"), /** * javax.enterprise.inject.Any CDI annotation. */ ANY(Constants.JAVAX_ENT_INJ, "Any"), /** * javax.enterprise.inject.Default CDI annotation. */ DEFAULT(Constants.JAVAX_ENT_INJ, "Default"), /** * javax.enterprise.inject.Disposes CDI annotation. */ DISPOSES(Constants.JAVAX_ENT_INJ, "Disposes"), /** * javax.enterprise.inject.Model CDI annotation. */ MODEL(Constants.JAVAX_ENT_INJ, "Model"), /** * javax.enterprise.inject.New CDI annotation. */ NEW(Constants.JAVAX_ENT_INJ, "New"), /** * javax.enterprise.inject.Produces CDI annotation. */ PRODUCES(Constants.JAVAX_ENT_INJ, "Produces"), /** * javax.enterprise.inject.Specializes CDI annotation. */ SPECIALIZES(Constants.JAVAX_ENT_INJ, "Specializes"), /** * javax.enterprise.inject.Stereotype CDI annotation. */ STEREOTYPE(Constants.JAVAX_ENT_INJ, "Stereotype"), /** * javax.enterprise.inject.Typed CDI annotation. */ TYPED(Constants.JAVAX_ENT_INJ, "Typed"); /** * CDI annotation name. */ private final String simpleName; /** * CDI annotation fully qualified name. */ private final DotName dotName; /** * Constructor. * * @param prefix qualified name part * @param simpleName simple class name */ private CdiAnnotations(final DotName prefix, final String simpleName) { this.simpleName = simpleName; this.dotName = DotName.createComponentized(prefix, simpleName); } /** * this can't go on the enum itself. */ private static class Constants { /** * javax package. */ public static final DotName JAVAX = DotName.createComponentized(null, "javax"); /** * javax.interceptor package. */ public static final DotName JAVAX_INTERCEPTOR = DotName.createComponentized(JAVAX, "interceptor"); /** * javax.decorator package. */ public static final DotName JAVAX_DECORATOR = DotName.createComponentized(JAVAX, "decorator"); /** * javax.enterprise package. */ public static final DotName JAVAX_ENT = DotName.createComponentized(JAVAX, "enterprise"); /** * javax.enterprise.context package. */ public static final DotName JAVAX_ENT_CONTEXT = DotName.createComponentized(JAVAX_ENT, "context"); /** * javax.enterprise.event package. */ public static final DotName JAVAX_ENT_EVT = DotName.createComponentized(JAVAX_ENT, "event"); /** * javax.enterprise.inject package. */ public static final DotName JAVAX_ENT_INJ = DotName.createComponentized(JAVAX_ENT, "inject"); /** * javax.inject package. */ public static final DotName JAVAX_INJ = DotName.createComponentized(JAVAX, "inject"); } /** * @return fully qualified name */ public DotName getDotName() { return dotName; } /** * @return simple name */ public String getSimpleName() { return simpleName; } public static final DotName SCOPE = DotName.createComponentized(Constants.JAVAX_INJ, "Scope"); public static final Set<DotName> BUILT_IN_SCOPE_NAMES = ImmutableSet.<DotName>of(DEPENDENT.getDotName(), REQ_SCOPED.getDotName(), CONV_SCOPED.getDotName(), SESS_SCOPED.getDotName(), APP_SCOPED.getDotName(), SINGLETON.getDotName()); public static final Set<AnnotationType> BUILT_IN_SCOPES = ImmutableSet .copyOf(Iterables.transform(BUILT_IN_SCOPE_NAMES, new Function<DotName, AnnotationType>() { public AnnotationType apply(DotName input) { return new AnnotationType(input, true); } })); public static final Set<AnnotationType> BEAN_DEFINING_ANNOTATIONS = ImmutableSet.of( new AnnotationType(DotName.createComponentized(Constants.JAVAX_INTERCEPTOR, "Interceptor"), false), asAnnotationType(DECORATOR, false), asAnnotationType(DEPENDENT), asAnnotationType(REQ_SCOPED), asAnnotationType(CONV_SCOPED), asAnnotationType(SESS_SCOPED), asAnnotationType(APP_SCOPED)); public static final Set<AnnotationType> BEAN_DEFINING_META_ANNOTATIONS = ImmutableSet.of(asAnnotationType(NORM_SCOPE, false), asAnnotationType(STEREOTYPE, false)); private static AnnotationType asAnnotationType(CdiAnnotations annotation) { return new AnnotationType(annotation.getDotName(), true); } private static AnnotationType asAnnotationType(CdiAnnotations annotation, boolean inherited) { return new AnnotationType(annotation.getDotName(), inherited); } }