Copyright (c) 2000, 2018 IBM Corporation 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: IBM Corporation - initial API and implementation Stephan Herrmann - Contributions for bug 186342 - [compiler][null] Using annotations for null checking bug 392099 - [1.8][compiler][null] Apply null annotation on types for null analysis bug 388281 - [compiler][null] inheritance of null annotations as an option Bug 415043 - [1.8][null] Follow-up re null type annotations after bug 392099
/******************************************************************************* * Copyright (c) 2000, 2018 IBM Corporation 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: * IBM Corporation - initial API and implementation * Stephan Herrmann - Contributions for * bug 186342 - [compiler][null] Using annotations for null checking * bug 392099 - [1.8][compiler][null] Apply null annotation on types for null analysis * bug 388281 - [compiler][null] inheritance of null annotations as an option * Bug 415043 - [1.8][null] Follow-up re null type annotations after bug 392099 *******************************************************************************/
package org.eclipse.jdt.internal.compiler.lookup; import org.eclipse.jdt.internal.compiler.ast.ASTNode; public interface TagBits { // Tag bits in the tagBits int of every TypeBinding long IsArrayType = ASTNode.Bit1; long IsBaseType = ASTNode.Bit2; long IsNestedType = ASTNode.Bit3; long IsMemberType = ASTNode.Bit4; long ContainsNestedTypeReferences = ASTNode.Bit12; // method/parameterized type binding long MemberTypeMask = IsNestedType | IsMemberType | ContainsNestedTypeReferences; long IsLocalType = ASTNode.Bit5; long LocalTypeMask = IsNestedType | IsLocalType | ContainsNestedTypeReferences; long IsAnonymousType = ASTNode.Bit6; long AnonymousTypeMask = LocalTypeMask | IsAnonymousType | ContainsNestedTypeReferences; long IsBinaryBinding = ASTNode.Bit7; // set for all bindings either representing a missing type (type), or directly referencing a missing type (field/method/variable) long HasMissingType = ASTNode.Bit8; // for method long HasUncheckedTypeArgumentForBoundCheck = ASTNode.Bit9; // local variable long ForcedToBeRawType = ASTNode.Bit10; // set when method has argument(s) that couldn't be resolved long HasUnresolvedArguments = ASTNode.Bit10; // for the type cycle hierarchy check used by ClassScope long BeginHierarchyCheck = ASTNode.Bit9; // type long EndHierarchyCheck = ASTNode.Bit10; // type long PauseHierarchyCheck = ASTNode.Bit20; // type long HasParameterAnnotations = ASTNode.Bit11; // method/constructor // test bit to see if default abstract methods were computed long KnowsDefaultAbstractMethods = ASTNode.Bit11; // type long IsArgument = ASTNode.Bit11; // local long ClearPrivateModifier = ASTNode.Bit10; // constructor binding // for java 7 - this bit is also set if the variable is explicitly or implicitly final long IsEffectivelyFinal = ASTNode.Bit12; // local long MultiCatchParameter = ASTNode.Bit13; // local long IsResource = ASTNode.Bit14; // local // have implicit null annotations been collected (inherited(?) & default)? long IsNullnessKnown = ASTNode.Bit13; // method // test bits to see if parts of binary types are faulted long AreFieldsSorted = ASTNode.Bit13; long AreFieldsComplete = ASTNode.Bit14; // sorted and all resolved long AreMethodsSorted = ASTNode.Bit15; long AreMethodsComplete = ASTNode.Bit16; // sorted and all resolved // test bit to avoid asking a type for a member type (includes inherited member types) long HasNoMemberTypes = ASTNode.Bit17; // test bit to identify if the type's hierarchy is inconsistent long HierarchyHasProblems = ASTNode.Bit18; // test bit to identify if the type's type variables have been connected long TypeVariablesAreConnected = ASTNode.Bit19; // set for parameterized type with successful bound check long PassedBoundCheck = ASTNode.Bit23; // set for parameterized type NOT of the form X<?,?> long IsBoundParameterizedType = ASTNode.Bit24; // PTB only. long HasAnnotatedVariants = ASTNode.Bit24; // TVB, STB // used by BinaryTypeBinding long HasUnresolvedTypeVariables = ASTNode.Bit25; long HasUnresolvedSuperclass = ASTNode.Bit26; long HasUnresolvedSuperinterfaces = ASTNode.Bit27; long HasUnresolvedEnclosingType = ASTNode.Bit28; long HasUnresolvedMemberTypes = ASTNode.Bit29; // Also in use at STB. long HasTypeVariable = ASTNode.Bit30; // set either for type variables (direct) or parameterized types indirectly referencing type variables long HasDirectWildcard = ASTNode.Bit31; // set for parameterized types directly referencing wildcards // for the annotation cycle hierarchy check used by ClassScope long BeginAnnotationCheck = ASTNode.Bit32L; long EndAnnotationCheck = ASTNode.Bit33L; // standard annotations // 9-bits for targets long AnnotationResolved = ASTNode.Bit34L; long DeprecatedAnnotationResolved = ASTNode.Bit35L; long AnnotationTarget = ASTNode.Bit36L; // @Target({}) only sets this bit long AnnotationForType = ASTNode.Bit37L; long AnnotationForField = ASTNode.Bit38L; long AnnotationForMethod = ASTNode.Bit39L; long AnnotationForParameter = ASTNode.Bit40L; long AnnotationForConstructor = ASTNode.Bit41L; long AnnotationForLocalVariable = ASTNode.Bit42L; long AnnotationForAnnotationType = ASTNode.Bit43L; long AnnotationForPackage = ASTNode.Bit44L; long AnnotationForTypeUse = ASTNode.Bit54L; long AnnotationForTypeParameter = ASTNode.Bit55L; long AnnotationForModule = ASTNode.Bit62L; long SE7AnnotationTargetMASK = AnnotationForType | AnnotationForField | AnnotationForMethod | AnnotationForParameter | AnnotationForConstructor | AnnotationForLocalVariable | AnnotationForAnnotationType | AnnotationForPackage; long AnnotationTargetMASK = SE7AnnotationTargetMASK | AnnotationTarget | AnnotationForTypeUse | AnnotationForTypeParameter | AnnotationForModule; // 2-bits for retention (should check (tagBits & RetentionMask) == RuntimeRetention long AnnotationSourceRetention = ASTNode.Bit45L; long AnnotationClassRetention = ASTNode.Bit46L; long AnnotationRuntimeRetention = AnnotationSourceRetention | AnnotationClassRetention; long AnnotationRetentionMASK = AnnotationSourceRetention | AnnotationClassRetention | AnnotationRuntimeRetention; // marker annotations long AnnotationDeprecated = ASTNode.Bit47L; long AnnotationDocumented = ASTNode.Bit48L; long AnnotationInherited = ASTNode.Bit49L; long AnnotationOverride = ASTNode.Bit50L; long AnnotationSuppressWarnings = ASTNode.Bit51L;
Since:3.7 - java 7 safe vargs invocation
/** @since 3.7 - java 7 safe vargs invocation */
long AnnotationSafeVarargs = ASTNode.Bit52L;
Since:3.7 - java 7 MethodHandle.invokeExact(..)/invoke(..)
/** @since 3.7 - java 7 MethodHandle.invokeExact(..)/invoke(..)*/
long AnnotationPolymorphicSignature = ASTNode.Bit53L;
Since:3.8 null annotation for MethodBinding or LocalVariableBinding (argument):
/** @since 3.8 null annotation for MethodBinding or LocalVariableBinding (argument): */
long AnnotationNullable = ASTNode.Bit56L;
Since:3.8 null annotation for MethodBinding or LocalVariableBinding (argument):
/** @since 3.8 null annotation for MethodBinding or LocalVariableBinding (argument): */
long AnnotationNonNull = ASTNode.Bit57L;
Since:3.8 null-default annotation for PackageBinding or TypeBinding or MethodBinding:
/** @since 3.8 null-default annotation for PackageBinding or TypeBinding or MethodBinding: */
@Deprecated long AnnotationNonNullByDefault = ASTNode.Bit58L;
Since:3.8 canceling null-default annotation for PackageBinding or TypeBinding or MethodBinding:
/** @since 3.8 canceling null-default annotation for PackageBinding or TypeBinding or MethodBinding: */
@Deprecated long AnnotationNullUnspecifiedByDefault = ASTNode.Bit59L;
From Java 8
/** From Java 8 */
long AnnotationFunctionalInterface = ASTNode.Bit60L;
From Java 8
/** From Java 8 */
long AnnotationRepeatable = ASTNode.Bit61L; // Only for annotation types and since these cannot have constructors, we can overload HasNonPrivateConstructor.
From Java 9
/** From Java 9 */
long AnnotationTerminallyDeprecated = ASTNode.Bit63L; long AllStandardAnnotationsMask = AnnotationTargetMASK | AnnotationRetentionMASK | AnnotationDeprecated | AnnotationTerminallyDeprecated | AnnotationDocumented | AnnotationInherited | AnnotationOverride | AnnotationSuppressWarnings | AnnotationSafeVarargs | AnnotationPolymorphicSignature | AnnotationNullable | AnnotationNonNull | AnnotationNonNullByDefault | AnnotationNullUnspecifiedByDefault | AnnotationRepeatable; long AnnotationNullMASK = AnnotationNullable | AnnotationNonNull;
Since:3.10 marks a type that has a nullness annotation directly or on a detail (array dimension/type argument).
/** @since 3.10 marks a type that has a nullness annotation directly or on a detail (array dimension/type argument). */
long HasNullTypeAnnotation = ASTNode.Bit21; long HasTypeAnnotations = ASTNode.Bit22; long DefaultValueResolved = ASTNode.Bit60L; // set when type contains non-private constructor(s) long HasNonPrivateConstructor = ASTNode.Bit61L; // set when type binding has a captured wildcard somewhere long HasCapturedWildcard = ASTNode.Bit62L; }