package com.redhat.ceylon.eclipse.core.builder;
import static com.redhat.ceylon.eclipse.core.classpath.CeylonClasspathUtil.getCeylonClasspathContainers;
import static com.redhat.ceylon.eclipse.java2ceylon.Java2CeylonProxies.*;
import static org.eclipse.core.resources.ResourcesPlugin.getWorkspace;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
public class ProjectChangeListener implements IResourceChangeListener {
@Override
public void resourceChanged(IResourceChangeEvent event) {
try {
event.getDelta().accept(new IResourceDeltaVisitor() {
@Override
public boolean visit(IResourceDelta delta) throws CoreException {
final IWorkspaceRoot workspaceRoot = getWorkspace().getRoot();
IResource resource = delta.getResource();
if (resource.equals(workspaceRoot)) {
return true;
}
if (resource instanceof IProject && delta.getKind()==IResourceDelta.REMOVED) {
CeylonBuilder.removeProject((IProject) resource);
modelJ2C().ceylonModel().removeProject((IProject) resource);
}
else if (resource instanceof IProject && (delta.getFlags() & IResourceDelta.OPEN) != 0) {
final IProject project = (IProject) resource;
if (!project.isOpen()) {
CeylonBuilder.removeProject(project);
modelJ2C().ceylonModel().removeProject((IProject) resource);
}
else if (CeylonNature.isEnabled(project)) {
IJavaProject javaProject = JavaCore.create(project);
modelJ2C().ceylonModel().addProject((IProject) resource);
if (javaProject != null) {
getCeylonClasspathContainers(javaProject);
}
}
}
return false;
}
});
} catch (CoreException e) {
e.printStackTrace();
}
}
}