Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

UseVarForGenericMethodInvocations 'mvn rewrite:run' crash

Ouverte
#698 1 commentaire 1 réaction 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
38/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
java
Domaine
devtools

Piste de recherche

Localisez la recette UseVarForGenericMethodInvocations et l’implémentation de JavaTemplate, puis reproduisez le plantage avec le cas de test Java présenté dans l’issue. Le travail est terminé lorsque l’invocation de méthode générique est convertie en var sans exception et que la sortie du code source attendue est produite.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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?

Langage dominant
Java
Étoiles
159
Forks
130
Merge moyen
6 h 49 min
PR mergées (30 j)
47

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de openrewrite/rewrite-migrate-java

Toutes les issues de openrewrite/rewrite-migrate-java

Issues similaires

Plus d'issues Java

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.