redhat-developer / redhat-developer/vscode-java
Updating class references (generated classes from proto files)
Personne n'a encore pris cette issue.
- Langage dominant
- TypeScript
- Étoiles
- 2.3k
- Forks
- 546
- Merge moyen
- 20 h 1 min
- PR mergées (30 j)
- 11
Description
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.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez le problème avec le dépôt lié test-gradle-project-proto, en utilisant build.gradle et src/main/java/test/gradle/project/proto/App.java. Exécutez ./gradlew generateProto après avoir ouvert le projet et vérifiez si les références à Greeting se mettent à jour sans redémarrer VS Code ni exécuter Update project configuration. C’est terminé lorsque les références aux classes générées sont actualisées après la modification des fichiers, sans nécessiter une mise à jour complète de la configuration du projet.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java, vscode
- Domaine
- developer-experience, tooling
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100