vscode-java
vscode-java copied to clipboard
Organize imports removes valid imports in Java files with compile errors
Organize imports will remove imports when the references are not valid Java code anymore. This might remove "valid" imports that just happen to be unused at that moment, because there is a compile error before the reference. The references cannot be easily restored once the compile errors are fixed, e.g. manually created static imports. This is problematic in long files with many imports and "editor.codeActionsOnSave" : ["source.organizeImports", ...]. A typo in the "wrong" place can easily remove all your imports.
Environment
- Operating System: Ubuntu 20.04.3 LTS
- JDK version: 11.0.6+10
- Visual Studio Code version: 1.63.2
- Java extension version: 1.2.0
Steps To Reproduce
- Introduce an import
- Create a compile error that will invalidate the reference

Current Result
All "unused" imports are removed.
Expected Result
Don't remove imports when the Java file has compile errors.
good issue
If this is the same bug as https://github.com/eclipse/eclipse.jdt.ls/issues/1203 , it was fixed about 2 weeks ago upstream, so we should be able to just copy over the changes into our own corresponding QuickAssistProcessor class in JDT-LS.
The above bug has been fixed in https://github.com/eclipse/eclipse.jdt.ls/pull/2003. You can also see the upstream fix at https://bugs.eclipse.org/bugs/show_bug.cgi?id=542653 . Marking this as closed as this should be part of our next release.
@rgrunber has this really been fixed? My 1.8.0 vscode-java still removes all imports if a file as a syntax error.
You're right. I'm still able to reproduce. I haven't investigated, but I would guess some kind of reference check is done against the static import, and if a syntax error happens in such a way as to make the AST unrecoverable, the reference is not discovered, and the import gets flagged for removal.
The modification of { for ; at the method declaration might be particular bad as it may destroy the entire block from being recovered.
Yup same issue, organise imports removes static imports from files and won't add them back again
I don't think the fix for #2861 fixes this issue. Messing with the block definitely affects detecting the references.
I don't think the fix for https://github.com/redhat-developer/vscode-java/issues/2861 fixes this issue. Messing with the block definitely affects detecting the references.
You are right. This issue can be reproduced in Eclipse and IntelliJ IDEA
Yup same issue, organise imports removes static imports from files and won't add them back again
You can add your favorite imports to java.completion.favoriteStaticMembers. See https://github.com/redhat-developer/vscode-java/blob/master/package.json#L527.