redhat-developer / redhat-developer/vscode-java

Updating class references (generated classes from proto files)

Abierto
#1,482 8 comentarios 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

annotation-processing ls-out-of-sync
Lenguaje dominante
TypeScript
Estrellas
2.3k
Forks
546
Merge medio
20 h 1 min
PR fusionados (30 d)
11

Descripción

Hi. I'm using Protocol Buffers in my Java application. I'm using Gradle, and the protobuf-gradle-plugin to generate Java classes from the .proto files. The generated proto Java files are added to my sourceSet in build.gradle.

build.gradle
plugins {
    id 'java'
    id 'application'
    id "com.google.protobuf" version "0.8.12"
}

repositories {
    jcenter()
}

dependencies {
    implementation 'com.google.guava:guava:28.2-jre'
    testImplementation 'junit:junit:4.12'
}

application {
    mainClassName = 'test.gradle.project.proto.App'
}

sourceSets {
  main {
    java {
      srcDirs 'src/main/java'
      srcDirs 'build/generated/source/proto/main/java'
    }
  }
}

compileJava.dependsOn 'generateProto'

Whenever I make a change to the proto files, and re-generate the proto Java classes via ./gradlew generateProto, the language server does not update the references, and I get errors in the editor. AFAIK there's two ways to update the class references:

  1. Restart vscode, or
  2. Run "Update project configuration" from the grade build file

Neither options are ideal, and option 2 can sometimes take a long time to complete on large projects. I would think updating class references should be a quick process. No compilation is necessary, the language server just needs to update it's reference cache (or something along those lines).

Would it be possible to

  1. Provide a new command to update class references?
  2. Watch the build directory/sourceSets and automatically update references when generated files change?

I'm also developing a gradle vscode extension, and from my extension i would potentially be able to provide a list of generated class files to the vscode-java extension via an API call, so that could also be a potential option.

Looking for any ideas/suggestions/changes to make this process more user friendly and fast.

Environment
  • Operating System: MacOS catalina
  • JDK version: openjdk 11.0.2
  • Visual Studio Code version: 1.45.1
  • Java extension version: 0.62.0
Steps To Reproduce
  1. Clone this repo: https://github.com/badsyntax/test-gradle-project-proto
  2. Open test-gradle-project-proto in vscode
  3. Open src/main/java/test/gradle/project/proto/App.java
  4. Note classes for Greeting don't exist
  5. In the vscode terminal, run ./gradlew generateProto
  6. Note references for Greeting still don't exist
  7. Either restart vscode, or run "Update project configuration" from build.gradle
  8. Note references for Greeting now exist and there's no errors in the editor

Keep in mind this is a very small project and you won't see the performance issues I mentioned above, but does demonstrate the extension not updating references when files on disk change.

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce el problema con el repositorio vinculado test-gradle-project-proto, utilizando build.gradle y src/main/java/test/gradle/project/proto/App.java. Ejecuta ./gradlew generateProto después de abrir el proyecto y observa si las referencias a Greeting se actualizan sin reiniciar VS Code ni ejecutar Update project configuration. Está hecho cuando las referencias a las clases generadas se actualizan después de cambiar los archivos, sin requerir una actualización completa de la configuración del proyecto.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java, vscode
Área
developer-experience, tooling
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
48/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.