X-Git-Url: http://secure.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/JavaElementLabels.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/JavaElementLabels.java
index 4e71612..801580e 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/JavaElementLabels.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/JavaElementLabels.java
@@ -32,734 +32,780 @@ 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 - org.eclipse.jdt.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);
- }
+ /**
+ * 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);
+ }
}