redhat-developer / redhat-developer/vscode-java

Change Method Signature fails to modify parameter type

Đang mở
#3,535 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
TypeScript
Star
2.3k
Fork
546
Merge trung bình
20 giờ 1 phút
Pull request đã merge (30 ngày)
11

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Tái hiện lỗi bằng cách sử dụng phép tái cấu trúc Change Method Signature và kiểm tra stack trace thông qua ChangeSignatureHandler.getChangeSignatureRefactoring và ChangeSignatureProcessor.checkFinalConditions. Kiểm tra cách phép tái cấu trúc JDT xử lý kiểu tham số đã thay đổi, sau đó xác minh rằng Preview hoặc Refactor hoàn tất thành công và các lỗi cung cấp phản hồi hiển thị.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
java
Lĩnh vực
tooling
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.