vscode-java
vscode-java copied to clipboard
VSCode fails to load Java Project if a config class with same name exists in test directory
My project structure is like this src main java config MongoConfig test java config MongoConfig -- Disable transactions in test profile
Environment
- Operating System: Windows 10
- JDK version: 11
- Visual Studio Code version: 1.67.2
- Java extension version: v1.6.0
Steps To Reproduce
- Create a Spring Project
- Add a Spring configuration with name MongoConfig with any contents
- Copy the same config to test folder
- VSCode will fail
[Please attach a sample project reproducing the error] [!ENTRY org.eclipse.jdt.ls.core 1 0 2022-05-30 14:57:52.863 !MESSAGE begin problem for /MongoConfig.java
!ENTRY org.eclipse.jdt.ls.core 1 0 2022-05-30 14:57:52.864 !MESSAGE 0 problems reported for /MongoConfig.java
!ENTRY org.eclipse.jdt.ls.core 1 0 2022-05-30 14:57:52.866 !MESSAGE Validated 9. Took 1201 ms
!ENTRY org.eclipse.jdt.ls.core 1 0 2022-05-30 14:57:53.614 !MESSAGE >> build jobs finished
!ENTRY org.eclipse.jdt.ls.core 4 0 2022-05-30 14:57:53.641 !MESSAGE Offset > length: 427 > 204 !STACK 0 org.eclipse.jface.text.BadLocationException: Offset > length: 427 > 204 at org.eclipse.jface.text.ListLineTracker.getLineNumberOfOffset(ListLineTracker.java:141) at org.eclipse.jface.text.AbstractLineTracker.getLineNumberOfOffset(AbstractLineTracker.java:155) at org.eclipse.jface.text.AbstractDocument.getLineOfOffset(AbstractDocument.java:872) at org.eclipse.jdt.ls.core.internal.handlers.JsonRpcHelpers.toLine(JsonRpcHelpers.java:156) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.convertRange(WorkspaceDiagnosticsHandler.java:411) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.toDiagnostic(WorkspaceDiagnosticsHandler.java:386) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.lambda$3(WorkspaceDiagnosticsHandler.java:370) at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source) at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source) at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.toDiagnosticsArray(WorkspaceDiagnosticsHandler.java:372) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.publishDiagnostics(WorkspaceDiagnosticsHandler.java:311) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.publishDiagnostics(WorkspaceDiagnosticsHandler.java:230) at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer$2.run(JDTLanguageServer.java:272) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
!ENTRY org.eclipse.jdt.ls.core 4 0 2022-05-30 14:57:53.644 !MESSAGE Offset > length: 438 > 204 !STACK 0 org.eclipse.jface.text.BadLocationException: Offset > length: 438 > 204 at org.eclipse.jface.text.ListLineTracker.getLineNumberOfOffset(ListLineTracker.java:141) at org.eclipse.jface.text.AbstractLineTracker.getLineNumberOfOffset(AbstractLineTracker.java:155) at org.eclipse.jface.text.AbstractDocument.getLineOfOffset(AbstractDocument.java:872) at org.eclipse.jdt.ls.core.internal.handlers.JsonRpcHelpers.toLine(JsonRpcHelpers.java:156) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.convertRange(WorkspaceDiagnosticsHandler.java:412) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.toDiagnostic(WorkspaceDiagnosticsHandler.java:386) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.lambda$3(WorkspaceDiagnosticsHandler.java:370) at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source) at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source) at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.toDiagnosticsArray(WorkspaceDiagnosticsHandler.java:372) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.publishDiagnostics(WorkspaceDiagnosticsHandler.java:311) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.publishDiagnostics(WorkspaceDiagnosticsHandler.java:230) at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer$2.run(JDTLanguageServer.java:272) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
!ENTRY org.eclipse.core.jobs 4 2 2022-05-30 14:57:53.646 !MESSAGE An internal error occurred during: "Initialize workspace". !STACK 0 java.lang.NullPointerException: Cannot load from int array because "startPos" is null at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.convertRange(WorkspaceDiagnosticsHandler.java:413) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.toDiagnostic(WorkspaceDiagnosticsHandler.java:386) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.lambda$3(WorkspaceDiagnosticsHandler.java:370) at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source) at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source) at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.toDiagnosticsArray(WorkspaceDiagnosticsHandler.java:372) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.publishDiagnostics(WorkspaceDiagnosticsHandler.java:311) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.publishDiagnostics(WorkspaceDiagnosticsHandler.java:230) at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer$2.run(JDTLanguageServer.java:272) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)]
Current Result
VSCode fails to load the Java Project
Expected Result
VSCode should not validate classes with same names
Additional Informations
Below is the error from the Java Server log
Could you share a sample project for this issue?
Sample project available at https://github.com/m0wlheld/vscode_issue_2485 . It simply has the same-named class in both - src/main/java and src/test/java . A usual approach to overwrite "main" classes for test purposes.
While I do face this issue on one machine running VSCode 1.72.2, I cannot observe it on another machine running VSCode 1.72.2, too. Instead the output of Language Support for Java is:
[Error - 08:55:03] 27.10.2022, 08:55:01 Error occured while building workspace. Details: message: The type SampleClass is already defined; code: 0; resource: C:/Users/myuser/Projects/vscode_issue_2485/src/test/java/com/example/SampleClass.java;
with no negative effect on the IDE.
The project can be opened on my side. But the SampleClass
in the test folder won't be compiled to the target folder, thus tests failed.
While running test from command line via mvn
works.
Eclipse also has the error The type XXX is already defined
Confirmed. The test SampleClass is marked invalid on opening the project, but as soon as you open it in the editor, it gets compiled. Yet, running tests in VSCode fail, while using mvn test
does work.