redhat-developer / redhat-developer/vscode-java
Updating class references (generated classes from proto files)
Nadie ha tomado este issue todavía.
- 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:
- Restart vscode, or
- 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
- Provide a new command to update class references?
- 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
- Clone this repo: https://github.com/badsyntax/test-gradle-project-proto
- Open
test-gradle-project-protoin vscode - Open
src/main/java/test/gradle/project/proto/App.java - Note classes for
Greetingdon't exist - In the vscode terminal, run
./gradlew generateProto - Note references for
Greetingstill don't exist - Either restart vscode, or run "Update project configuration" from
build.gradle - Note references for
Greetingnow 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
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- 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