Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

UseVarForGenericMethodInvocations 'mvn rewrite:run' crash

Geschlossen
#698 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
38/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
java
Bereich
devtools

Rechercherichtung

Suchen Sie das Rezept UseVarForGenericMethodInvocations und die Implementierung von JavaTemplate, und reproduzieren Sie dann den Absturz mit dem im Issue gezeigten Java-Testfall. Die Arbeit ist abgeschlossen, wenn der generische Methodenaufruf ohne Ausnahme in var umgewandelt wird und die erwartete Quelltextausgabe erzeugt wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug

What version of OpenRewrite are you using?

Latest 3.4.0

What is the smallest, simplest way to reproduce the problem?

    @Test
    public void useVarBug() {
        rewriteRun(
          spec -> spec.recipe(new UseVarForGenericMethodInvocations()),
          version(
            //language=java
            java(
              """
                import java.util.Optional;
                
                class A {
                    <T extends Number> void test(T element) {
                        Optional<T> o = Optional.of(element);
                    }
                }
                """,
              """
                import java.util.Optional;
                
                class A {
                    <T extends Number> void test(T element) {
                        var o = Optional.of(element);
                    }
                }
                """), 17));
    }

What did you expect to see?

Replace variable with var

What did you see instead?

It crashes.

What is the full stack trace of any errors you encountered?

org.openrewrite.internal.RecipeRunException: java.lang.IllegalArgumentException: Expected a template that would generate exactly one statement to replace one statement, but generated 2. Template:
var o = __P__.<java.util.Optional<T extends java.lang.Number>>/*__p1__*/p()
Substitutions:
Substitutions(code=var #{} = #{any()}, parameters=[o, Optional.of(element)], propertyPlaceholderHelper=org.openrewrite.internal.PropertyPlaceholderHelper@3ee0b4f7)
Statement:
Optional<T> o = Optional.of(element)

Are you interested in contributing a fix to OpenRewrite

I think there are 2 issues here.
In the JavaTemplate implementation:
var o = __P__.<java.util.Optional<T extends java.lang.Number>>/*__p1__*/p()
should be
var o = __P__.<java.util.Optional<T>>/*__p1__*/p()

and this would work by making the template in UseVarForGenericMethodInvocations context sensitive.

But maybe, for this recipe, it would be best to do the "transformation" by hand, instead of using JavaTemplate?

Vorherrschende Sprache
Java
Sterne
160
Forks
133
Ø Merge
5 Std. 51 Min.
Gemergte PRs (30 T.)
86

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus openrewrite/rewrite-migrate-java

Alle Issues in openrewrite/rewrite-migrate-java

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.