Package de.itemis.tooling.xturtle.ui.hover

Source Code of de.itemis.tooling.xturtle.ui.hover.TurtleEObjectHover

/*******************************************************************************
* Copyright (c) 2013 AKSW Xturtle Project, itemis AG (http://www.itemis.eu).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package de.itemis.tooling.xturtle.ui.hover;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.TextUtilities;
import org.eclipse.xtext.nodemodel.ICompositeNode;
import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
import org.eclipse.xtext.resource.EObjectAtOffsetHelper;
import org.eclipse.xtext.resource.ILocationInFileProvider;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.ui.editor.hover.DispatchingEObjectTextHover;
import org.eclipse.xtext.util.Pair;
import org.eclipse.xtext.util.Tuples;

import com.google.inject.Inject;

public class TurtleEObjectHover extends DispatchingEObjectTextHover {

  @Inject
  private EObjectAtOffsetHelper eObjectAtOffsetHelper;

  @Inject
  private ILocationInFileProvider locationInFileProvider;

  @Override
  protected Pair<EObject, IRegion> getXtextElementAt(XtextResource resource,
      int offset) {
    Pair<EObject, IRegion> temp = super.getXtextElementAt(resource, offset);
    if(temp==null){
      EObject crossLinkedEObject = eObjectAtOffsetHelper.resolveCrossReferencedElementAt(resource, offset);
      if (crossLinkedEObject != null) {
        if (crossLinkedEObject.eIsProxy()) {
          EObject o = eObjectAtOffsetHelper.resolveContainedElementAt(resource, offset);
          if (o != null) {
            ICompositeNode node = NodeModelUtils.getNode(o);
            IRegion region = new Region(node.getOffset(),node.getLength());
            if (TextUtilities.overlaps(region, new Region(offset, 0)))
              return Tuples.create(o, region);
          }
        }
      }
    }
    return temp;
  }
}
TOP

Related Classes of de.itemis.tooling.xturtle.ui.hover.TurtleEObjectHover

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.