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

Bundled lwjgl methods don't have javadoc comments

Open T3sT3ro opened this issue 4 years ago • 1 comments

Whenever I try to use some of the functions from lwjgl that are exposed with an api dependency from the imgui-java-app I can't get any IDE help in method descriptions or params from the lwjgl package. This hinders development significantly. I tried adding lwjgl dependencies to the project myself to force the IDE to switch, but IDE still points to your shaded lwjgl and I don't know how to make it resolve the other way.

I'm no gradle ninja so I don't know how to make the project "rewire" to another lwjgl. If I understand correctly what shading and everything is, then the imgui-java-app shades the lwjgl inside but skips the javadoc comments, right?

I like what you did with the Application and Window classes, so I wanted to use them, but I can't resolve the conflict with my current knowledge.

Maybe it would be better to create 2 versions of imgui-java-app - one with shaded lwjgl and another one with runtimeOnly or implementation dependency?

As a sidenote - It would be good to give some basic descriptions in the README.md about what do packages do - I had to analyze subproject build.gradle files to understand them.

T3sT3ro avatar Aug 18 '21 00:08 T3sT3ro

Ok so I found a way to sidestep this problem but I am too much of a newbie in gradle to know if what I'm doing is right and won't introduce some unwanted side effects.

I added lwjgl dependencies myself but I also added the exclude rule to imgui-java-app for org.lwjgl.

dependencies {
    implementation(project(":magma"))

    implementation(kotlin("stdlib"))
    implementation("io.github.microutils", "kotlin-logging-jvm","2.0.10")
    implementation("ch.qos.logback", "logback-classic", "1.2.5")

    testImplementation("org.junit.jupiter:junit-jupiter:5.7.0")

    // lwjgl - as external dependency because bundled in imgui has no javadoc nor intellisense
    val lwjglNatives = when (OperatingSystem.current()) {
        OperatingSystem.LINUX   -> "natives-linux"
        OperatingSystem.WINDOWS -> "natives-windows"
        else                    -> throw Error("Unrecognized or unsupported Operating system. Please set \"lwjglNatives\" manually")
    }
    val lwjglVersion = "3.2.3"

    implementation(platform("org.lwjgl:lwjgl-bom:$lwjglVersion"))
    implementation("org.lwjgl", "lwjgl")
    implementation("org.lwjgl", "lwjgl-glfw")
    implementation("org.lwjgl", "lwjgl-opengl")

    // It works without the 3 below, but I don't know why, so I left it here. Can I safely delete this?
    runtimeOnly("org.lwjgl", "lwjgl", classifier = lwjglNatives)
    runtimeOnly("org.lwjgl", "lwjgl-glfw", classifier = lwjglNatives)
    runtimeOnly("org.lwjgl", "lwjgl-opengl", classifier = lwjglNatives)

    // imgui
    val imguiVersion = "1.83.3"

    implementation("io.github.spair", "imgui-java-app", version = imguiVersion) {
        exclude("org.lwjgl") // <- this in combination with manual lwjgl deps. gives javadocs and IntelliSense
    }
}

T3sT3ro avatar Aug 18 '21 22:08 T3sT3ro