blob: ae2c9e63353e6986410174e593bfaa88c98234a0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
* 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
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.util;
import org.eclipse.swt.graphics.Image;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.search.TypeNameMatch;
import org.eclipse.jdt.ui.JavaElementImageDescriptor;
import org.eclipse.jdt.ui.JavaElementLabels;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.JavaPluginImages;
import org.eclipse.jdt.internal.ui.JavaUIMessages;
import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
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 int fFlags;
public TypeNameMatchLabelProvider(int flags) {
fFlags= flags;
}
/* non java-doc
* @see ILabelProvider#getText
*/
@Override
public String getText(Object element) {
if (! (element instanceof TypeNameMatch))
return super.getText(element);
return getText((TypeNameMatch) element, fFlags);
}
/* non java-doc
* @see ILabelProvider#getImage
*/
@Override
public Image getImage(Object element) {
if (! (element instanceof TypeNameMatch))
return super.getImage(element);
return getImage((TypeNameMatch) element, fFlags);
}
private static boolean isSet(int flag, int flags) {
return (flags & flag) != 0;
}
private static String getPackageName(String packName) {
if (packName.length() == 0)
return JavaUIMessages.TypeInfoLabelProvider_default_package;
else
return packName;
}
public static String getText(TypeNameMatch typeRef, int flags) {
StringBuffer buf= new StringBuffer();
if (isSet(SHOW_TYPE_ONLY, flags)) {
buf.append(typeRef.getSimpleTypeName());
} else if (isSet(SHOW_TYPE_CONTAINER_ONLY, flags)) {
String containerName= typeRef.getTypeContainerName();
buf.append(getPackageName(containerName));
} else if (isSet(SHOW_PACKAGE_ONLY, flags)) {
String packName= typeRef.getPackageName();
buf.append(getPackageName(packName));
} else {
if (isSet(SHOW_FULLYQUALIFIED, flags)) {
buf.append(typeRef.getFullyQualifiedName());
} else if (isSet(SHOW_POST_QUALIFIED, flags)) {
buf.append(typeRef.getSimpleTypeName());
String containerName= typeRef.getTypeContainerName();
if (containerName != null && containerName.length() > 0) {
buf.append(JavaElementLabels.CONCAT_STRING);
buf.append(containerName);
}
} else {
buf.append(typeRef.getTypeQualifiedName());
}
if (isSet(SHOW_PACKAGE_POSTFIX, flags)) {
buf.append(JavaElementLabels.CONCAT_STRING);
String packName= typeRef.getPackageName();
buf.append(getPackageName(packName));
}
}
if (isSet(SHOW_ROOT_POSTFIX, flags)) {
buf.append(JavaElementLabels.CONCAT_STRING);
IPackageFragmentRoot root= typeRef.getPackageFragmentRoot();
JavaElementLabels.getPackageFragmentRootLabel(root, JavaElementLabels.ROOT_QUALIFIED, buf);
}
return BasicElementLabels.getJavaElementName(buf.toString());
}
public static ImageDescriptor getImageDescriptor(TypeNameMatch typeRef, int flags) {
if (isSet(SHOW_TYPE_CONTAINER_ONLY, flags)) {
if (typeRef.getPackageName().equals(typeRef.getTypeContainerName()))
return JavaPluginImages.DESC_OBJS_PACKAGE;
// XXX cannot check outer type for interface efficiently (5887)
return JavaPluginImages.DESC_OBJS_CLASS;
} else if (isSet(SHOW_PACKAGE_ONLY, flags)) {
return JavaPluginImages.DESC_OBJS_PACKAGE;
} else {
boolean isInner= typeRef.getTypeContainerName().indexOf('.') != -1;
int modifiers= typeRef.getModifiers();
ImageDescriptor desc= JavaElementImageProvider.getTypeImageDescriptor(isInner, false, modifiers, false);
int adornmentFlags= 0;
if (Flags.isFinal(modifiers)) {
adornmentFlags |= JavaElementImageDescriptor.FINAL;
}
if (Flags.isAbstract(modifiers) && !Flags.isInterface(modifiers)) {
adornmentFlags |= JavaElementImageDescriptor.ABSTRACT;
}
if (Flags.isStatic(modifiers)) {
adornmentFlags |= JavaElementImageDescriptor.STATIC;
}
if (Flags.isDeprecated(modifiers)) {
adornmentFlags |= JavaElementImageDescriptor.DEPRECATED;
}
return new JavaElementImageDescriptor(desc, adornmentFlags, JavaElementImageProvider.BIG_SIZE);
}
}
public static Image getImage(TypeNameMatch typeRef, int flags) {
return JavaPlugin.getImageDescriptorRegistry().get(getImageDescriptor(typeRef, flags));
}
}