public void evaluateNullAnnotations(Scope scope, TypeParameter parameter) { long nullTagBits = NullAnnotationMatching.validNullTagBits(this.tagBits); if (this.firstBound != null && this.firstBound.isValidBinding()) { long superNullTagBits = NullAnnotationMatching.validNullTagBits(this.firstBound.tagBits); if (superNullTagBits != 0L) { if (nullTagBits == 0L) { nullTagBits |= superNullTagBits; } else if (superNullTagBits != nullTagBits) { this.firstBound = nullMismatchOnBound(parameter, this.firstBound, superNullTagBits, nullTagBits, scope); } } } ReferenceBinding[] interfaces = this.superInterfaces; int length; if ((length = interfaces.length) != 0) { for (int i = length; --i >= 0; ) { ReferenceBinding resolveType = interfaces[i]; long superNullTagBits = NullAnnotationMatching.validNullTagBits(resolveType.tagBits); if (superNullTagBits != 0L) { if (nullTagBits == 0L) { nullTagBits |= superNullTagBits; } else if (superNullTagBits != nullTagBits) { interfaces[i] = (ReferenceBinding) nullMismatchOnBound( parameter, resolveType, superNullTagBits, nullTagBits, scope); } } interfaces[i] = resolveType; } } if (nullTagBits != 0) this.tagBits |= nullTagBits | TagBits.HasNullTypeAnnotation; }
private long getReturnTypeNullnessTagBits(MethodBinding method, boolean useTypeAnnotations) { if (useTypeAnnotations) { if (method.returnType == null) return 0L; return NullAnnotationMatching.validNullTagBits(method.returnType.tagBits); } return method.tagBits & TagBits.AnnotationNullMASK; }
private Boolean getParameterNonNullness(MethodBinding method, int i, boolean useTypeAnnotations) { if (useTypeAnnotations) { TypeBinding parameter = method.parameters[i]; if (parameter != null) { long nullBits = NullAnnotationMatching.validNullTagBits(parameter.tagBits); if (nullBits != 0L) return Boolean.valueOf(nullBits == TagBits.AnnotationNonNull); } return null; } return (method.parameterNonNullness == null) ? null : method.parameterNonNullness[i]; }