All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.osgi.annotation.bundle.Directive Maven / Gradle / Ivy

There is a newer version: 1.9.22.1
Show newest version
/*******************************************************************************
 * Copyright (c) Contributors to the Eclipse Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-License-Identifier: Apache-2.0 
 *******************************************************************************/

package org.osgi.annotation.bundle;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Mark an annotation element as a directive.
 * 

* This is used when applying {@link Capability} or {@link Requirement} as a * meta annotation to an annotation declaration. The value of the annotation * element annotated with {@code Directive} is used as the value of a directive * in the generated capability or requirement clause. For example: * *

 * @Capability(namespace = "my.namespace")
 * public @interface MyCapability {
 *   @Directive("resource")
 *   String value() default "";
 * }
 * 
 * @MyCapability("foo")
 * public MyClass {}
 * 
* * The use of the {@code MyCapability} annotation, which is meta annotated with * the {@code Capability} and {@code Directive} annotations, will result in a * capability in the namespace {@code my.namespace} with the directive * {@code resource:=foo}. *

* If the element annotated with {@code Directive} is unspecified when applied, * then the directive must not be generated in the generated capability or * requirement clause. For example: * *

 * @MyCapability
 * public MyClass {}
 * 
* * will not have the {@code resource} directive in the generated capability. *

* This annotation is not retained at runtime. It is for use by tools to * generate bundle manifests. * * @author $Id: 3cb5691a604299a07e1f80e708f2201311d03f6c $ */ @Documented @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface Directive { /** * The name of the directive. *

* If not specified, the name of the annotated element is used as the name * of the directive. */ String value() default ""; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy