X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/viewsupport/JavaElementLabels.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/viewsupport/JavaElementLabels.java new file mode 100644 index 0000000..801580e --- /dev/null +++ b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/viewsupport/JavaElementLabels.java @@ -0,0 +1,811 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.viewsupport; + +import net.sourceforge.phpdt.core.ICompilationUnit; +import net.sourceforge.phpdt.core.IField; +import net.sourceforge.phpdt.core.IJavaElement; +import net.sourceforge.phpdt.core.IMethod; +import net.sourceforge.phpdt.core.IPackageFragment; +import net.sourceforge.phpdt.core.IPackageFragmentRoot; +import net.sourceforge.phpdt.core.IType; +import net.sourceforge.phpdt.core.JavaModelException; +import net.sourceforge.phpdt.core.Signature; +import net.sourceforge.phpdt.internal.corext.util.JavaModelUtil; +import net.sourceforge.phpdt.internal.ui.PHPUIMessages; +import net.sourceforge.phpdt.ui.PreferenceConstants; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IPath; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.ui.model.IWorkbenchAdapter; + +public class JavaElementLabels { + + /** + * Method names contain parameter types. e.g. foo(int) + */ + public final static int M_PARAMETER_TYPES = 1 << 0; + + /** + * Method names contain parameter names. e.g. foo(index) + */ + public final static int M_PARAMETER_NAMES = 1 << 1; + + /** + * Method names contain thrown exceptions. e.g. + * foo throws IOException + */ + public final static int M_EXCEPTIONS = 1 << 2; + + /** + * Method names contain return type (appended) e.g. foo : int + */ + public final static int M_APP_RETURNTYPE = 1 << 3; + + /** + * Method names contain return type (appended) e.g. int foo + */ + public final static int M_PRE_RETURNTYPE = 1 << 4; + + /** + * Method names are fully qualified. e.g. java.util.Vector.size + */ + public final static int M_FULLY_QUALIFIED = 1 << 5; + + /** + * Method names are post qualified. e.g. + * size - java.util.Vector + */ + public final static int M_POST_QUALIFIED = 1 << 6; + + /** + * Initializer names are fully qualified. e.g. + * java.util.Vector.{ ... } + */ + public final static int I_FULLY_QUALIFIED = 1 << 7; + + /** + * Type names are post qualified. e.g. { ... } - java.util.Map + */ + public final static int I_POST_QUALIFIED = 1 << 8; + + /** + * Field names contain the declared type (appended) e.g. + * int fHello + */ + public final static int F_APP_TYPE_SIGNATURE = 1 << 9; + + /** + * Field names contain the declared type (prepended) e.g. + * fHello : int + */ + public final static int F_PRE_TYPE_SIGNATURE = 1 << 10; + + /** + * Fields names are fully qualified. e.g. java.lang.System.out + */ + public final static int F_FULLY_QUALIFIED = 1 << 11; + + /** + * Fields names are post qualified. e.g. out - java.lang.System + */ + public final static int F_POST_QUALIFIED = 1 << 12; + + /** + * Type names are fully qualified. e.g. java.util.Map.MapEntry + */ + public final static int T_FULLY_QUALIFIED = 1 << 13; + + /** + * Type names are type container qualified. e.g. Map.MapEntry + */ + public final static int T_CONTAINER_QUALIFIED = 1 << 14; + + /** + * Type names are post qualified. e.g. MapEntry - java.util.Map + */ + public final static int T_POST_QUALIFIED = 1 << 15; + + /** + * Declarations (import container / declarartion, package declarartion) are + * qualified. e.g. java.util.Vector.class/import container + */ + public final static int D_QUALIFIED = 1 << 16; + + /** + * Declarations (import container / declarartion, package declarartion) are + * post qualified. e.g. + * import container - java.util.Vector.class + */ + public final static int D_POST_QUALIFIED = 1 << 17; + + /** + * Class file names are fully qualified. e.g. + * java.util.Vector.class + */ + public final static int CF_QUALIFIED = 1 << 18; + + /** + * Class file names are post qualified. e.g. + * Vector.class - java.util + */ + public final static int CF_POST_QUALIFIED = 1 << 19; + + /** + * Compilation unit names are fully qualified. e.g. + * java.util.Vector.java + */ + public final static int CU_QUALIFIED = 1 << 20; + + /** + * Compilation unit names are post qualified. e.g. + * Vector.java - java.util + */ + public final static int CU_POST_QUALIFIED = 1 << 21; + + /** + * Package names are qualified. e.g. MyProject/src/java.util + */ + public final static int P_QUALIFIED = 1 << 22; + + /** + * Package names are post qualified. e.g. + * java.util - MyProject/src + */ + public final static int P_POST_QUALIFIED = 1 << 23; + + /** + * Package Fragment Roots contain variable name if from a variable. e.g. + * JRE_LIB - c:\java\lib\rt.jar + */ + public final static int ROOT_VARIABLE = 1 << 24; + + /** + * Package Fragment Roots contain the project name if not an archive + * (prepended). e.g. MyProject/src + */ + public final static int ROOT_QUALIFIED = 1 << 25; + + /** + * Package Fragment Roots contain the project name if not an archive + * (appended). e.g. src - MyProject + */ + public final static int ROOT_POST_QUALIFIED = 1 << 26; + + /** + * Add root path to all elements except Package Fragment Roots and Java + * projects. e.g. java.lang.Vector - c:\java\lib\rt.jar + * Option only applies to getElementLabel + */ + public final static int APPEND_ROOT_PATH = 1 << 27; + + /** + * Add root path to all elements except Package Fragment Roots and Java + * projects. e.g. java.lang.Vector - c:\java\lib\rt.jar + * Option only applies to getElementLabel + */ + public final static int PREPEND_ROOT_PATH = 1 << 28; + + /** + * Package names are compressed. e.g. o*.e*.search + */ + public final static int P_COMPRESSED = 1 << 29; + + /** + * Post qualify referenced package fragement roots. For example + * jdt.jar - net.sourceforge.phpdt.ui if the jar is + * referenced from another project. + */ + public final static int REFERENCED_ROOT_POST_QUALIFIED = 1 << 30; + + /** + * Qualify all elements + */ + public final static int ALL_FULLY_QUALIFIED = F_FULLY_QUALIFIED + | M_FULLY_QUALIFIED | I_FULLY_QUALIFIED | T_FULLY_QUALIFIED + | D_QUALIFIED | CF_QUALIFIED | CU_QUALIFIED | P_QUALIFIED + | ROOT_QUALIFIED; + + /** + * Post qualify all elements + */ + public final static int ALL_POST_QUALIFIED = F_POST_QUALIFIED + | M_POST_QUALIFIED | I_POST_QUALIFIED | T_POST_QUALIFIED + | D_POST_QUALIFIED | CF_POST_QUALIFIED | CU_POST_QUALIFIED + | P_POST_QUALIFIED | ROOT_POST_QUALIFIED; + + /** + * Default options (M_PARAMETER_TYPES enabled) + */ + public final static int ALL_DEFAULT = M_PARAMETER_TYPES; + + /** + * Default qualify options (All except Root and Package) + */ + public final static int DEFAULT_QUALIFIED = F_FULLY_QUALIFIED + | M_FULLY_QUALIFIED | I_FULLY_QUALIFIED | T_FULLY_QUALIFIED + | D_QUALIFIED | CF_QUALIFIED | CU_QUALIFIED; + + /** + * Default post qualify options (All except Root and Package) + */ + public final static int DEFAULT_POST_QUALIFIED = F_POST_QUALIFIED + | M_POST_QUALIFIED | I_POST_QUALIFIED | T_POST_QUALIFIED + | D_POST_QUALIFIED | CF_POST_QUALIFIED | CU_POST_QUALIFIED; + + public final static String CONCAT_STRING = PHPUIMessages + .getString("JavaElementLabels.concat_string"); // " - "; + // //$NON-NLS-1$ + + public final static String COMMA_STRING = PHPUIMessages + .getString("JavaElementLabels.comma_string"); // ", "; + // //$NON-NLS-1$ + + public final static String DECL_STRING = PHPUIMessages + .getString("JavaElementLabels.declseparator_string"); // " "; // + // use for + // return + // type + // //$NON-NLS-1$ + + /* + * Package name compression + */ + private static String fgPkgNamePattern = ""; //$NON-NLS-1$ + + private static String fgPkgNamePrefix; + + private static String fgPkgNamePostfix; + + private static int fgPkgNameChars; + + private static int fgPkgNameLength = -1; + + private JavaElementLabels() { + } + + private static boolean getFlag(int flags, int flag) { + return (flags & flag) != 0; + } + + public static String getTextLabel(Object obj, int flags) { + if (obj instanceof IJavaElement) { + return getElementLabel((IJavaElement) obj, flags); + } else if (obj instanceof IAdaptable) { + IWorkbenchAdapter wbadapter = (IWorkbenchAdapter) ((IAdaptable) obj) + .getAdapter(IWorkbenchAdapter.class); + if (wbadapter != null) { + return wbadapter.getLabel(obj); + } + } + return ""; //$NON-NLS-1$ + } + + /** + * Returns the label for a Java element. Flags as defined above. + */ + public static String getElementLabel(IJavaElement element, int flags) { + StringBuffer buf = new StringBuffer(60); + getElementLabel(element, flags, buf); + return buf.toString(); + } + + /** + * Returns the label for a Java element. Flags as defined above. + */ + public static void getElementLabel(IJavaElement element, int flags, + StringBuffer buf) { + int type = element.getElementType(); + IPackageFragmentRoot root = null; + + if (type != IJavaElement.JAVA_MODEL + && type != IJavaElement.JAVA_PROJECT + && type != IJavaElement.PACKAGE_FRAGMENT_ROOT) + root = JavaModelUtil.getPackageFragmentRoot(element); + if (root != null && getFlag(flags, PREPEND_ROOT_PATH)) { + getPackageFragmentRootLabel(root, ROOT_QUALIFIED, buf); + buf.append(CONCAT_STRING); + } + + switch (type) { + case IJavaElement.METHOD: + getMethodLabel((IMethod) element, flags, buf); + break; + case IJavaElement.FIELD: + getFieldLabel((IField) element, flags, buf); + break; + // case IJavaElement.INITIALIZER: + // getInitializerLabel((IInitializer) element, flags, buf); + // break; + case IJavaElement.TYPE: + getTypeLabel((IType) element, flags, buf); + break; + // case IJavaElement.CLASS_FILE: + // getClassFileLabel((IClassFile) element, flags, buf); + // break; + case IJavaElement.COMPILATION_UNIT: + getCompilationUnitLabel((ICompilationUnit) element, flags, buf); + break; + case IJavaElement.PACKAGE_FRAGMENT: + getPackageFragmentLabel((IPackageFragment) element, flags, buf); + break; + case IJavaElement.PACKAGE_FRAGMENT_ROOT: + getPackageFragmentRootLabel((IPackageFragmentRoot) element, flags, + buf); + break; + case IJavaElement.IMPORT_CONTAINER: + case IJavaElement.IMPORT_DECLARATION: + case IJavaElement.PACKAGE_DECLARATION: + getDeclararionLabel(element, flags, buf); + break; + case IJavaElement.JAVA_PROJECT: + case IJavaElement.JAVA_MODEL: + buf.append(element.getElementName()); + break; + default: + buf.append(element.getElementName()); + } + + if (root != null && getFlag(flags, APPEND_ROOT_PATH)) { + buf.append(CONCAT_STRING); + getPackageFragmentRootLabel(root, ROOT_QUALIFIED, buf); + } + } + + /** + * Appends the label for a method to a StringBuffer. Considers the M_* + * flags. + */ + public static void getMethodLabel(IMethod method, int flags, + StringBuffer buf) { + try { + // return type + if (getFlag(flags, M_PRE_RETURNTYPE) && method.exists() + && !method.isConstructor()) { + buf.append(Signature.getSimpleName(Signature.toString(method + .getReturnType()))); + buf.append(' '); + } + + // qualification + if (getFlag(flags, M_FULLY_QUALIFIED)) { + getTypeLabel(method.getDeclaringType(), T_FULLY_QUALIFIED + | (flags & P_COMPRESSED), buf); + buf.append('.'); + } + + buf.append(method.getElementName()); + + // parameters + if (getFlag(flags, M_PARAMETER_TYPES | M_PARAMETER_NAMES)) { + buf.append('('); + + String[] types = getFlag(flags, M_PARAMETER_TYPES) ? method + .getParameterTypes() : null; + String[] names = (getFlag(flags, M_PARAMETER_NAMES) && method + .exists()) ? method.getParameterNames() : null; + int nParams = types != null ? types.length : names.length; + + for (int i = 0; i < nParams; i++) { + if (i > 0) { + buf.append(COMMA_STRING); //$NON-NLS-1$ + } + if (types != null) { + buf.append(Signature.getSimpleName(Signature + .toString(types[i]))); + } + if (names != null) { + if (types != null) { + buf.append(' '); + } + buf.append(names[i]); + } + } + buf.append(')'); + } + + if (getFlag(flags, M_EXCEPTIONS) && method.exists()) { + String[] types = method.getExceptionTypes(); + if (types.length > 0) { + buf.append(" throws "); //$NON-NLS-1$ + for (int i = 0; i < types.length; i++) { + if (i > 0) { + buf.append(COMMA_STRING); + } + buf.append(Signature.getSimpleName(Signature + .toString(types[i]))); + } + } + } + + if (getFlag(flags, M_APP_RETURNTYPE) && method.exists() + && !method.isConstructor()) { + buf.append(DECL_STRING); + buf.append(Signature.getSimpleName(Signature.toString(method + .getReturnType()))); + } + + // post qualification + if (getFlag(flags, M_POST_QUALIFIED)) { + buf.append(CONCAT_STRING); + getTypeLabel(method.getDeclaringType(), T_FULLY_QUALIFIED + | (flags & P_COMPRESSED), buf); + } + + } catch (JavaModelException e) { + PHPeclipsePlugin.log(e); // NotExistsException will not reach + // this point + } + } + + /** + * Appends the label for a field to a StringBuffer. Considers the F_* flags. + */ + public static void getFieldLabel(IField field, int flags, StringBuffer buf) { + try { + if (getFlag(flags, F_PRE_TYPE_SIGNATURE) && field.exists()) { + buf.append(Signature.toString(field.getTypeSignature())); + buf.append(' '); + } + + // qualification + if (getFlag(flags, F_FULLY_QUALIFIED)) { + getTypeLabel(field.getDeclaringType(), T_FULLY_QUALIFIED + | (flags & P_COMPRESSED), buf); + buf.append('.'); + } + buf.append(field.getElementName()); + + if (getFlag(flags, F_APP_TYPE_SIGNATURE) && field.exists()) { + buf.append(DECL_STRING); + buf.append(Signature.toString(field.getTypeSignature())); + } + + // post qualification + if (getFlag(flags, F_POST_QUALIFIED)) { + buf.append(CONCAT_STRING); + getTypeLabel(field.getDeclaringType(), T_FULLY_QUALIFIED + | (flags & P_COMPRESSED), buf); + } + + } catch (JavaModelException e) { + PHPeclipsePlugin.log(e); // NotExistsException will not reach + // this point + } + } + + /** + * Appends the label for a initializer to a StringBuffer. Considers the I_* + * flags. + */ + // public static void getInitializerLabel(IInitializer initializer, int + // flags, StringBuffer buf) { + // // qualification + // if (getFlag(flags, I_FULLY_QUALIFIED)) { + // getTypeLabel(initializer.getDeclaringType(), T_FULLY_QUALIFIED | (flags & + // P_COMPRESSED), buf); + // buf.append('.'); + // } + // buf.append(JavaUIMessages.getString("JavaElementLabels.initializer")); + // //$NON-NLS-1$ + // + // // post qualification + // if (getFlag(flags, I_POST_QUALIFIED)) { + // buf.append(CONCAT_STRING); + // getTypeLabel(initializer.getDeclaringType(), T_FULLY_QUALIFIED | (flags & + // P_COMPRESSED), buf); + // } + // } + /** + * Appends the label for a type to a StringBuffer. Considers the T_* flags. + */ + public static void getTypeLabel(IType type, int flags, StringBuffer buf) { + if (getFlag(flags, T_FULLY_QUALIFIED)) { + if (type != null) { // jsurfer INSERT + IPackageFragment pack = type.getPackageFragment(); + if (!pack.isDefaultPackage()) { + getPackageFragmentLabel(pack, (flags & P_COMPRESSED), buf); + buf.append('.'); + } + buf.append(JavaModelUtil.getTypeQualifiedName(type)); + } // jsurfer INSERT + } else if (getFlag(flags, T_CONTAINER_QUALIFIED)) { + buf.append(JavaModelUtil.getTypeQualifiedName(type)); + } else { + buf.append(type.getElementName()); + } + // post qualification + if (getFlag(flags, T_POST_QUALIFIED)) { + buf.append(CONCAT_STRING); + IType declaringType = type.getDeclaringType(); + if (declaringType != null) { + getTypeLabel(declaringType, T_FULLY_QUALIFIED + | (flags & P_COMPRESSED), buf); + } else { + getPackageFragmentLabel(type.getPackageFragment(), + (flags & P_COMPRESSED), buf); + } + } + } + + /** + * Appends the label for a declaration to a StringBuffer. Considers the D_* + * flags. + */ + public static void getDeclararionLabel(IJavaElement declaration, int flags, + StringBuffer buf) { + if (getFlag(flags, D_QUALIFIED)) { + IJavaElement openable = (IJavaElement) declaration.getOpenable(); + if (openable != null) { + buf.append(getElementLabel(openable, CF_QUALIFIED + | CU_QUALIFIED)); + buf.append('/'); + } + } + if (declaration.getElementType() == IJavaElement.IMPORT_CONTAINER) { + buf.append(PHPUIMessages + .getString("JavaElementLabels.import_container")); //$NON-NLS-1$ + } else { + buf.append(declaration.getElementName()); + } + // post qualification + if (getFlag(flags, D_POST_QUALIFIED)) { + IJavaElement openable = (IJavaElement) declaration.getOpenable(); + if (openable != null) { + buf.append(CONCAT_STRING); + buf.append(getElementLabel(openable, CF_QUALIFIED + | CU_QUALIFIED)); + } + } + } + + /** + * Appends the label for a class file to a StringBuffer. Considers the CF_* + * flags. + */ + // public static void getClassFileLabel(IClassFile classFile, int flags, + // StringBuffer buf) { + // if (getFlag(flags, CF_QUALIFIED)) { + // IPackageFragment pack= (IPackageFragment) classFile.getParent(); + // if (!pack.isDefaultPackage()) { + // buf.append(pack.getElementName()); + // buf.append('.'); + // } + // } + // buf.append(classFile.getElementName()); + // + // if (getFlag(flags, CF_POST_QUALIFIED)) { + // buf.append(CONCAT_STRING); + // getPackageFragmentLabel((IPackageFragment) classFile.getParent(), 0, + // buf); + // } + // } + /** + * Appends the label for a compilation unit to a StringBuffer. Considers the + * CU_* flags. + */ + public static void getCompilationUnitLabel(ICompilationUnit cu, int flags, + StringBuffer buf) { + if (getFlag(flags, CU_QUALIFIED)) { + IPackageFragment pack = (IPackageFragment) cu.getParent(); + if (!pack.isDefaultPackage()) { + buf.append(pack.getElementName()); + buf.append('.'); + } + } + buf.append(cu.getElementName()); + + if (getFlag(flags, CU_POST_QUALIFIED)) { + buf.append(CONCAT_STRING); + getPackageFragmentLabel((IPackageFragment) cu.getParent(), 0, buf); + } + } + + /** + * Appends the label for a package fragment to a StringBuffer. Considers the + * P_* flags. + */ + public static void getPackageFragmentLabel(IPackageFragment pack, + int flags, StringBuffer buf) { + if (getFlag(flags, P_QUALIFIED)) { + getPackageFragmentRootLabel( + (IPackageFragmentRoot) pack.getParent(), ROOT_QUALIFIED, + buf); + buf.append('/'); + } + refreshPackageNamePattern(); + if (pack.isDefaultPackage()) { + buf.append(PHPUIMessages + .getString("JavaElementLabels.default_package")); //$NON-NLS-1$ + } else if (getFlag(flags, P_COMPRESSED) && fgPkgNameLength >= 0) { + String name = pack.getElementName(); + int start = 0; + int dot = name.indexOf('.', start); + while (dot > 0) { + if (dot - start > fgPkgNameLength - 1) { + buf.append(fgPkgNamePrefix); + if (fgPkgNameChars > 0) + buf.append(name.substring(start, Math.min(start + + fgPkgNameChars, dot))); + buf.append(fgPkgNamePostfix); + } else + buf.append(name.substring(start, dot + 1)); + start = dot + 1; + dot = name.indexOf('.', start); + } + buf.append(name.substring(start)); + } else { + buf.append(pack.getElementName()); + } + if (getFlag(flags, P_POST_QUALIFIED)) { + buf.append(CONCAT_STRING); + getPackageFragmentRootLabel( + (IPackageFragmentRoot) pack.getParent(), ROOT_QUALIFIED, + buf); + } + } + + /** + * Appends the label for a package fragment root to a StringBuffer. + * Considers the ROOT_* flags. + */ + public static void getPackageFragmentRootLabel(IPackageFragmentRoot root, + int flags, StringBuffer buf) { + if (root.isArchive()) + getArchiveLabel(root, flags, buf); + else + getFolderLabel(root, flags, buf); + } + + private static void getArchiveLabel(IPackageFragmentRoot root, int flags, + StringBuffer buf) { + // Handle variables different + if (getFlag(flags, ROOT_VARIABLE) && getVariableLabel(root, flags, buf)) + return; + boolean external = root.isExternal(); + if (external) + getExternalArchiveLabel(root, flags, buf); + else + getInternalArchiveLabel(root, flags, buf); + } + + private static boolean getVariableLabel(IPackageFragmentRoot root, + int flags, StringBuffer buf) { + // try { + // IClasspathEntry rawEntry= root.getRawClasspathEntry(); + // if (rawEntry != null) { + // if (rawEntry.getEntryKind() == IClasspathEntry.CPE_VARIABLE) { + // buf.append(rawEntry.getPath().makeRelative()); + // buf.append(CONCAT_STRING); + // if (root.isExternal()) + // buf.append(root.getPath().toOSString()); + // else + // buf.append(root.getPath().makeRelative().toString()); + // return true; + // } + // } + // } catch (JavaModelException e) { + // PHPeclipsePlugin.log(e); // problems with class path + // } + return false; + } + + private static void getExternalArchiveLabel(IPackageFragmentRoot root, + int flags, StringBuffer buf) { + IPath path = root.getPath(); + if (getFlag(flags, REFERENCED_ROOT_POST_QUALIFIED)) { + int segements = path.segmentCount(); + if (segements > 0) { + buf.append(path.segment(segements - 1)); + if (segements > 1 || path.getDevice() != null) { + buf.append(CONCAT_STRING); + buf.append(path.removeLastSegments(1).toOSString()); + } + } else { + buf.append(path.toOSString()); + } + } else { + buf.append(path.toOSString()); + } + } + + private static void getInternalArchiveLabel(IPackageFragmentRoot root, + int flags, StringBuffer buf) { + IResource resource = root.getResource(); + boolean rootQualified = getFlag(flags, ROOT_QUALIFIED); + boolean referencedQualified = getFlag(flags, + REFERENCED_ROOT_POST_QUALIFIED) + && JavaModelUtil.isReferenced(root) && resource != null; + if (rootQualified) { + buf.append(root.getPath().makeRelative().toString()); + } else { + buf.append(root.getElementName()); + if (referencedQualified) { + buf.append(CONCAT_STRING); + buf.append(resource.getParent().getFullPath().makeRelative() + .toString()); + } else if (getFlag(flags, ROOT_POST_QUALIFIED)) { + buf.append(CONCAT_STRING); + buf + .append(root.getParent().getPath().makeRelative() + .toString()); + } + } + } + + private static void getFolderLabel(IPackageFragmentRoot root, int flags, + StringBuffer buf) { + IResource resource = root.getResource(); + boolean rootQualified = getFlag(flags, ROOT_QUALIFIED); + boolean referencedQualified = getFlag(flags, + REFERENCED_ROOT_POST_QUALIFIED) + && JavaModelUtil.isReferenced(root) && resource != null; + if (rootQualified) { + buf.append(root.getPath().makeRelative().toString()); + } else { + if (resource != null) + buf.append(resource.getProjectRelativePath().toString()); + else + buf.append(root.getElementName()); + if (referencedQualified) { + buf.append(CONCAT_STRING); + buf.append(resource.getProject().getName()); + } else if (getFlag(flags, ROOT_POST_QUALIFIED)) { + buf.append(CONCAT_STRING); + buf.append(root.getParent().getElementName()); + } + } + } + + private static void refreshPackageNamePattern() { + String pattern = getPkgNamePatternForPackagesView(); + if (pattern.equals(fgPkgNamePattern)) + return; + else if (pattern.equals("")) { //$NON-NLS-1$ + fgPkgNamePattern = ""; //$NON-NLS-1$ + fgPkgNameLength = -1; + return; + } + fgPkgNamePattern = pattern; + int i = 0; + fgPkgNameChars = 0; + fgPkgNamePrefix = ""; //$NON-NLS-1$ + fgPkgNamePostfix = ""; //$NON-NLS-1$ + while (i < pattern.length()) { + char ch = pattern.charAt(i); + if (Character.isDigit(ch)) { + fgPkgNameChars = ch - 48; + if (i > 0) + fgPkgNamePrefix = pattern.substring(0, i); + if (i >= 0) + fgPkgNamePostfix = pattern.substring(i + 1); + fgPkgNameLength = fgPkgNamePrefix.length() + fgPkgNameChars + + fgPkgNamePostfix.length(); + return; + } + i++; + } + fgPkgNamePrefix = pattern; + fgPkgNameLength = pattern.length(); + } + + private static String getPkgNamePatternForPackagesView() { + IPreferenceStore store = PreferenceConstants.getPreferenceStore(); + if (!store + .getBoolean(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES)) + return ""; //$NON-NLS-1$ + return store + .getString(PreferenceConstants.APPEARANCE_PKG_NAME_PATTERN_FOR_PKG_VIEW); + } +}