blob: 88f92905e9e9cfa8d4fc06d3e6c068022e823558 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2018 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.internal.ui.util;
import org.eclipse.dltk.ast.Modifiers;
import org.eclipse.dltk.core.IProjectFragment;
import org.eclipse.dltk.core.search.TypeNameMatch;
import org.eclipse.dltk.internal.ui.DLTKUIMessages;
import org.eclipse.dltk.ui.DLTKPluginImages;
import org.eclipse.dltk.ui.IDLTKUILanguageToolkit;
import org.eclipse.dltk.ui.ScriptElementLabels;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
/**
* Label provider for {@link TypeNameMatch} instances.
*/
public class TypeNameMatchLabelProvider extends LabelProvider {
public static final int SHOW_FULLYQUALIFIED = 0x01;
public static final int SHOW_PACKAGE_POSTFIX = 0x02;
public static final int SHOW_PACKAGE_ONLY = 0x04;
public static final int SHOW_ROOT_POSTFIX = 0x08;
public static final int SHOW_TYPE_ONLY = 0x10;
public static final int SHOW_TYPE_CONTAINER_ONLY = 0x20;
public static final int SHOW_POST_QUALIFIED = 0x40;
private static final Image CLASS_ICON = DLTKPluginImages
.get(DLTKPluginImages.IMG_OBJS_CLASS);
private static final Image ANNOTATION_ICON = DLTKPluginImages
.get(DLTKPluginImages.IMG_OBJS_ANNOTATION);
// private static final Image INTERFACE_ICON= DLTKPluginImages.get(DLTKPluginImages.IMG_OBJS_INTERFACE);
private static final Image PKG_ICON = DLTKPluginImages
.get(DLTKPluginImages.IMG_OBJS_PACKAGE);
private final int fFlags;
private final IDLTKUILanguageToolkit fToolkit;
/**
* Creates the label provider with the specified parameters.
*
* @param flags
* bitwise OR of the flags defined in this class
* @param toolkit
* language specific UI-toolkit to be used
*/
public TypeNameMatchLabelProvider(int flags,
IDLTKUILanguageToolkit toolkit) {
fFlags = flags;
this.fToolkit = toolkit;
}
private boolean isSet(int flag) {
return (fFlags & flag) != 0;
}
private String getPackageName(String packName) {
if (packName.length() == 0) {
return DLTKUIMessages.TypeInfoLabelProvider_default_package;
}
return packName;
}
@Override
public String getText(Object element) {
if (!(element instanceof TypeNameMatch))
return super.getText(element);
TypeNameMatch typeRef = (TypeNameMatch) element;
StringBuffer buf = new StringBuffer();
if (isSet(SHOW_TYPE_ONLY)) {
buf.append(typeRef.getSimpleTypeName());
} else if (isSet(SHOW_TYPE_CONTAINER_ONLY)) {
String containerName = typeRef.getTypeContainerName();
buf.append(getPackageName(containerName));
} else if (isSet(SHOW_PACKAGE_ONLY)) {
String packName = typeRef.getPackageName();
buf.append(getPackageName(packName));
} else {
if (isSet(SHOW_FULLYQUALIFIED)) {
buf.append(typeRef.getFullyQualifiedName());
} else if (isSet(SHOW_POST_QUALIFIED)) {
buf.append(typeRef.getSimpleTypeName());
String containerName = typeRef.getTypeContainerName();
if (containerName != null && containerName.length() > 0) {
buf.append(ScriptElementLabels.CONCAT_STRING);
buf.append(containerName);
}
} else {
buf.append(typeRef.getTypeQualifiedName());
}
if (isSet(SHOW_PACKAGE_POSTFIX)) {
buf.append(ScriptElementLabels.CONCAT_STRING);
String packName = typeRef.getPackageName();
buf.append(getPackageName(packName));
}
}
if (isSet(SHOW_ROOT_POSTFIX)) {
buf.append(ScriptElementLabels.CONCAT_STRING);
IProjectFragment root = typeRef.getProjectFragment();
ScriptElementLabels labels = this.fToolkit.getScriptElementLabels();
labels.getProjectFragmentLabel(root,
ScriptElementLabels.ROOT_QUALIFIED, buf);
}
return buf.toString();
}
@Override
public Image getImage(Object element) {
if (!(element instanceof TypeNameMatch))
return super.getImage(element);
if (isSet(SHOW_TYPE_CONTAINER_ONLY)) {
TypeNameMatch typeRef = (TypeNameMatch) element;
if (typeRef.getPackageName().equals(typeRef.getTypeContainerName()))
return PKG_ICON;
// XXX cannot check outer type for interface efficiently (5887)
return CLASS_ICON;
} else if (isSet(SHOW_PACKAGE_ONLY)) {
return PKG_ICON;
} else {
int modifiers = ((TypeNameMatch) element).getModifiers();
if ((modifiers & Modifiers.AccAnnotation) != 0) {
return ANNOTATION_ICON;
}
// else if (Flags.isInterface(modifiers)) {
// return INTERFACE_ICON;
// }
return CLASS_ICON;
}
}
}