scalacenter/bloop

Java modules are not handled properly

tgodzik opened this issue · 2 comments

Copied from scalameta/metals#4847

Describe the bug
Actually, I was trying to create a sample project, for a more complicated bug, but then I noticed that my "minimal project" doesn't seem to work without any changes

https://github.com/JPro-one/HelloJPro.

Screenshot 2023-01-11 at 22 21 58

This is a pure Java project. The question is, is that supposed to work?
I'm asking because Metals it's a scala language server.

When I look into my other projects, the Java parts sometimes work with Metals/Bloop, and sometimes not.
But Metals/Bloop is always trying to compile it, so I guess it's in the scope of the project.
So, I thought I start by posting the most simple case as a bug report.

If you wonder why I post this, I usually have a lot of mixed Scala/Java projects.

Expected behavior
No response

Operating system
macOS

Editor/Extension
None

Version of Metals
v1.21.0

Extra context or search terms
No response

I was playing around with it again, and this is the main issue that stops me from using VisualCode.
I have many mixed Java/Scala projects, and the latest IntelliJ Version is becoming increasingly unstable.

solution?
It seems like many of the problems can be solved by just using --module-path instead of -cp when a module-info.java exists.
This would probably make most modern projects compile - maybe after fixing a dependency that doesn't work as a module yet.

help
I would like to invest some time to make this work - if someone can guide me on how to do so.
Is there a way to find out the javac command used when running bloop compile <project>?
With some help I might even be able to make a PR fo this.

I haven't found time to work on it unfortunately, so I would be glad to get some help. The part dealing with the Java Compiler is actually not that hard. Take a look at:

final class BloopForkedJavaCompiler(javaHome: Option[File]) extends JavaCompiler {

And if you would need to write tests you could probably use the examples in

test("compile java code depending on scala code") {

Though not sure if those tests would be enough, you can also use sbt project such as the ones in https://github.com/scalacenter/bloop/tree/main/frontend/src/test/resources

You should be able to use the like in

test("compile is successful with semanticDB and javac processorpath") {

If you need more help do let me know! Unfortunately, I don't know much around modules aside from the fact that we should deal with them better.