Search in sources :

Example 81 with IErlElement

use of org.erlide.engine.model.IErlElement in project erlide_eclipse by erlang.

the class ErlModel method findElement.

@Override
public IErlElement findElement(final IResource rsrc, final boolean openElements) {
    if (rsrc == null) {
        return null;
    }
    final IPath path = rsrc.getFullPath();
    IParent p = this;
    for (final String segment : path.segments()) {
        IErlElement c = p.getChildWithResource(rsrc);
        if (c != null) {
            return c;
        }
        c = p.getChildNamed(segment);
        if (c == null) {
            return null;
        }
        if (openElements && c instanceof IOpenable) {
            final IOpenable o = (IOpenable) c;
            try {
                o.open(null);
            } catch (final ErlModelException e) {
                return null;
            }
        }
        final IResource resource = c.getResource();
        if (resource != null && resource.equals(rsrc)) {
            return c;
        }
        p = (IParent) c;
    }
    return null;
}
Also used : IErlElement(org.erlide.engine.model.IErlElement) IOpenable(org.erlide.engine.model.root.IOpenable) IPath(org.eclipse.core.runtime.IPath) IParent(org.erlide.engine.model.IParent) ErlModelException(org.erlide.engine.model.ErlModelException) OtpErlangString(com.ericsson.otp.erlang.OtpErlangString) IResource(org.eclipse.core.resources.IResource)

Example 82 with IErlElement

use of org.erlide.engine.model.IErlElement in project erlide_eclipse by erlang.

the class ErlModel method remove.

void remove(final IResource rsrc) {
    final IErlElement element = findElement(rsrc);
    if (element != null) {
        final IParent p = element.getParent();
        p.removeChild(element);
        if (element instanceof IOpenable) {
            final IOpenable openable = (IOpenable) element;
            try {
                openable.close();
            } catch (final ErlModelException e) {
                ErlLogger.error(e);
            }
        }
    }
// TODO should we make Erlidemodelevents and fire them?
}
Also used : IErlElement(org.erlide.engine.model.IErlElement) IOpenable(org.erlide.engine.model.root.IOpenable) IParent(org.erlide.engine.model.IParent) ErlModelException(org.erlide.engine.model.ErlModelException)

Example 83 with IErlElement

use of org.erlide.engine.model.IErlElement in project erlide_eclipse by erlang.

the class ErlModel method create.

/**
 * Returns the Erlang element corresponding to the given resource, or
 * <code>null</code> if unable to associate the given resource with a Erlang element.
 * <p>
 * The resource must be one of:
 * <ul>
 * <li>a project - the element returned is the corresponding
 * <code>IErlProject</code></li>
 * <li>a <code>.erl</code> file - the element returned is the corresponding
 * <code>IErlModule</code></li>
 * <li>a folder - the element returned is the corresponding
 * <code>IErlFolder</code></li>
 * <li>the workspace root resource - the element returned is the
 * <code>IErlModel</code></li>
 * </ul>
 * <p>
 * Creating a Erlang element has the side effect of creating and opening all of the
 * element's parents if they are not yet open.
 *
 * @param resource
 *            the given resource
 * @return the Erlang element corresponding to the given resource, or
 *         <code>null</code> if unable to associate the given resource with a Erlang
 *         element
 */
@Override
public IErlElement create(final IResource resource) {
    IParent parent = null;
    final IContainer resourceParent = resource.getParent();
    if (resourceParent != null) {
        IErlElement element = findElement(resourceParent);
        if (element == null) {
            element = create(resourceParent);
        }
        if (element instanceof IParent) {
            parent = (IParent) element;
        }
    }
    return create(resource, parent);
}
Also used : IErlElement(org.erlide.engine.model.IErlElement) IParent(org.erlide.engine.model.IParent) IContainer(org.eclipse.core.resources.IContainer)

Example 84 with IErlElement

use of org.erlide.engine.model.IErlElement in project erlide_eclipse by erlang.

the class ModelFindUtil method getLocalIncludes.

private Collection<IErlModule> getLocalIncludes(final IErlModule module) throws ErlModelException {
    final List<IErlModule> result = Lists.newArrayList();
    final IParent parent = module.getParent();
    for (final IErlElement child : parent.getChildrenOfKind(ErlElementKind.MODULE)) {
        if (child instanceof IErlModule && SourceKind.nameToModuleKind(child.getName()) == SourceKind.HRL) {
            result.add((IErlModule) child);
        }
    }
    return result;
}
Also used : IErlElement(org.erlide.engine.model.IErlElement) IParent(org.erlide.engine.model.IParent) IErlModule(org.erlide.engine.model.root.IErlModule)

Example 85 with IErlElement

use of org.erlide.engine.model.IErlElement in project erlide_eclipse by erlang.

the class ModelInternalUtils method getModuleFromExternalModulePath.

@Override
public IErlModule getModuleFromExternalModulePath(final IErlModel model, final String modulePath) throws ErlModelException {
    System.out.println(">> modulePath=" + modulePath);
    final List<String> path = Lists.newArrayList(Splitter.on(ModelInternalUtils.DELIMITER).split(modulePath));
    model.open(null);
    final IErlElement childNamed = model.getChildNamed(path.get(0));
    if (childNamed instanceof IParent) {
        IParent parent = (IParent) childNamed;
        final int n = path.size() - 1;
        for (int i = 1; ; i++) {
            if (parent == null) {
                break;
            }
            if (parent instanceof IOpenable) {
                final IOpenable openable = (IOpenable) parent;
                openable.open(null);
            }
            if (i == n) {
                break;
            }
            parent = getElementWithExternalName(parent, path.get(i));
        }
        if (parent != null) {
            final IErlElement child = parent.getChildNamed(path.get(n));
            if (child instanceof IErlModule) {
                return (IErlModule) child;
            }
        }
    }
    return null;
}
Also used : IErlElement(org.erlide.engine.model.IErlElement) IOpenable(org.erlide.engine.model.root.IOpenable) IParent(org.erlide.engine.model.IParent) IErlModule(org.erlide.engine.model.root.IErlModule)

Aggregations

IErlElement (org.erlide.engine.model.IErlElement)123 Test (org.junit.Test)36 IErlModule (org.erlide.engine.model.root.IErlModule)35 ErlModelException (org.erlide.engine.model.ErlModelException)28 IParent (org.erlide.engine.model.IParent)17 IFile (org.eclipse.core.resources.IFile)16 ArrayList (java.util.ArrayList)12 OtpErlangString (com.ericsson.otp.erlang.OtpErlangString)11 IResource (org.eclipse.core.resources.IResource)11 IErlProject (org.erlide.engine.model.root.IErlProject)10 IOpenable (org.erlide.engine.model.root.IOpenable)10 IProject (org.eclipse.core.resources.IProject)9 OtpErlangObject (com.ericsson.otp.erlang.OtpErlangObject)8 IErlModel (org.erlide.engine.model.root.IErlModel)8 WranglerException (org.erlide.wrangler.refactoring.exception.WranglerException)8 OtpErlangRangeException (com.ericsson.otp.erlang.OtpErlangRangeException)7 IFolder (org.eclipse.core.resources.IFolder)7 CoreException (org.eclipse.core.runtime.CoreException)7 OtpErlangAtom (com.ericsson.otp.erlang.OtpErlangAtom)6 OtpErlangTuple (com.ericsson.otp.erlang.OtpErlangTuple)6