1

Je dois détecter les erreurs de compilation dans le code source java après un événement POST_CHANGE (généralement, il est déclenché après l'enregistrement des modifications dans le fichier java). J'utilise IElementChangedListener pour le faire. Donc, pour détecter les erreurs que j'ai essayé les deux possibilités ci-dessous:Comment détecter les erreurs de compilation Eclipse (Java - JDT)

1:

boolean error = IMarker.SEVERITY_ERROR == iFile.findMaxProblemSeverity(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE); 

2:

ICompilationUnit unit = ..; // get some compilation unit 

    // create requestor for accumulating discovered problems 
    IProblemRequestor problemRequestor = new IProblemRequestor() { 
    public void acceptProblem(IProblem problem) { 
     System.out.println(problem.getID() + ": " + problem.getMessage()); 
    } 
    public void beginReporting() {} 
    public void endReporting() {} 
    public boolean isActive() { return true; } // will detect problems if active 
    }; 

    // use working copy to hold source with error 
    unit.getWorkingCopy(new WorkingCopyOwner() {}, problemRequestor, null); 

La première solution ne fonctionne pas parce que les erreurs que je peux obtenir est de un état antérieur, c'est-à-dire l'état avant de sauvegarder. Il ne reflète pas le code source actuel à ce moment-là et n'est donc pas fiable.

La deuxième solution fonctionne correctement dans la plupart des cas. Après avoir enregistré un fichier java, je peux détecter toutes les erreurs existant dans ce fichier. Cependant, si j'exécute une mise à jour svn, cette solution n'est pas capable de détecter les erreurs après la fusion. Fondamentalement ce que je pourrais découvrir est au moment où je reçois la notification d'événement, l'ICompilationUnit montre la ma version du dossier, montrant plutôt le nouveau fusionné. Ce qui est bizarre, c'est que l'objet IFile a déjà tous les changements (le fichier fusionné), et même si je crée un objet ICompilationUnit à partir de l'objet IFile, il semble pointer vers la représentation de ma version de ICompilationUnit.

Quelqu'un peut me donner des idées à ce sujet?

Merci, Tiago

Répondre

0

Il y a trop d'une autre façon. Ajoutez un IDocumentListener à votre éditeur java actuel et chaque fois que le document change, recréez votre ICompilationUnit. Je pense que ça devrait marcher. Ou vous pouvez également essayer d'ajouter un BufferListener via FileBuffers.getTextFileBufferManager().addFileBufferListener() afin que vous puissiez avoir plus de contrôle lorsque vous devez mettre à jour votre ICompilationUnit.

Questions connexes