Reapply "Java: Fix cartesian product"

This reverts commit c1654ce7cc.
This commit is contained in:
Tony Torralba
2022-10-04 11:11:44 +02:00
parent 281e49daf7
commit 2deb3e5625

View File

@@ -16,21 +16,14 @@ RefType getTaggedType(ThrowsTag tag) {
exists(ImportType i | i.getFile() = tag.getFile() | i.getImportedType() = result)
}
predicate canThrow(Callable callable, RefType exception) {
exists(string uncheckedException |
uncheckedException = "RuntimeException" or uncheckedException = "Error"
|
exception.getAnAncestor().hasQualifiedName("java.lang", uncheckedException)
)
or
callable.getAnException().getType().getADescendant() = exception
}
from ThrowsTag throwsTag, RefType thrownType, Callable docMethod
// Uses ClassOrInterface as type for thrownType to also cover case where erroneously an interface
// type is declared as thrown exception
from ThrowsTag throwsTag, ClassOrInterface thrownType, Callable docMethod
where
getTaggedType(throwsTag) = thrownType and
docMethod.getDoc().getJavadoc().getAChild*() = throwsTag and
not canThrow(docMethod, thrownType)
not thrownType instanceof UncheckedThrowableType and
not docMethod.getAnException().getType().getADescendant() = thrownType
select throwsTag,
"Javadoc for " + docMethod + " claims to throw " + thrownType.getName() +
" but this is impossible."