`ExtractExplicitConstructorInvocationArguments` drops the extracted variable declaration when run via rewrite-maven-plugin
Les mainteneurs répondent en général sous 1 jour
Une pull request liée a déjà été fusionnée.
- #1297 par @timtebeek — fusionnée
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 55/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- java
- Domaine
- build-system
Piste de recherche
Start by reading the ExtractExplicitConstructorInvocationArguments recipe and its extractMethodInvocationArgument test, which the issue says passes. Compare the test’s rewrite result with a run through rewrite-maven-plugin 6.46.1 using the supplied Java 25 example. Done means the extracted variable declaration appears before the explicit super or this invocation, so the transformed source compiles.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What version of OpenRewrite are you using?
rewrite-maven-plugin6.46.1rewrite-migrate-java3.42.1 (latest published on Maven Central)- Java 25 (
maven.compiler.release=25)
What is the smallest, simplest way to reproduce the problem?
pom.xml with only this recipe active:
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>6.46.1</version>
<configuration>
<activeRecipes>
<recipe>org.openrewrite.java.migrate.lang.ExtractExplicitConstructorInvocationArguments</recipe>
</activeRecipes>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite.recipe</groupId>
<artifactId>rewrite-migrate-java</artifactId>
<version>3.42.1</version>
</dependency>
</dependencies>
</plugin>
Source (this is the input of the recipe's own extractMethodInvocationArgument test):
import java.util.Objects;
class Parent {
Parent(String name) {
}
}
class Child extends Parent {
Child(String name) {
super(Objects.requireNonNull(name));
}
}
Run mvn rewrite:run.
What did you expect to see?
Child(String name) {
String name1 = Objects.requireNonNull(name);
super(name1);
}
What did you see instead?
Child(String name) {
super(name1);
}
The argument is replaced by a reference to a local variable, but the declaration is never inserted, so the result does not compile (cannot find symbol: variable name1).
The same happens with this(..) delegation (this(Executors.newSingleThreadScheduledExecutor()) becomes this(s1)) and with static calls (super(String.valueOf(1)) becomes super(v)). It is not specific to lambdas.
Additional context
- The corresponding unit test passes upstream, so the problem seems specific to a real run through the Maven plugin rather than
RewriteTest. - I could not test 3.46.0, since it is not yet on Maven Central. The only commit touching the recipe between 3.42.1 and 3.46.0 is #1235 (skip non-Java sources), which looks unrelated.
- No existing issue found for this recipe.
- Langage dominant
- Java
- Étoiles
- 159
- Forks
- 130
- Merge moyen
- 6 h 49 min
- PR mergées (30 j)
- 47
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de openrewrite/rewrite-migrate-java
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 68/100
openrewrite/rewrite-migrate-java#1246 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 32/100
openrewrite/rewrite-migrate-java#1227 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
OptionalNotPresentToIsEmpty rewrites `!isPresent()` on a non-`java.util.Optional` type, producing uncompilable `isEmpty()`Peut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 70/100
openrewrite/rewrite-migrate-java#1146 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 50/100
openrewrite/rewrite-migrate-java#1119 · 5 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
openrewrite/rewrite-migrate-java#1069 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de openrewrite/rewrite-migrate-java
Issues similaires
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
apache/rocketmq-dashboard#6896 ·
Les mainteneurs répondent en général sous 3 jours
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
OpenIntegrationEngine/engine#496 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
SasanLabs/VulnerableApp#836 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement frontend
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
Albertinesilva/backend-engineering-journey-java-springboot#46 ·