AnnotationLiteral.java

Licensed under the Apache License, Version 2.0.
File was copied from the javax.enterprise cdi-api version 1.0.

JBoss, Home of Professional Open Source
Copyright 2008, Red Hat Middleware LLC, and individual contributors
by the @authors tag. See the copyright.txt in the distribution for a
full listing of individual contributors.