/*******************************************************************************
* 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);
}
}