redhat-developer / redhat-developer/vscode-java

Updating class references (generated classes from proto files)

Ouverte
#1,482 8 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

annotation-processing ls-out-of-sync
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:

  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.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.