org.eclipse.jdt.annotation.NonNull Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.jdt.annotation Show documentation
Show all versions of org.eclipse.jdt.annotation Show documentation
JDT Annotations for Enhanced Null Analysis
/*******************************************************************************
* Copyright (c) 2011, 2013 Stephan Herrmann and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Stephan Herrmann - initial API and implementation
* IBM Corporation - bug fixes
*******************************************************************************/
package org.eclipse.jdt.annotation;
import static java.lang.annotation.ElementType.TYPE_USE;
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;
/**
* Qualifier for a reference type in a {@link ElementType#TYPE_USE TYPE_USE} position:
* The type that has this annotation is intended to not include the value null
.
*
* If annotation based null analysis is enabled using this annotation has two consequences:
*
*
* - Dereferencing an expression of this type is safe, i.e., no
NullPointerException
can occur at runtime.
* - An attempt to bind a
null
value to an entity (field, local variable, method parameter or method return value)
* of this type is a compile time error.
*
* For the second case, diagnostics issued by the compiler should distinguish three situations:
*
* - Nullness of the value can be statically determined, the entity is definitely bound from either of:
*
- the value
null
, or
* - an entity with a {@link Nullable @Nullable} type.
* - Nullness cannot definitely be determined, because different code branches yield different results.
* - Nullness cannot be determined, because other program elements are involved for which
* null annotations are lacking.
*
*
* Note: Since org.eclipse.jdt.annotation 2.0.0, the
* @Target
is {TYPE_USE}
. For the old API, see
*
* @NonNull
in 1.1.0.
*
* @since 1.0
*/
@Documented
@Retention(RetentionPolicy.CLASS)
@Target({ TYPE_USE })
public @interface NonNull {
// marker annotation with no members
}