framework.src.org.checkerframework.qualframework.base.DefaultTypeHierarchy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of checker Show documentation
Show all versions of checker Show documentation
The Checker Framework enhances Java’s type system to
make it more powerful and useful. This lets software developers
detect and prevent errors in their Java programs.
The Checker Framework includes compiler plug-ins ("checkers")
that find bugs or verify their absence. It also permits you to
write your own compiler plug-ins.
package org.checkerframework.qualframework.base;
import javax.lang.model.type.TypeKind;
/** Default implementation of {@link TypeHierarchy}. Applies standard Java
* subtyping rules to compare Java types.
*/
public class DefaultTypeHierarchy implements TypeHierarchy {
private TypeHierarchyAdapter adapter;
public DefaultTypeHierarchy() {
}
void setAdapter(TypeHierarchyAdapter adapter) {
this.adapter = adapter;
}
@Override
public boolean isSubtype(QualifiedTypeMirror subtype, QualifiedTypeMirror supertype) {
// Qualifier API doesn't allow qualifiers on NullType, but the
// underlying framework does (and expects the annotations to match).
// So we have this extra check to make NullType a subtype of all
// reference types.
if (subtype.getKind() == TypeKind.NULL) {
switch (supertype.getKind()) {
case ARRAY:
case DECLARED:
case NULL:
case TYPEVAR:
return true;
default:
}
}
return adapter.superIsSubtype(subtype, supertype);
}
}