/* * Copyright 2014 * * Licensed under the Eclipse Public License version 1.0, available at * http://opensource.org/licenses/eclipse-1.0.txt */ package de.lynorics.eclipse.jangaroo.ui; import java.net.URL; import org.eclipse.emf.ecore.EObject; import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.xtext.ui.editor.hover.html.DefaultEObjectHoverProvider; import org.eclipse.xtext.ui.label.ILabelProviderImageDescriptorExtension; import com.google.inject.Inject; import de.lynorics.eclipse.jangaroo.aS3.MemberVariableDeclaration; import de.lynorics.eclipse.jangaroo.aS3.Parameter; import de.lynorics.eclipse.jangaroo.aS3.VariableDeclaration; import de.lynorics.eclipse.jangaroo.ui.labeling.AS3LabelProvider; public class AS3EObjectHoverProvider extends DefaultEObjectHoverProvider { @Inject private ILabelProvider labelProvider; @Override protected String getFirstLine(EObject o) { if (o instanceof de.lynorics.eclipse.jangaroo.aS3.Class) { de.lynorics.eclipse.jangaroo.aS3.Class myclass = (de.lynorics.eclipse.jangaroo.aS3.Class)o; EObject mycontainer = myclass.eContainer(); String name = myclass.getName(); if (mycontainer instanceof de.lynorics.eclipse.jangaroo.aS3.Package) { String packagename = ((de.lynorics.eclipse.jangaroo.aS3.Package)mycontainer).getName(); if (packagename != null && !"".equals(packagename)) { name = packagename + "." + name; } } return buildDescription(o, name); } else if (o instanceof de.lynorics.eclipse.jangaroo.aS3.Interface) { de.lynorics.eclipse.jangaroo.aS3.Interface myclass = (de.lynorics.eclipse.jangaroo.aS3.Interface)o; EObject mycontainer = myclass.eContainer(); String name = myclass.getName(); if (mycontainer instanceof de.lynorics.eclipse.jangaroo.aS3.Package) { String packagename = ((de.lynorics.eclipse.jangaroo.aS3.Package)mycontainer).getName(); if (packagename != null && !"".equals(packagename)) { name = packagename + "." + name; } } return buildDescription(o, name); } else if (o instanceof de.lynorics.eclipse.jangaroo.aS3.Method) { de.lynorics.eclipse.jangaroo.aS3.Method mymethod = (de.lynorics.eclipse.jangaroo.aS3.Method)o; EObject mycontainer = mymethod.eContainer(); String name = mymethod.getName(); if (mycontainer instanceof de.lynorics.eclipse.jangaroo.aS3.Package) { String packagename = ((de.lynorics.eclipse.jangaroo.aS3.Package)mycontainer).getName(); if (packagename != null && !"".equals(packagename)) { name = packagename + "." + name; } } return buildDescription(o, name); } else if (o instanceof VariableDeclaration) { VariableDeclaration decl = (VariableDeclaration)o; return buildDescription(o, decl.getName()) + ": " + AS3LabelProvider.getNameOfType(decl.getType()); } else if (o instanceof MemberVariableDeclaration) { MemberVariableDeclaration decl = (MemberVariableDeclaration)o; return buildDescription(o, decl.getName()) + ": " + AS3LabelProvider.getNameOfType(decl.getType()); } else if (o instanceof Parameter) { Parameter param = (Parameter)o; return buildDescription(o, param.getName()) + ": " + AS3LabelProvider.getNameOfType(param.getType()); } return super.getFirstLine(o); } private String buildDescription(EObject o, String name) { StringBuilder builder = new StringBuilder(); String imageTag = getImageTag(o); if (imageTag != null) { builder.append(imageTag); builder.append(" "); } builder.append("<b>" + name + "</b>"); return builder.toString(); } private String getImageTag(final EObject object) { if (labelProvider instanceof ILabelProviderImageDescriptorExtension) { ILabelProviderImageDescriptorExtension extension = (ILabelProviderImageDescriptorExtension) labelProvider; ImageDescriptor descriptor = extension.getImageDescriptor(object); if (descriptor != null) return getImageTagLink(descriptor); } return null; } private String getImageTagLink(ImageDescriptor imageDescriptor) { URL url = getURL(imageDescriptor); if (url != null) return "<image src='" + url.toExternalForm() + "'/>"; return ""; } private URL getURL(ImageDescriptor descriptor) { return JavaPlugin.getDefault().getImagesOnFSRegistry().getImageURL(descriptor); } }