01c5902b974053cc1f041ea2801ea53fcf725b42
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / builder / ParserVisitor.java
1 package net.sourceforge.phpeclipse.builder;
2
3 import net.sourceforge.phpdt.internal.ui.util.PHPFileUtil;
4 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
5 import net.sourceforge.phpeclipse.phpeditor.PHPParserAction;
6
7 import org.eclipse.core.resources.IFile;
8 import org.eclipse.core.resources.IProject;
9 import org.eclipse.core.resources.IResource;
10 import org.eclipse.core.resources.IResourceDelta;
11 import org.eclipse.core.resources.IResourceDeltaVisitor;
12 import org.eclipse.core.runtime.CoreException;
13 import org.eclipse.core.runtime.IProgressMonitor;
14 import org.eclipse.core.runtime.OperationCanceledException;
15
16 /**
17  *
18  * @see org.eclipse.core.resources.IResourceDelta
19  * @see org.eclipse.core.resources.IResourceDeltaVisitor
20  */
21 public class ParserVisitor implements IResourceDeltaVisitor {
22   final IProgressMonitor fMonitor;
23   final IProject fProject;
24   public ParserVisitor(IProject iProject, IProgressMonitor monitor) {
25     fMonitor = monitor;
26     fProject = iProject;
27   }
28
29   protected void checkCancel() {
30     if (fMonitor.isCanceled()) {
31       throw new OperationCanceledException();
32     }
33   }
34
35   /** 
36    * Visits the given resource delta.
37    * 
38    * @return <code>true</code> if the resource delta's children should
39    *            be visited; <code>false</code> if they should be skipped.
40    * @exception CoreException if the visit fails for some reason.
41    */
42   public boolean visit(IResourceDelta delta) throws CoreException {
43
44     IResource resource = delta.getResource();
45     int resourceType = resource.getType();
46     checkCancel();
47
48     final IdentifierIndexManager indexManager = PHPeclipsePlugin.getDefault().getIndexManager(fProject);
49
50     switch (delta.getKind()) {
51       case IResourceDelta.ADDED :
52         if (resourceType == IResource.FILE) {
53           if ((resource.getFileExtension() != null) && PHPFileUtil.isPHPFile((IFile) resource)) {
54             fMonitor.worked(1);
55             fMonitor.subTask("Adding: " + resource.getFullPath());
56
57             // check for parsing errors
58             PHPParserAction.parseFile((IFile) resource);
59             // update indexfile for the project:
60             indexManager.addFile((IFile) resource);
61           }
62         }
63         break;
64
65       case IResourceDelta.CHANGED :
66         if (resourceType == IResource.FILE) {
67           if ((resource.getFileExtension() != null) && PHPFileUtil.isPHPFile((IFile) resource)) {
68             fMonitor.worked(1);
69             fMonitor.subTask("Changing: " + resource.getFullPath());
70
71             //check for parsing errors
72             PHPParserAction.parseFile((IFile) resource);
73             // update indexfile for the project:
74             indexManager.changeFile((IFile) resource);
75           }
76         }
77         break;
78
79       case IResourceDelta.REMOVED :
80         if (resourceType == IResource.FILE) {
81           if ((resource.getFileExtension() != null) && PHPFileUtil.isPHPFile((IFile) resource)) {
82             fMonitor.worked(1);
83             fMonitor.subTask("Removing: " + resource.getFullPath());
84
85             // update indexfile for the project:
86             indexManager.removeFile((IFile) resource);
87           }
88         }
89         break;
90     }
91     return true; // carry on
92   }
93
94 }