vscode-java icon indicating copy to clipboard operation
vscode-java copied to clipboard

VSCode fails to load Java Project if a config class with same name exists in test directory

Open gamodg opened this issue 2 years ago • 1 comments

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
  1. Create a Spring Project
  2. Add a Spring configuration with name MongoConfig with any contents
  3. Copy the same config to test folder
  4. 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

gamodg avatar May 31 '22 00:05 gamodg

Could you share a sample project for this issue?

jdneo avatar Jun 15 '22 01:06 jdneo

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.

m0wlheld avatar Oct 27 '22 07:10 m0wlheld

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

jdneo avatar Oct 27 '22 07:10 jdneo

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.

grafik

m0wlheld avatar Oct 27 '22 07:10 m0wlheld