package org.erlide.project.model.impl; import com.google.common.base.Objects; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; 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.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Conversions; import org.eclipse.xtext.xbase.lib.Exceptions; import org.eclipse.xtext.xbase.lib.InputOutput; import org.erlide.project.buildpath.BuildpathEntry; import org.erlide.project.model.ICodeUnit; import org.erlide.project.model.IErlangModel; import org.erlide.project.model.IErlangModelElement; import org.erlide.project.model.IErlangProject; import org.erlide.project.model.impl.ErlangModelElement; @SuppressWarnings("all") public class ErlangProject extends ErlangModelElement implements IErlangProject, IResourceChangeListener { private IErlangModel model; private List<ICodeUnit> units; private IProject workspaceProject; private boolean closed; public ErlangProject(final IErlangModel model, final IProject project) { super(); this.model = model; ArrayList<ICodeUnit> _newArrayList = CollectionLiterals.<ICodeUnit>newArrayList(); this.units = _newArrayList; this.workspaceProject = project; IWorkspace _workspace = ResourcesPlugin.getWorkspace(); _workspace.addResourceChangeListener(this); boolean _isOpen = project.isOpen(); if (_isOpen) { this.open(); } } public List<IProject> getReferencedProjects() { try { this.open(); return (List<IProject>)Conversions.doWrapArray(this.workspaceProject.getReferencedProjects()); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } @Override public Collection<ICodeUnit> getUnits() { this.open(); return Collections.<ICodeUnit>unmodifiableCollection(this.units); } @Override public IProject getWorkspaceProject() { return this.workspaceProject; } @Override public String toString() { String _string = super.toString(); final StringBuffer result = new StringBuffer(_string); result.append(" (workspaceProject: "); result.append(this.workspaceProject); result.append(")"); return result.toString(); } @Override public String getName() { return this.workspaceProject.getName(); } @Override public IErlangModelElement getParent() { return this.model; } @Override public IResource getResource() { return this.workspaceProject; } private boolean open() { boolean _xblockexpression = false; { InputOutput.<String>println(("OPEN " + this)); _xblockexpression = this.closed = false; } return _xblockexpression; } private boolean close() { boolean _xblockexpression = false; { InputOutput.<String>println(("CLOSE " + this)); _xblockexpression = this.closed = true; } return _xblockexpression; } @Override public void resourceChanged(final IResourceChangeEvent event) { try { int _type = event.getType(); boolean _notEquals = (_type != IResourceChangeEvent.POST_CHANGE); if (_notEquals) { return; } IResourceDelta _delta = event.getDelta(); final IResourceDeltaVisitor _function = new IResourceDeltaVisitor() { @Override public boolean visit(final IResourceDelta delta) throws CoreException { IResource _resource = delta.getResource(); IErlangProject _project = ErlangProject.this.getProject(); boolean _equals = Objects.equal(_resource, _project); if (_equals) { IErlangProject _project_1 = ErlangProject.this.getProject(); String _plus = ("CHANGE IN PROJECT " + _project_1); String _plus_1 = (_plus + " "); int _flags = delta.getFlags(); String _plus_2 = (_plus_1 + Integer.valueOf(_flags)); InputOutput.<String>println(_plus_2); int _flags_1 = delta.getFlags(); boolean _matched = false; if (!_matched) { int _flags_2 = delta.getFlags(); boolean _match = ErlangProject.this.match(_flags_2, IResourceDelta.OPEN); if (_match) { _matched=true; if (ErlangProject.this.closed) { ErlangProject.this.open(); } else { ErlangProject.this.close(); } } } if (!_matched) { int _flags_3 = delta.getFlags(); boolean _match_1 = ErlangProject.this.match(_flags_3, IResourceDelta.DESCRIPTION); if (_match_1) { _matched=true; } } if (!_matched) { int _flags_4 = delta.getFlags(); boolean _match_2 = ErlangProject.this.match(_flags_4, IResourceDelta.REMOVED); if (_match_2) { _matched=true; IWorkspace _workspace = ResourcesPlugin.getWorkspace(); _workspace.removeResourceChangeListener(ErlangProject.this); } } } return true; } }; _delta.accept(_function); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } private boolean match(final int v, final int flag) { int _bitwiseAnd = (v & flag); return (_bitwiseAnd != 0); } @Override public BuildpathEntry getBuildpath() { try { boolean _hasNature = this.workspaceProject.hasNature("org.erlide.core.erlnature"); if (_hasNature) { return null; } return null; } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } }