| /******************************************************************************* |
| * Copyright (c) 2011, 2014 Stephan Herrmann and others. |
| * 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 |
| * |
| * Contributors: |
| * Stephan Herrmann - initial API and implementation |
| * IBM Corporation - bug fixes |
| *******************************************************************************/ |
| package org.eclipse.jdt.annotation; |
| |
| import java.lang.annotation.ElementType; |
| import static org.eclipse.jdt.annotation.DefaultLocation.*; |
| |
| import java.lang.annotation.Documented; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.Target; |
| |
| /** |
| * Applying this annotation to a declaration has the effect that type references, |
| * which are contained in the declaration, and for which a null annotation is otherwise lacking, |
| * should be considered as {@link NonNull @NonNull}. |
| * <dl> |
| * <dt>Locations</dt> |
| * <dd>This annotation is permitted for these declarations: |
| * {@link ElementType#PACKAGE PACKAGE}, {@link ElementType#TYPE TYPE}, |
| * {@link ElementType#METHOD METHOD}, {@link ElementType#CONSTRUCTOR CONSTRUCTOR}, |
| * {@link ElementType#FIELD FIELD}, {@link ElementType#LOCAL_VARIABLE LOCAL_VARIABLE}.</dd> |
| * <dt>Fine tuning</dt> |
| * <dd>The exact effect is further controlled by the attribute {@link #value}, specifying what |
| * kinds of locations within the given declaration will be affected. See {@link DefaultLocation} |
| * for the meaning of the available values.</dd> |
| * <dt>Nested defaults</dt> |
| * <dd>If this annotation is applied to a declaration that is already affected by the same |
| * annotation at an enclosing scope, the inner annotation <em>replaces</em> the effect of the |
| * outer annotation for the scope of the inner declaration.</dd> |
| * <dt>Canceling a default</dt> |
| * <dd>In particular, specifying an empty value (<code>{}</code>) for the {@link #value} |
| * attribute has the effect of canceling any null defaults that might be defined for any |
| * enclosing scope.</dd> |
| * </dl> |
| * <p> |
| * Note that for applying an annotation to a package, a file by the name |
| * <code>package-info.java</code> is used. |
| * </p> |
| * <p> |
| * <b>Note:</b> Since org.eclipse.jdt.annotation 2.0.0, this annotation also applies to field and local variable declarations. |
| * For the old API, see |
| * <a href="http://help.eclipse.org/kepler/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/annotation/NonNullByDefault.html"> |
| * <code>@NonNullByDefault</code> in 1.1.0</a>. |
| * </p> |
| * @since 1.0 |
| */ |
| @Documented |
| @Retention(RetentionPolicy.CLASS) |
| @Target({ ElementType.PACKAGE, ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE }) |
| public @interface NonNullByDefault { |
| /** |
| * Specifies the set of locations within the annotated declaration that should be affected by the nonnull default. |
| * @return the locations, or an empty array to cancel any null defaults from enclosing scopes |
| * @since 2.0 |
| */ |
| DefaultLocation[] value() default { PARAMETER, RETURN_TYPE, FIELD, TYPE_BOUND, TYPE_ARGUMENT }; |
| } |