blob: 20b21d48c08cdcaae71628bad5b026732c64122e [file] [log] [blame]
/*
* Copyright (c) 2014, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.tools.ui.internal.text.editor;
import com.google.dart.server.generated.types.Element;
import com.google.dart.server.generated.types.ElementKind;
import com.google.dart.server.utilities.general.ObjectUtilities;
import com.google.dart.tools.ui.DartElementImageDescriptor;
import com.google.dart.tools.ui.DartPluginImages;
import com.google.dart.tools.ui.DartToolsPlugin;
import com.google.dart.tools.ui.internal.viewsupport.DartElementImageProvider;
import com.google.dart.tools.ui.internal.viewsupport.ImageDescriptorRegistry;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
/**
* A {@link LabelProvider} for analysis server {@link Element}.
*/
public class ElementLabelProvider_NEW extends LabelProvider implements
org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider {
private static final ImageDescriptorRegistry registry = DartToolsPlugin.getImageDescriptorRegistry();
private static final String RIGHT_ARROW = " \u2192 "; //$NON-NLS-1$
/**
* Return {@code true} if the given {@link Element}s have the same visual presentation.
*/
public static boolean areEqual(Element a, Element b) {
return ObjectUtilities.equals(a.getKind(), b.getKind())
&& ObjectUtilities.equals(a.getName(), b.getName()) && a.getFlags() == b.getFlags()
&& ObjectUtilities.equals(a.getParameters(), b.getParameters())
&& ObjectUtilities.equals(a.getReturnType(), b.getReturnType());
}
public static ImageDescriptor getImageDescriptor(Element element) {
String kind = element.getKind();
ImageDescriptor base = getBaseImageDescriptor(kind, element.isPrivate());
if (base == null) {
return null;
}
int flags = 0;
if (kind.equals(ElementKind.CONSTRUCTOR)) {
flags |= DartElementImageDescriptor.CONSTRUCTOR;
}
if (kind.equals(ElementKind.GETTER)) {
flags |= DartElementImageDescriptor.GETTER;
}
if (kind.equals(ElementKind.SETTER)) {
flags |= DartElementImageDescriptor.SETTER;
}
if (element.isAbstract()) {
flags |= DartElementImageDescriptor.ABSTRACT;
}
if (element.isDeprecated()) {
flags |= DartElementImageDescriptor.DEPRECATED;
}
if (element.isFinal()) {
flags |= DartElementImageDescriptor.FINAL;
}
if (element.isTopLevelOrStatic()) {
flags |= DartElementImageDescriptor.STATIC;
}
return new DartElementImageDescriptor(base, flags, DartElementImageProvider.BIG_SIZE);
}
private static ImageDescriptor getBaseImageDescriptor(String elementKind, boolean isPrivate) {
if (elementKind.equals(ElementKind.CLASS) || elementKind.equals(ElementKind.CLASS_TYPE_ALIAS)) {
return isPrivate ? DartPluginImages.DESC_DART_CLASS_PRIVATE
: DartPluginImages.DESC_DART_CLASS_PUBLIC;
} else if (elementKind.equals(ElementKind.ENUM)) {
return isPrivate ? DartPluginImages.DESC_DART_ENUM_PRIVATE
: DartPluginImages.DESC_DART_ENUM_PUBLIC;
} else if (elementKind.equals(ElementKind.ENUM_CONSTANT)) {
return DartPluginImages.DESC_DART_FIELD_PUBLIC;
} else if (elementKind.equals(ElementKind.COMPILATION_UNIT)) {
return DartPluginImages.DESC_DART_COMP_UNIT;
} else if (elementKind.equals(ElementKind.CONSTRUCTOR)
|| elementKind.equals(ElementKind.FUNCTION) || elementKind.equals(ElementKind.GETTER)
|| elementKind.equals(ElementKind.METHOD) || elementKind.equals(ElementKind.SETTER)) {
return isPrivate ? DartPluginImages.DESC_DART_METHOD_PRIVATE
: DartPluginImages.DESC_DART_METHOD_PUBLIC;
} else if (elementKind.equals(ElementKind.FUNCTION_TYPE_ALIAS)) {
return isPrivate ? DartPluginImages.DESC_DART_FUNCTIONTYPE_PRIVATE
: DartPluginImages.DESC_DART_FUNCTIONTYPE_PUBLIC;
} else if (elementKind.equals(ElementKind.FIELD)
|| elementKind.equals(ElementKind.TOP_LEVEL_VARIABLE)) {
return isPrivate ? DartPluginImages.DESC_DART_FIELD_PRIVATE
: DartPluginImages.DESC_DART_FIELD_PUBLIC;
} else if (elementKind.equals(ElementKind.COMPILATION_UNIT)) {
return DartPluginImages.DESC_DART_COMP_UNIT;
} else if (elementKind.equals(ElementKind.PREFIX)) {
return DartPluginImages.DESC_DART_IMPORT_PREFIX;
} else if (elementKind.equals(ElementKind.LIBRARY)) {
return DartPluginImages.DESC_DART_LIB_FILE;
} else if (elementKind.equals(ElementKind.LABEL)) {
return DartPluginImages.DESC_DART_LABEL;
} else if (elementKind.equals(ElementKind.LOCAL_VARIABLE)
|| elementKind.equals(ElementKind.PARAMETER)) {
return DartPluginImages.DESC_DART_LOCAL_VARIABLE;
} else if (elementKind.equals(ElementKind.UNIT_TEST_TEST)) {
return DartPluginImages.DESC_DART_TEST_CASE;
} else if (elementKind.equals(ElementKind.UNIT_TEST_GROUP)) {
return DartPluginImages.DESC_DART_TEST_GROUP;
} else {
return null;
}
}
@Override
public Image getImage(Object obj) {
Element element = (Element) obj;
ImageDescriptor descriptor = getImageDescriptor(element);
if (descriptor != null) {
return registry.get(descriptor);
}
return null;
}
@Override
public StyledString getStyledText(Object obj) {
return getStyledText(obj, getText(obj));
}
public StyledString getStyledText(Object obj, String text) {
Element element = (Element) obj;
StyledString styledString = new StyledString(text);
// append type parameters
String typeParameters = element.getTypeParameters();
if (typeParameters != null) {
styledString.append(typeParameters);
}
// append parameters
String parameters = element.getParameters();
if (parameters != null) {
styledString.append(parameters, StyledString.DECORATIONS_STYLER);
}
// append return type
String returnType = element.getReturnType();
if (!StringUtils.isEmpty(returnType)) {
if (element.getKind() == ElementKind.FIELD
|| element.getKind() == ElementKind.TOP_LEVEL_VARIABLE) {
styledString.append(" : " + returnType, StyledString.QUALIFIER_STYLER);
} else {
styledString.append(RIGHT_ARROW + returnType, StyledString.QUALIFIER_STYLER);
}
}
// done
return styledString;
}
@Override
public String getText(Object obj) {
return ((Element) obj).getName();
}
}