package org.axdt.as3.ui.hover;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.xtext.resource.IResourceServiceProvider;
import org.eclipse.xtext.ui.editor.hover.DispatchingEObjectTextHover;
import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider;
import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider.IInformationControlCreatorProvider;
import com.google.inject.Inject;
public class As3TextHover extends DispatchingEObjectTextHover {
@Inject
private IResourceServiceProvider thisLanguageServiceProvider;
private IInformationControlCreatorProvider lastCreatorProvider;
@Override
public Object getHoverInfo(EObject first, ITextViewer textViewer, IRegion hoverRegion) {
IEObjectHoverProvider hoverProvider = findService(getURI(first));
if (hoverProvider==null)
return null;
IInformationControlCreatorProvider creatorProvider = hoverProvider.getHoverInfo(first, textViewer, hoverRegion);
if (creatorProvider==null)
return null;
this.lastCreatorProvider = creatorProvider;
return lastCreatorProvider.getInfo();
}
public IEObjectHoverProvider findService(URI uri) {
if (thisLanguageServiceProvider.canHandle(uri) || "asdoc".equals(uri.fileExtension()))
return thisLanguageServiceProvider.get(IEObjectHoverProvider.class);
return null;
}
public URI getURI(EObject eObject) {
if (eObject.eIsProxy()) {
return ((InternalEObject)eObject).eProxyURI();
} else {
return eObject.eResource().getURI();
}
}
@Override
public IInformationControlCreator getHoverControlCreator() {
return this.lastCreatorProvider==null?null:lastCreatorProvider.getHoverControlCreator();
}
@Override
@Deprecated
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
final Object hoverInfo2 = getHoverInfo2(textViewer, hoverRegion);
return hoverInfo2!=null ? hoverInfo2.toString() : null;
}
}