@Override public TypeKind getKind() { ArrayBinding type = (ArrayBinding)_binding; if (!type.isValidBinding() || ((type.leafComponentType().tagBits & TagBits.HasMissingType) != 0)) { return TypeKind.ERROR; } return TypeKind.ARRAY; } }
private ReferenceBinding typeToRecord(TypeBinding type) { if (type == null) return null; while (type.isArrayType()) type = ((ArrayBinding) type).leafComponentType(); switch (type.kind()) { case Binding.BASE_TYPE : case Binding.TYPE_PARAMETER : case Binding.WILDCARD_TYPE : case Binding.INTERSECTION_TYPE : case Binding.INTERSECTION_TYPE18: // constituents would have been recorded. case Binding.POLY_TYPE: // not a real type, will mutate into one, hopefully soon. return null; case Binding.PARAMETERIZED_TYPE : case Binding.RAW_TYPE : type = type.erasure(); } ReferenceBinding refType = (ReferenceBinding) type; if (refType.isLocalType()) return null; return refType; } public void verifyMethods(MethodVerifier verifier) {
private ReferenceBinding typeToRecord(TypeBinding type) { while (type.isArrayType()) type = ((ArrayBinding) type).leafComponentType(); switch (type.kind()) { case Binding.BASE_TYPE : case Binding.TYPE_PARAMETER : case Binding.WILDCARD_TYPE : case Binding.INTERSECTION_TYPE : case Binding.INTERSECTION_CAST_TYPE: // constituents would have been recorded. case Binding.POLY_TYPE: // not a real type, will mutate into one, hopefully soon. return null; case Binding.PARAMETERIZED_TYPE : case Binding.RAW_TYPE : type = type.erasure(); } ReferenceBinding refType = (ReferenceBinding) type; if (refType.isLocalType()) return null; return refType; } public void verifyMethods(MethodVerifier verifier) {
private ReferenceBinding typeToRecord(TypeBinding type) { while (type.isArrayType()) type = ((ArrayBinding) type).leafComponentType(); switch (type.kind()) { case Binding.BASE_TYPE : case Binding.TYPE_PARAMETER : case Binding.WILDCARD_TYPE : case Binding.INTERSECTION_TYPE : case Binding.INTERSECTION_CAST_TYPE: // constituents would have been recorded. case Binding.POLY_TYPE: // not a real type, will mutate into one, hopefully soon. return null; case Binding.PARAMETERIZED_TYPE : case Binding.RAW_TYPE : type = type.erasure(); } ReferenceBinding refType = (ReferenceBinding) type; if (refType.isLocalType()) return null; return refType; } public void verifyMethods(MethodVerifier verifier) {
private ReferenceBinding typeToRecord(TypeBinding type) { while (type.isArrayType()) type = ((ArrayBinding) type).leafComponentType(); switch (type.kind()) { case Binding.BASE_TYPE : case Binding.TYPE_PARAMETER : case Binding.WILDCARD_TYPE : case Binding.INTERSECTION_TYPE : case Binding.INTERSECTION_CAST_TYPE: // constituents would have been recorded. case Binding.POLY_TYPE: // not a real type, will mutate into one, hopefully soon. return null; case Binding.PARAMETERIZED_TYPE : case Binding.RAW_TYPE : type = type.erasure(); } ReferenceBinding refType = (ReferenceBinding) type; if (refType.isLocalType()) return null; return refType; } public void verifyMethods(MethodVerifier verifier) {
private ReferenceBinding typeToRecord(TypeBinding type) { if (type == null) return null; while (type.isArrayType()) type = ((ArrayBinding) type).leafComponentType(); switch (type.kind()) { case Binding.BASE_TYPE : case Binding.TYPE_PARAMETER : case Binding.WILDCARD_TYPE : case Binding.INTERSECTION_TYPE : case Binding.INTERSECTION_TYPE18: // constituents would have been recorded. case Binding.POLY_TYPE: // not a real type, will mutate into one, hopefully soon. return null; case Binding.PARAMETERIZED_TYPE : case Binding.RAW_TYPE : type = type.erasure(); } ReferenceBinding refType = (ReferenceBinding) type; if (refType.isLocalType()) return null; return refType; } public void verifyMethods(MethodVerifier verifier) {
private ReferenceBinding typeToRecord(TypeBinding type) { if (type == null) return null; while (type.isArrayType()) type = ((ArrayBinding) type).leafComponentType(); switch (type.kind()) { case Binding.BASE_TYPE : case Binding.TYPE_PARAMETER : case Binding.WILDCARD_TYPE : case Binding.INTERSECTION_TYPE : case Binding.INTERSECTION_TYPE18: // constituents would have been recorded. case Binding.POLY_TYPE: // not a real type, will mutate into one, hopefully soon. return null; case Binding.PARAMETERIZED_TYPE : case Binding.RAW_TYPE : type = type.erasure(); } ReferenceBinding refType = (ReferenceBinding) type; if (refType.isLocalType()) return null; return refType; } public void verifyMethods(MethodVerifier verifier) {
private ReferenceBinding typeToRecord(TypeBinding type) { if (type == null) return null; while (type.isArrayType()) type = ((ArrayBinding) type).leafComponentType(); switch (type.kind()) { case Binding.BASE_TYPE : case Binding.TYPE_PARAMETER : case Binding.WILDCARD_TYPE : case Binding.INTERSECTION_TYPE : case Binding.INTERSECTION_TYPE18: // constituents would have been recorded. case Binding.POLY_TYPE: // not a real type, will mutate into one, hopefully soon. return null; case Binding.PARAMETERIZED_TYPE : case Binding.RAW_TYPE : type = type.erasure(); } ReferenceBinding refType = (ReferenceBinding) type; if (refType.isLocalType()) return null; return refType; } public void verifyMethods(MethodVerifier verifier) {
private ReferenceBinding typeToRecord(TypeBinding type) { if (type == null) return null; while (type.isArrayType()) type = ((ArrayBinding) type).leafComponentType(); switch (type.kind()) { case Binding.BASE_TYPE : case Binding.TYPE_PARAMETER : case Binding.WILDCARD_TYPE : case Binding.INTERSECTION_TYPE : case Binding.INTERSECTION_TYPE18: // constituents would have been recorded. case Binding.POLY_TYPE: // not a real type, will mutate into one, hopefully soon. return null; case Binding.PARAMETERIZED_TYPE : case Binding.RAW_TYPE : type = type.erasure(); } ReferenceBinding refType = (ReferenceBinding) type; if (refType.isLocalType()) return null; return refType; } public void verifyMethods(MethodVerifier verifier) {
static void markNonNull(MethodBinding method, int purpose, LookupEnvironment environment) { // deferred update of the return type switch (purpose) { case EnumValues: if (environment.usesNullTypeAnnotations()) { TypeBinding elementType = ((ArrayBinding)method.returnType).leafComponentType(); AnnotationBinding nonNullAnnotation = environment.getNonNullAnnotation(); elementType = environment.createAnnotatedType(elementType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); method.returnType = environment.createArrayType(elementType, 1, new AnnotationBinding[]{ nonNullAnnotation, null }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; case EnumValueOf: if (environment.usesNullTypeAnnotations()) { method.returnType = environment.createAnnotatedType(method.returnType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; } } }
static void markNonNull(MethodBinding method, int purpose, LookupEnvironment environment) { // deferred update of the return type switch (purpose) { case EnumValues: if (environment.usesNullTypeAnnotations()) { TypeBinding elementType = ((ArrayBinding)method.returnType).leafComponentType(); AnnotationBinding nonNullAnnotation = environment.getNonNullAnnotation(); elementType = environment.createAnnotatedType(elementType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); method.returnType = environment.createArrayType(elementType, 1, new AnnotationBinding[]{ nonNullAnnotation, null }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; case EnumValueOf: if (environment.usesNullTypeAnnotations()) { method.returnType = environment.createAnnotatedType(method.returnType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; } } }
static void markNonNull(MethodBinding method, int purpose, LookupEnvironment environment) { // deferred update of the return type switch (purpose) { case EnumValues: if (environment.usesNullTypeAnnotations()) { TypeBinding elementType = ((ArrayBinding)method.returnType).leafComponentType(); AnnotationBinding nonNullAnnotation = environment.getNonNullAnnotation(); elementType = environment.createAnnotatedType(elementType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); method.returnType = environment.createArrayType(elementType, 1, new AnnotationBinding[]{ nonNullAnnotation, null }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; case EnumValueOf: if (environment.usesNullTypeAnnotations()) { method.returnType = environment.createAnnotatedType(method.returnType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; } } }
static void markNonNull(MethodBinding method, int purpose, LookupEnvironment environment) { // deferred update of the return type switch (purpose) { case EnumValues: if (environment.usesNullTypeAnnotations()) { TypeBinding elementType = ((ArrayBinding)method.returnType).leafComponentType(); AnnotationBinding nonNullAnnotation = environment.getNonNullAnnotation(); elementType = environment.createAnnotatedType(elementType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); method.returnType = environment.createArrayType(elementType, 1, new AnnotationBinding[]{ nonNullAnnotation, null }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; case EnumValueOf: if (environment.usesNullTypeAnnotations()) { method.returnType = environment.createAnnotatedType(method.returnType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; } } }
static void markNonNull(MethodBinding method, int purpose, LookupEnvironment environment) { // deferred update of the return type switch (purpose) { case EnumValues: if (environment.usesNullTypeAnnotations()) { TypeBinding elementType = ((ArrayBinding)method.returnType).leafComponentType(); AnnotationBinding nonNullAnnotation = environment.getNonNullAnnotation(); elementType = environment.createAnnotatedType(elementType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); method.returnType = environment.createArrayType(elementType, 1, new AnnotationBinding[]{ nonNullAnnotation, null }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; case EnumValueOf: if (environment.usesNullTypeAnnotations()) { method.returnType = environment.createAnnotatedType(method.returnType, new AnnotationBinding[]{ environment.getNonNullAnnotation() }); } else { method.tagBits |= TagBits.AnnotationNonNull; } return; } } }
@Override public boolean visit(ArrayBinding arrayBinding) { ExternalAnnotationSuperimposer memento = snapshot(); try { int dims = arrayBinding.dimensions; AnnotationBinding[][] annotsOnDims = new AnnotationBinding[dims][]; ITypeAnnotationWalker walker = this.currentWalker; for (int i = 0; i < dims; i++) { IBinaryAnnotation[] binaryAnnotations = walker.getAnnotationsAtCursor(arrayBinding.id); if (binaryAnnotations != ITypeAnnotationWalker.NO_ANNOTATIONS) { annotsOnDims[i] = BinaryTypeBinding.createAnnotations(binaryAnnotations, this.environment, null); this.isReplacing = true; } else { annotsOnDims[i] = Binding.NO_ANNOTATIONS; } walker = walker.toNextArrayDimension(); } TypeBinding leafComponentType = goAndSuperimpose(walker, arrayBinding.leafComponentType()); if (this.isReplacing) { this.typeReplacement = this.environment.createArrayType(leafComponentType, dims, AnnotatableTypeSystem.flattenedAnnotations(annotsOnDims)); } } finally { restore(memento); } return false; } @Override
@Override public boolean visit(ArrayBinding arrayBinding) { ExternalAnnotationSuperimposer memento = snapshot(); try { int dims = arrayBinding.dimensions; AnnotationBinding[][] annotsOnDims = new AnnotationBinding[dims][]; ITypeAnnotationWalker walker = this.currentWalker; for (int i = 0; i < dims; i++) { IBinaryAnnotation[] binaryAnnotations = walker.getAnnotationsAtCursor(arrayBinding.id); if (binaryAnnotations != ITypeAnnotationWalker.NO_ANNOTATIONS) { annotsOnDims[i] = BinaryTypeBinding.createAnnotations(binaryAnnotations, this.environment, null); this.isReplacing = true; } else { annotsOnDims[i] = Binding.NO_ANNOTATIONS; } walker = walker.toNextArrayDimension(); } TypeBinding leafComponentType = goAndSuperimpose(walker, arrayBinding.leafComponentType()); if (this.isReplacing) { this.typeReplacement = this.environment.createArrayType(leafComponentType, dims, AnnotatableTypeSystem.flattenedAnnotations(annotsOnDims)); } } finally { restore(memento); } return false; } @Override
@Override public boolean visit(ArrayBinding arrayBinding) { ExternalAnnotationSuperimposer memento = snapshot(); try { int dims = arrayBinding.dimensions; AnnotationBinding[][] annotsOnDims = new AnnotationBinding[dims][]; ITypeAnnotationWalker walker = this.currentWalker; for (int i = 0; i < dims; i++) { IBinaryAnnotation[] binaryAnnotations = walker.getAnnotationsAtCursor(arrayBinding.id, false); if (binaryAnnotations != ITypeAnnotationWalker.NO_ANNOTATIONS) { annotsOnDims[i] = BinaryTypeBinding.createAnnotations(binaryAnnotations, this.environment, null); this.isReplacing = true; } else { annotsOnDims[i] = Binding.NO_ANNOTATIONS; } walker = walker.toNextArrayDimension(); } TypeBinding leafComponentType = goAndSuperimpose(walker, arrayBinding.leafComponentType()); if (this.isReplacing) { this.typeReplacement = this.environment.createArrayType(leafComponentType, dims, AnnotatableTypeSystem.flattenedAnnotations(annotsOnDims)); } } finally { restore(memento); } return false; } @Override
@Override public boolean visit(ArrayBinding arrayBinding) { ExternalAnnotationSuperimposer memento = snapshot(); try { int dims = arrayBinding.dimensions; AnnotationBinding[][] annotsOnDims = new AnnotationBinding[dims][]; ITypeAnnotationWalker walker = this.currentWalker; for (int i = 0; i < dims; i++) { IBinaryAnnotation[] binaryAnnotations = walker.getAnnotationsAtCursor(arrayBinding.id); if (binaryAnnotations != ITypeAnnotationWalker.NO_ANNOTATIONS) { annotsOnDims[i] = BinaryTypeBinding.createAnnotations(binaryAnnotations, this.environment, null); this.isReplacing = true; } else { annotsOnDims[i] = Binding.NO_ANNOTATIONS; } walker = walker.toNextArrayDimension(); } TypeBinding leafComponentType = goAndSuperimpose(walker, arrayBinding.leafComponentType()); if (this.isReplacing) { this.typeReplacement = this.environment.createArrayType(leafComponentType, dims, AnnotatableTypeSystem.flattenedAnnotations(annotsOnDims)); } } finally { restore(memento); } return false; } @Override
@Override public boolean visit(ArrayBinding arrayBinding) { ExternalAnnotationSuperimposer memento = snapshot(); try { int dims = arrayBinding.dimensions; AnnotationBinding[][] annotsOnDims = new AnnotationBinding[dims][]; ITypeAnnotationWalker walker = this.currentWalker; for (int i = 0; i < dims; i++) { IBinaryAnnotation[] binaryAnnotations = walker.getAnnotationsAtCursor(arrayBinding.id, false); if (binaryAnnotations != ITypeAnnotationWalker.NO_ANNOTATIONS) { annotsOnDims[i] = BinaryTypeBinding.createAnnotations(binaryAnnotations, this.environment, null); this.isReplacing = true; } else { annotsOnDims[i] = Binding.NO_ANNOTATIONS; } walker = walker.toNextArrayDimension(); } TypeBinding leafComponentType = goAndSuperimpose(walker, arrayBinding.leafComponentType()); if (this.isReplacing) { this.typeReplacement = this.environment.createArrayType(leafComponentType, dims, AnnotatableTypeSystem.flattenedAnnotations(annotsOnDims)); } } finally { restore(memento); } return false; } @Override
InvocationSite invocationSite) { TypeBinding leafType = receiverType.leafComponentType(); if (leafType instanceof ReferenceBinding) { if (!((ReferenceBinding) leafType).canBeSeenBy(this))