-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Open
Labels
questionFurther information is requestedFurther information is requested
Description
It appears that for a RawType the result of getASourceSupertype() will not be the generic type. (This is also described by the getASourceSupertype() documentation.)
In addition to that there are the following issues:
- CodeQL raw types have a
<>at the end of their name, therefore a check for the class name such asgetDeclaringType().getASourceSupertype*().hasQualifiedName("java.util", "List")would not hold due to the trailing<>. - Access of static fields and methods declared on a generic class, but only when explicitly using the declaring class as qualifier, are treated like accesses on a raw type (
fieldAccess.getQualifier().getType()andmethodAccess.getDeclaringType()will have a raw type as result).
Whether that is the correct behavior might be a different story (now Java: Static method access with explicit qualifier on generic type claims declaring type is raw type #5593).
This all combined causes some false negatives for the pattern getDeclaringType().getASourceSupertype*() (which is also used a few times in the CodeQL codebase).
Is there a more 'correct' predicate for this task? A workaround might be getDeclaringType().getASourceSupertype*().getErasure().
If there is no alternative currently, would it make sense to change the behavior of getASourceSupertype() or introduce a new predicate?
Metadata
Metadata
Assignees
Labels
questionFurther information is requestedFurther information is requested