redhat-developer / redhat-developer/vscode-java

Change Method Signature fails to modify parameter type

Ouverte
#3,535 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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
  1. Use "Change method signature" to change the type of an input parameter
  2. 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

  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.

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

Recevez les nouvelles issues par e-mail

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