github / github/codeql

Java: TypeAccess matches implicit access

Aberta
#3,648 0 comentários 0 reações 0 responsáveis Ver no GitHub
Java question
Linguagem predominante
CodeQL
Estrelas
10.1k
Forks
2.1k
Merge médio
2d 15h
PRs com merge (30d)
141

Descrição

**Description of the issue**
It appears `TypeAccess` matches implicit (?) access of types, and that even when it has to hold `fromSource()`. This is not documented, and even QL's built-in query [`java/unused-import`](https://github.com/github/codeql/blob/master/java/ql/src/Violations%20of%20Best%20Practice/legacy/UnnecessaryImport.ql) appears to not consider this.
This behavior renders `TypeAccess` useless for certain queries.

Try the query below on the demo projects on https://lgtm.com/query:
```ql
import java
import semmle.code.java.Conversions

from TypeAccess typeAccess, RefType type, Location location, int expectedLength, int startColumn, int actualLength
where
type = typeAccess.getType()
and location = typeAccess.getLocation()
and type = type.getErasure()
and not type instanceof GenericType
and not type.hasAnnotation()
and not typeAccess.hasQualifier()
and expectedLength = type.getName().length()
// Ignore type access spanning multiple lines
and location.getNumberOfLines() = 1
and startColumn = location.getStartColumn()
// + 1 because both are inclusive
and actualLength = location.getEndColumn() - startColumn + 1
and expectedLength != actualLength
select typeAccess, expectedLength, startColumn, actualLength
```

While it does match some actual explicit type access (where the type is fully qualified) it also matches enum constant declarations, complete lambda bodies and probably other non-explicit access.

Possibly related to #3644.

Guia de contribuição

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.