2017-06-13 8 views
0

Voici un segment de code de mon code (travail en xtext) (Enregistrement d'un modèle dans un fichier)Eclipse: Mise en un ensemble de ressources après avoir sauvé

generatedModel.save(null) //here generatedModel is an object of resource 

Puis lorsque je tente de récupérer les informations sur ce modèle en utilisant

...getResource(...) 

Je reçois l'erreur que la ressource suivante ne se trouve pas Mais quand j'ajouté Thread.sleep (3000) entre les deux, cela a fonctionné. Par conséquent, cela se produit lorsque la ressource est en cours d'accès avant d'être enregistrée dans le fichier. J'ai essayé d'ajouter un écouteur pour vérifier quand le fichier est sauvegardé. Voici le code:

var listener = new IResourceChangeListener() { 

      override resourceChanged(IResourceChangeEvent event) { 

       if (event.type === IResourceChangeEvent.POST_CHANGE) { 
        delta = event.delta 
       } 
       if (delta.kind === IResourceDelta.CHANGED) { 
        delta.accept(
         new IResourceDeltaVisitor() { 

          override visit(IResourceDelta innerdelta) throws CoreException { 
           if (innerdelta.resource.type === IResource.FILE) 
            println("YESYESYEYESYEYESYSY") 
            else if(innerdelta.resource.type === IResource.FOLDER) 
            println("PPPPPPPPPPPPPPPPPP") 
            else if (innerdelta.resource.type === IResource.PROJECT) 
            println("WWWWWWWWWWWWWWWWWWWW") 
           else 
            println("NONONONONO") 
            return false 
          } 

         } 
        ) 
       } 
      } 

     } 
     var workspace = ResourcesPlugin.workspace 
     workspace.addResourceChangeListener(listener) 

mais cela n'aide pas. Il imprime nonONO .. toujours sur les changements. J'enregistre les fichiers dans un autre dossier dans le même espace de travail. b (projet) -> scr-gen (dossier) -> code (dossier) -> fichiers ...

+0

greg-449 de votre aide J'ai appris à obtenir des événements liés aux fichiers. Mais y a-t-il un moyen d'obtenir l'écouteur après l'enregistrement du fichier? –

Répondre

0

Votre méthode de visite doit retourner true pour que toutes les ressources du delta soient visitées.

Les événements de changement de ressource peuvent contenir plusieurs deltas imbriqués, vous devez tous les regarder. Le delta aura normalement l'espace de travail au niveau supérieur delta, avec le projet au niveau suivant, puis tous les dossiers, enfin les fichiers.

+0

Merci pour l'aide. Je vais l'éditer et vous laisser savoir si cela a fonctionné. –

+0

Merci beaucoup pour une description claire. Ça a marché :) –