PatternMatchingInstanceof misses casts with parenthesized operands
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 74/100
Direzione di ricerca
Inizia dal matcher PatternMatchingInstanceof e controlla come gestisce l’operando del cast; la issue suggerisce ASTHelpers.stripParentheses come possibile pista. Confronta i riproduttori forniti (String) o e (String)(o), poi aggiungi o esegui un test di regressione per entrambi. L’obiettivo è che entrambe le forme producano lo stesso suggerimento di pattern matching.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Error Prone version
Error Prone 2.49.0 (javac 21.0.8, --source/--target 21)
Affected checks
PatternMatchingInstanceof
Description
Adding redundant parentheses around a cast operand causes PatternMatchingInstanceof to miss an instanceof-and-cast pattern. The check suggests if (o instanceof String s) when the declaration uses (String) o, but no longer reports it when the declaration uses (String)(o).
Per JLS §15.8.5, parentheses around an expression do not change its value, type, or constant-expression status. The parentheses around the cast operand in JLS §15.16 do not change the cast's behavior, so the same pattern-matching suggestion should remain available.
I verified the following pair on Error Prone 2.49.0:
| Check | Rewrite | BEFORE | AFTER | Effect |
|---|---|---|---|---|
PatternMatchingInstanceof |
(String) o → (String)(o) |
1 | 0 | false negative |
The matcher appears to inspect the cast operand without looking through ParenthesizedTree. A possible fix is to unwrap the operand before matching it, for example with ASTHelpers.stripParentheses.
Reproducers
PatternMatchingInstanceof — (String)(o) is missed
Per JLS §15.16 the parentheses around a cast operand are a no-op, but the instanceof-and-cast pattern is no longer recognized.
// BEFORE — 1 finding (suggests `if (o instanceof String s)`)
public class Sample {
public int f(Object o) {
if (o instanceof String) {
String s = (String) o;
return s.length();
}
return o.hashCode();
}
}
// AFTER — 0 findings
public class Sample {
public int f(Object o) {
if (o instanceof String) {
String s = (String)(o);
return s.length();
}
return o.hashCode();
}
}
Expected behavior
Both versions should produce 1 PatternMatchingInstanceof finding suggesting if (o instanceof String s). Parenthesizing o does not change the instanceof-and-cast pattern.
Actual behavior
The BEFORE version produces 1 finding suggesting pattern matching. The AFTER version produces 0 findings after the cast operand o is parenthesized.
- Lingua principale
- Java
- Stelle
- 7.3k
- Fork
- 827
- Merge medio
- 12h 13m
- PR unite (30g)
- 54
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di google/error-prone
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
google/error-prone#6239 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
ASTHelpers.getSymbol returns null for a parenthesized expression, while javac's TreeInfo.symbol returns the symbol insideForse già presa @vlsi l’ha presa 5 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
google/error-prone#6223 ·
I maintainer di solito rispondono entro 1 giorno
-
InlineTrivialConstant misses an empty-string constant with a parenthesized initializerForse già presa @Youssef-Khogaly l’ha presa 5 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
google/error-prone#6217 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
google/error-prone#6216 ·
I maintainer di solito rispondono entro 1 giorno
-
NonAtomicVolatileUpdate misses volatile increments and decrements with parenthesized operandsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
google/error-prone#6214 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di google/error-prone
Issue simili
-
[BUG] jackson3 JacksonJsonpMapper(ObjectMapper) fails to deserialize `_source` with "Trailing token" errorForse già presa @junyeokk l’ha presa oggi. Apertabug untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
opensearch-project/opensearch-java#2236 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
open-learning-exchange/myplanet#18392 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
linagora/twake-calendar-side-service#1218 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug] [Go] Ack returns nil when the server answers with a non-OK statusForse già presa @leizhiyuan l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
apache/rocketmq-clients#1465 ·
I maintainer di solito rispondono entro 2 giorni