Package org.erlide.ui.actions

Source Code of org.erlide.ui.actions.OpenUtils

package org.erlide.ui.actions;

import com.ericsson.otp.erlang.OtpErlangList;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.ericsson.otp.erlang.OtpErlangRangeException;
import com.ericsson.otp.erlang.OtpErlangString;
import com.google.common.base.Objects;
import java.util.Arrays;
import java.util.Collection;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.erlide.engine.ErlangEngine;
import org.erlide.engine.IErlangEngine;
import org.erlide.engine.model.ErlModelException;
import org.erlide.engine.model.IErlModel;
import org.erlide.engine.model.erlang.ErlangFunction;
import org.erlide.engine.model.erlang.IErlFunction;
import org.erlide.engine.model.erlang.IErlImport;
import org.erlide.engine.model.erlang.IErlModule;
import org.erlide.engine.model.erlang.IErlPreprocessorDef;
import org.erlide.engine.model.erlang.IErlRecordDef;
import org.erlide.engine.model.erlang.ISourceRange;
import org.erlide.engine.model.erlang.ISourceReference;
import org.erlide.engine.model.root.ErlElementKind;
import org.erlide.engine.model.root.ErlangProjectProperties;
import org.erlide.engine.model.root.IErlElement;
import org.erlide.engine.model.root.IErlElementLocator;
import org.erlide.engine.model.root.IErlProject;
import org.erlide.engine.services.search.ExternalCallOpenResult;
import org.erlide.engine.services.search.FieldOpenResult;
import org.erlide.engine.services.search.IncludeOpenResult;
import org.erlide.engine.services.search.LocalCallOpenResult;
import org.erlide.engine.services.search.MacroOpenResult;
import org.erlide.engine.services.search.ModelFindService;
import org.erlide.engine.services.search.OpenResult;
import org.erlide.engine.services.search.OpenService;
import org.erlide.engine.services.search.RecordOpenResult;
import org.erlide.engine.services.search.VariableOpenResult;
import org.erlide.runtime.rpc.RpcException;
import org.erlide.ui.prefs.plugin.NavigationPreferencePage;
import org.erlide.ui.util.ErlModelUtils;

@SuppressWarnings("all")
public class OpenUtils {
  private final ModelFindService modelFindService;
 
  public OpenUtils() {
    IErlangEngine _instance = ErlangEngine.getInstance();
    ModelFindService _modelFindService = _instance.getModelFindService();
    this.modelFindService = _modelFindService;
  }
 
  public void openOpenResult(final ITextEditor editor, final IErlModule module, final int offset, final IErlProject erlProject, final OpenResult openResult, final IErlElement element) throws CoreException, ErlModelException, PartInitException, BadLocationException, OtpErlangRangeException, RpcException {
    boolean _tripleEquals = (editor == null);
    if (_tripleEquals) {
      return;
    }
    final Object found = this.findOpenResult(editor, module, erlProject, openResult, element);
    if ((found instanceof IErlElement)) {
    } else {
      if ((found instanceof ISourceRange)) {
        ErlModelUtils.openSourceRange(module, ((ISourceRange)found));
      }
    }
  }
 
  public Object findOpenResult(final ITextEditor editor, final IErlModule module, final IErlProject project, final OpenResult openResult, final IErlElement element) throws CoreException, ErlModelException, OtpErlangRangeException, RpcException, BadLocationException {
    IErlElementLocator.Scope _xifexpression = null;
    boolean _checkAllProjects = NavigationPreferencePage.getCheckAllProjects();
    if (_checkAllProjects) {
      _xifexpression = IErlElementLocator.Scope.ALL_PROJECTS;
    } else {
      _xifexpression = IErlElementLocator.Scope.REFERENCED_PROJECTS;
    }
    final IErlElementLocator.Scope scope = _xifexpression;
    IErlangEngine _instance = ErlangEngine.getInstance();
    final IErlElementLocator model = _instance.getModel();
    return this.findOpenResult(openResult, module, project, element, model, scope, editor);
  }
 
  protected Object _findOpenResult(final ExternalCallOpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    try {
      return this.findExternalCallOrType(module, openResult, project, element, scope);
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  protected Object _findOpenResult(final LocalCallOpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    try {
      return this.findLocalCall(module, project, openResult, element, scope);
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  protected Object _findOpenResult(final IncludeOpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    try {
      String _name = openResult.getName();
      String _path = openResult.getPath();
      return this.modelFindService.findInclude(model, project, module, _name, _path);
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  protected Object _findOpenResult(final VariableOpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    try {
      Object _xblockexpression = null;
      {
        if ((element instanceof ISourceReference)) {
          final ISourceRange range = ((ISourceReference)element).getSourceRange();
          IDocumentProvider _documentProvider = editor.getDocumentProvider();
          IEditorInput _editorInput = editor.getEditorInput();
          IDocument _document = _documentProvider.getDocument(_editorInput);
          int _offset = range.getOffset();
          int _length = range.getLength();
          final String elementText = _document.get(_offset, _length);
          String _name = openResult.getName();
          return this.modelFindService.findVariable(range, _name, elementText);
        }
        _xblockexpression = null;
      }
      return _xblockexpression;
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  protected Object _findOpenResult(final RecordOpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    try {
      IErlPreprocessorDef _xblockexpression = null;
      {
        final ErlElementKind kind = ErlElementKind.RECORD_DEF;
        String _name = openResult.getName();
        _xblockexpression = this.modelFindService.findPreprocessorDef(module, _name, kind);
      }
      return _xblockexpression;
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  protected Object _findOpenResult(final MacroOpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    try {
      IErlPreprocessorDef _xblockexpression = null;
      {
        final ErlElementKind kind = ErlElementKind.MACRO_DEF;
        String _name = openResult.getName();
        _xblockexpression = this.modelFindService.findPreprocessorDef(module, _name, kind);
      }
      return _xblockexpression;
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  protected Object _findOpenResult(final FieldOpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    try {
      Object _xblockexpression = null;
      {
        String _record = openResult.getRecord();
        IErlPreprocessorDef _findPreprocessorDef = this.modelFindService.findPreprocessorDef(module, _record,
          ErlElementKind.RECORD_DEF);
        final IErlRecordDef def = ((IErlRecordDef) _findPreprocessorDef);
        boolean _tripleNotEquals = (def != null);
        if (_tripleNotEquals) {
          String _name = openResult.getName();
          return def.getFieldNamed(_name);
        }
        _xblockexpression = null;
      }
      return _xblockexpression;
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  protected Object _findOpenResult(final OpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    return null;
  }
 
  private IErlElement findLocalCall(final IErlModule module, final IErlProject erlProject, final LocalCallOpenResult res, final IErlElement element, final IErlElementLocator.Scope scope) throws RpcException, CoreException {
    boolean _isTypeDefOrRecordDef = this.isTypeDefOrRecordDef(res, element);
    if (_isTypeDefOrRecordDef) {
      String _fun = res.getFun();
      return this.modelFindService.findTypespec(module, _fun);
    }
    String _fun_1 = res.getFun();
    int _arity = res.getArity();
    final ErlangFunction erlangFunction = new ErlangFunction(_fun_1, _arity);
    final IErlFunction foundElement = module.findFunction(erlangFunction);
    boolean _tripleNotEquals = (foundElement != null);
    if (_tripleNotEquals) {
      return foundElement;
    }
    OtpErlangObject res2 = null;
    String moduleName = null;
    final IErlImport ei = module.findImport(erlangFunction);
    boolean _tripleNotEquals_1 = (ei != null);
    if (_tripleNotEquals_1) {
      IErlangEngine _instance = ErlangEngine.getInstance();
      final IErlModel model = _instance.getModel();
      String _importModule = ei.getImportModule();
      moduleName = _importModule;
      IErlangEngine _instance_1 = ErlangEngine.getInstance();
      OpenService _service = _instance_1.<OpenService>getService(OpenService.class);
      IResource _resource = module.getResource();
      OtpErlangList _pathVars = model.getPathVars(_resource);
      ErlangProjectProperties _properties = erlProject.getProperties();
      String _externalModules = _properties.getExternalModules();
      OtpErlangObject _sourceFromModule = _service.getSourceFromModule(_pathVars, moduleName, _externalModules);
      res2 = _sourceFromModule;
    }
    if ((res2 instanceof OtpErlangString)) {
      boolean _tripleNotEquals_2 = (moduleName != null);
      if (_tripleNotEquals_2) {
        final String modulePath = ((OtpErlangString)res2).stringValue();
        IErlangEngine _instance_2 = ErlangEngine.getInstance();
        final IErlElementLocator model_1 = _instance_2.getModel();
        return this.modelFindService.findFunction(model_1, erlProject, module, moduleName, modulePath, erlangFunction, scope);
      }
    }
    IErlangEngine _instance_3 = ErlangEngine.getInstance();
    ModelFindService _modelFindService = _instance_3.getModelFindService();
    final Collection<IErlModule> allIncludedFiles = _modelFindService.findAllIncludedFiles(module);
    for (final IErlModule includedModule : allIncludedFiles) {
      {
        final IErlFunction function = includedModule.findFunction(erlangFunction);
        boolean _tripleNotEquals_3 = (function != null);
        if (_tripleNotEquals_3) {
          return function;
        }
      }
    }
    return null;
  }
 
  protected boolean _isTypeDefOrRecordDef(final ExternalCallOpenResult res, final IErlElement element) {
    boolean _tripleNotEquals = (element != null);
    if (_tripleNotEquals) {
      ErlElementKind _kind = element.getKind();
      boolean _equals = Objects.equal(_kind, ErlElementKind.RECORD_DEF);
      if (_equals) {
        return true;
      }
      ErlElementKind _kind_1 = element.getKind();
      boolean _equals_1 = Objects.equal(_kind_1, ErlElementKind.TYPESPEC);
      if (_equals_1) {
        String _fun = res.getFun();
        String _name = element.getName();
        boolean _equals_2 = _fun.equals(_name);
        boolean _not = (!_equals_2);
        if (_not) {
          return true;
        }
      }
    }
    return false;
  }
 
  protected boolean _isTypeDefOrRecordDef(final LocalCallOpenResult res, final IErlElement element) {
    boolean _tripleNotEquals = (element != null);
    if (_tripleNotEquals) {
      ErlElementKind _kind = element.getKind();
      boolean _equals = Objects.equal(_kind, ErlElementKind.RECORD_DEF);
      if (_equals) {
        return true;
      }
      ErlElementKind _kind_1 = element.getKind();
      boolean _equals_1 = Objects.equal(_kind_1, ErlElementKind.TYPESPEC);
      if (_equals_1) {
        String _fun = res.getFun();
        String _name = element.getName();
        boolean _equals_2 = _fun.equals(_name);
        boolean _not = (!_equals_2);
        if (_not) {
          return true;
        }
      }
    }
    return false;
  }
 
  private IErlElement findExternalCallOrType(final IErlModule module, final ExternalCallOpenResult res, final IErlProject project, final IErlElement element, final IErlElementLocator.Scope scope) throws CoreException {
    IErlangEngine _instance = ErlangEngine.getInstance();
    final IErlElementLocator model = _instance.getModel();
    boolean _isTypeDefOrRecordDef = this.isTypeDefOrRecordDef(res, element);
    if (_isTypeDefOrRecordDef) {
      String _mod = res.getMod();
      String _fun = res.getFun();
      String _path = res.getPath();
      return this.modelFindService.findTypeDef(model, project, module, _mod, _fun, _path, scope);
    }
    String _mod_1 = res.getMod();
    String _path_1 = res.getPath();
    String _fun_1 = res.getFun();
    int _arity = res.getArity();
    ErlangFunction _erlangFunction = new ErlangFunction(_fun_1, _arity);
    final IErlFunction result = this.modelFindService.findFunction(model, project, module, _mod_1, _path_1, _erlangFunction, scope);
    boolean _tripleNotEquals = (result != null);
    if (_tripleNotEquals) {
      return result;
    }
    String _mod_2 = res.getMod();
    String _path_2 = res.getPath();
    String _fun_2 = res.getFun();
    ErlangFunction _erlangFunction_1 = new ErlangFunction(_fun_2, ErlangFunction.ANY_ARITY);
    return this.modelFindService.findFunction(model, project, module, _mod_2, _path_2, _erlangFunction_1, scope);
  }
 
  public Object findOpenResult(final OpenResult openResult, final IErlModule module, final IErlProject project, final IErlElement element, final IErlElementLocator model, final IErlElementLocator.Scope scope, final ITextEditor editor) {
    if (openResult instanceof ExternalCallOpenResult) {
      return _findOpenResult((ExternalCallOpenResult)openResult, module, project, element, model, scope, editor);
    } else if (openResult instanceof FieldOpenResult) {
      return _findOpenResult((FieldOpenResult)openResult, module, project, element, model, scope, editor);
    } else if (openResult instanceof IncludeOpenResult) {
      return _findOpenResult((IncludeOpenResult)openResult, module, project, element, model, scope, editor);
    } else if (openResult instanceof LocalCallOpenResult) {
      return _findOpenResult((LocalCallOpenResult)openResult, module, project, element, model, scope, editor);
    } else if (openResult instanceof MacroOpenResult) {
      return _findOpenResult((MacroOpenResult)openResult, module, project, element, model, scope, editor);
    } else if (openResult instanceof RecordOpenResult) {
      return _findOpenResult((RecordOpenResult)openResult, module, project, element, model, scope, editor);
    } else if (openResult instanceof VariableOpenResult) {
      return _findOpenResult((VariableOpenResult)openResult, module, project, element, model, scope, editor);
    } else if (openResult != null) {
      return _findOpenResult(openResult, module, project, element, model, scope, editor);
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(openResult, module, project, element, model, scope, editor).toString());
    }
  }
 
  public boolean isTypeDefOrRecordDef(final OpenResult res, final IErlElement element) {
    if (res instanceof ExternalCallOpenResult) {
      return _isTypeDefOrRecordDef((ExternalCallOpenResult)res, element);
    } else if (res instanceof LocalCallOpenResult) {
      return _isTypeDefOrRecordDef((LocalCallOpenResult)res, element);
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(res, element).toString());
    }
  }
}
TOP

Related Classes of org.erlide.ui.actions.OpenUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.