Skip to content

Shadowing happens when overriding method #15525

Open
@jesuistombe

Description

@jesuistombe

Consider the following example:

MyCallable.qll
import java

class CallableByErasure extends Callable {
    override predicate hasQualifiedName(string package, string type, string name) {
      this.isDeclaredIn(package, type) and this.hasName(name)
    }
  
    predicate isDeclaredIn(string package, string type) {
      this.getDeclaringType().getErasure().(RefType).hasQualifiedName(package, type)
    }
}
Query.ql
import java
// import MyCallable

from Call c
where c.getCallee().hasQualifiedName("java.util", "Set<String>", "iterator")
select c

The query correctly finds one instance (see test case below).
If I uncomment import MyCallable however, then the query does not return anything. Is this expected behaviour? How do I prevent this from happening?

This is the test case I used:

import java.util.HashSet;
import java.util.Set;

class GenericsClass {
    public void foo() { 
        Set<String> set = new HashSet<String>();
        set.iterator();
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    JavaquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions