Shadowing happens when overriding method
- Ngôn ngữ chính
- CodeQL
- Star
- 10.1k
- Fork
- 2.1k
- Merge trung bình
- 2 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 141
Mô tả
Consider the following example:
##### MyCallable.qll
```codeql
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
```codeql
import java
// import MyCallable
from Call c
where c.getCallee().hasQualifiedName("java.util", "Set", "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:
```java
import java.util.HashSet;
import java.util.Set;
class GenericsClass {
public void foo() {
Set set = new HashSet();
set.iterator();
}
}
```
Hướng dẫn đóng góp
Hướng nghiên cứu
Tái hiện vấn đề với MyCallable.qll, Query.ql và ví dụ Java GenericsClass được cung cấp. So sánh kết quả truy vấn khi có và không có import MyCallable, sau đó kiểm tra các predicate ghi đè hasQualifiedName và isDeclaredIn; được xem là hoàn tất khi đã hiểu hành vi shadowing và truy vấn hoạt động như mong đợi trong cả hai trường hợp.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- devtools
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100