redhat-developer / redhat-developer/vscode-java
Change Method Signature fails to modify parameter type
Personne n'a encore pris cette issue.
- Langage dominant
- TypeScript
- Étoiles
- 2.3k
- Forks
- 546
- Merge moyen
- 20 h 1 min
- PR mergées (30 j)
- 11
Description
Change Method Signature fails when trying to modify a parameter type.
Environment
- Operating System: Mac
- JDK version: openjdk version "21.0.2" 2024-01-16 LTS
- Visual Studio Code version: 1.87.2
- Java extension version: v0.25.2023121402
Steps To Reproduce
- Use "Change method signature" to change the type of an input parameter
- Hit Preview or Refactor
Current Result
The buttons do not seem to do anything. In the output panel, the following exception is shown:
SEVERE: Internal error: java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.internal.compiler.ast.TypeReference.getTypeName()" because "argument.type" is null
java.util.concurrent.CompletionException: java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.internal.compiler.ast.TypeReference.getTypeName()" because "argument.type" is null
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.internal.compiler.ast.TypeReference.getTypeName()" because "argument.type" is null
at org.eclipse.jdt.internal.compiler.parser.RecoveredMethod.updateFromParserState(RecoveredMethod.java:496)
at org.eclipse.jdt.internal.compiler.parser.Parser.updateRecoveryState(Parser.java:14202)
at org.eclipse.jdt.internal.compiler.parser.Parser.resumeOnSyntaxError(Parser.java:14112)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12626)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12978)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12935)
at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:11317)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.parseAndBuildBindings(MatchLocator.java:1950)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1305)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1406)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1526)
at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches(JavaSearchParticipant.java:134)
at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:253)
at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:599)
at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:669)
at org.eclipse.jdt.internal.corext.refactoring.rename.RippleMethodFinder2.findAllDeclarations(RippleMethodFinder2.java:475)
at org.eclipse.jdt.internal.corext.refactoring.rename.RippleMethodFinder2.findAllRippleMethods(RippleMethodFinder2.java:208)
at org.eclipse.jdt.internal.corext.refactoring.rename.RippleMethodFinder2.getAllRippleMethods(RippleMethodFinder2.java:188)
at org.eclipse.jdt.internal.corext.refactoring.rename.RippleMethodFinder2.getRelatedMethods(RippleMethodFinder2.java:181)
at org.eclipse.jdt.internal.corext.refactoring.structure.ChangeSignatureProcessor.checkFinalConditions(ChangeSignatureProcessor.java:823)
at org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.checkFinalConditions(ProcessorBasedRefactoring.java:227)
at org.eclipse.jdt.ls.core.internal.handlers.ChangeSignatureHandler.getChangeSignatureRefactoring(ChangeSignatureHandler.java:198)
at org.eclipse.jdt.ls.core.internal.handlers.GetRefactorEditHandler.getEditsForRefactor(GetRefactorEditHandler.java:161)
at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$46(JDTLanguageServer.java:1128)
at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
... 7 more
Expected Result
Should just work. Or at least give visual feedback an about the error (fails silently).
Additional Informations
Guide de contribution
Ouvrir 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.
Piste de recherche
Reproduisez l’échec à l’aide du refactoring Change Method Signature et examinez la stack trace via ChangeSignatureHandler.getChangeSignatureRefactoring et ChangeSignatureProcessor.checkFinalConditions. Vérifiez comment le refactoring JDT gère un type de paramètre modifié, puis vérifiez que Preview ou Refactor s’achève avec succès et que les échecs fournissent un retour visible.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java
- Domaine
- tooling
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100