Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java1032
1 files changed, 0 insertions, 1032 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java
deleted file mode 100644
index c4086ed7f..000000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java
+++ /dev/null
@@ -1,1032 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui.internal.utils;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.ClasspathContainerInitializer;
-import org.eclipse.jdt.core.Flags;
-import org.eclipse.jdt.core.IClasspathContainer;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IField;
-import org.eclipse.jdt.core.IImportDeclaration;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.compiler.CharOperation;
-
-/**
- * Original code is from JDT Utility methods for the Java Model.
- */
-public final class JavaModelUtil {
-
- /**
- * Finds a type by its qualified type name (dot separated).
- *
- * @param jproject
- * The java project to search in
- * @param fullyQualifiedName
- * The fully qualified name (type name with enclosing type names
- * and package (all separated by dots))
- * @return The type found, or null if not existing
- * @throws JavaModelException
- */
- public static IType findType(IJavaProject jproject,
- String fullyQualifiedName) throws JavaModelException {
- // workaround for bug 22883
- IType type = jproject.findType(fullyQualifiedName);
- if (type != null) {
- return type;
- }
- IPackageFragmentRoot[] roots = jproject.getPackageFragmentRoots();
- for (int i = 0; i < roots.length; i++) {
- IPackageFragmentRoot root = roots[i];
- type = findType(root, fullyQualifiedName);
- if (type != null && type.exists()) {
- return type;
- }
- }
- return null;
- }
-
- /**
- * Returns <code>true</code> if the given package fragment root is
- * referenced. This means it is own by a different project but is referenced
- * by the root's parent. Returns <code>false</code> if the given root
- * doesn't have an underlying resource.
- * @param root
- * @return true if root is referenced
- */
- public static boolean isReferenced(IPackageFragmentRoot root) {
- IResource resource = root.getResource();
- if (resource != null) {
- IProject jarProject = resource.getProject();
- IProject container = root.getJavaProject().getProject();
- return !container.equals(jarProject);
- }
- return false;
- }
-
- private static IType findType(IPackageFragmentRoot root,
- String fullyQualifiedName) throws JavaModelException {
- IJavaElement[] children = root.getChildren();
- for (int i = 0; i < children.length; i++) {
- IJavaElement element = children[i];
- if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
- IPackageFragment pack = (IPackageFragment) element;
- if (!fullyQualifiedName.startsWith(pack.getElementName())) {
- continue;
- }
- IType type = findType(pack, fullyQualifiedName);
- if (type != null && type.exists()) {
- return type;
- }
- }
- }
- return null;
- }
-
- private static IType findType(IPackageFragment pack,
- String fullyQualifiedName) throws JavaModelException {
- ICompilationUnit[] cus = pack.getCompilationUnits();
- for (int i = 0; i < cus.length; i++) {
- ICompilationUnit unit = cus[i];
- IType type = findType(unit, fullyQualifiedName);
- if (type != null && type.exists()) {
- return type;
- }
- }
- return null;
- }
-
- private static IType findType(ICompilationUnit cu, String fullyQualifiedName)
- throws JavaModelException {
- IType[] types = cu.getAllTypes();
- for (int i = 0; i < types.length; i++) {
- IType type = types[i];
- if (getFullyQualifiedName(type).equals(fullyQualifiedName)) {
- return type;
- }
- }
- return null;
- }
-
- /**
- * Finds a type by package and type name.
- *
- * @param jproject
- * the java project to search in
- * @param pack
- * The package name
- * @param typeQualifiedName
- * the type qualified name (type name with enclosing type names
- * (separated by dots))
- * @return the type found, or null if not existing
- * @throws JavaModelException
- * @deprecated Use IJavaProject.findType(String, String) instead
- */
- public static IType findType(IJavaProject jproject, String pack,
- String typeQualifiedName) throws JavaModelException {
- return jproject.findType(pack, typeQualifiedName);
- }
-
- /**
- * Finds a type container by container name. The returned element will be of
- * type <code>IType</code> or a <code>IPackageFragment</code>.
- * <code>null</code> is returned if the type container could not be found.
- *
- * @param jproject
- * The Java project defining the context to search
- * @param typeContainerName
- * A dot separarted name of the type container
- * @return the java element
- * @throws JavaModelException
- * @see #getTypeContainerName(IType)
- */
- public static IJavaElement findTypeContainer(IJavaProject jproject,
- String typeContainerName) throws JavaModelException {
- // try to find it as type
- IJavaElement result = jproject.findType(typeContainerName);
- if (result == null) {
- // find it as package
- IPath path = new Path(typeContainerName.replace('.', '/'));
- result = jproject.findElement(path);
- if (!(result instanceof IPackageFragment)) {
- result = null;
- }
-
- }
- return result;
- }
-
- /**
- * Finds a type in a compilation unit. Typical usage is to find the
- * corresponding type in a working copy.
- *
- * @param cu
- * the compilation unit to search in
- * @param typeQualifiedName
- * the type qualified name (type name with enclosing type names
- * (separated by dots))
- * @return the type found, or null if not existing
- * @throws JavaModelException
- */
- public static IType findTypeInCompilationUnit(ICompilationUnit cu,
- String typeQualifiedName) throws JavaModelException {
- IType[] types = cu.getAllTypes();
- for (int i = 0; i < types.length; i++) {
- String currName = getTypeQualifiedName(types[i]);
- if (typeQualifiedName.equals(currName)) {
- return types[i];
- }
- }
- return null;
- }
-
- /**
- * Finds a a member in a compilation unit. Typical usage is to find the
- * corresponding member in a working copy.
- *
- * @param cu
- * the compilation unit (eg. working copy) to search in
- * @param member
- * the member (eg. from the original)
- * @return the member found, or null if not existing
- */
- public static IMember findMemberInCompilationUnit(ICompilationUnit cu,
- IMember member) {
- IJavaElement[] elements = cu.findElements(member);
- if (elements != null && elements.length > 0) {
- return (IMember) elements[0];
- }
- return null;
- }
-
- /**
- * Returns the element of the given compilation unit which is "equal" to the
- * given element. Note that the given element usually has a parent different
- * from the given compilation unit.
- *
- * @param cu
- * the cu to search in
- * @param element
- * the element to look for
- * @return an element of the given cu "equal" to the given element
- */
- public static IJavaElement findInCompilationUnit(ICompilationUnit cu,
- IJavaElement element) {
- IJavaElement[] elements = cu.findElements(element);
- if (elements != null && elements.length > 0) {
- return elements[0];
- }
- return null;
- }
-
- /**
- * Returns the qualified type name of the given type using '.' as
- * separators. This is a replace for IType.getTypeQualifiedName() which uses
- * '$' as separators. As '$' is also a valid character in an id this is
- * ambiguous. JavaCore PR: 1GCFUNT
- * @param type
- * @return the type qualified name
- */
- public static String getTypeQualifiedName(IType type) {
- return type.getTypeQualifiedName('.');
- }
-
- /**
- * Returns the fully qualified name of the given type using '.' as
- * separators. This is a replace for IType.getFullyQualifiedTypeName which
- * uses '$' as separators. As '$' is also a valid character in an id this is
- * ambiguous. JavaCore PR: 1GCFUNT
- * @param type
- * @return the fully qualified name using . as the separator
- */
- public static String getFullyQualifiedName(IType type) {
- return type.getFullyQualifiedName('.');
- }
-
- /**
- * Returns the fully qualified name of a type's container. (package name or
- * enclosing type name)
- * @param type
- * @return the container name
- */
- public static String getTypeContainerName(IType type) {
- IType outerType = type.getDeclaringType();
- if (outerType != null) {
- return outerType.getFullyQualifiedName('.');
- }
- return type.getPackageFragment().getElementName();
- }
-
- /**
- * Concatenates two names. Uses a dot for separation. Both strings can be
- * empty or <code>null</code>.
- * @param name1
- * @param name2
- * @return name1 + name2
- */
- public static String concatenateName(String name1, String name2) {
- StringBuffer buf = new StringBuffer();
- if (name1 != null && name1.length() > 0) {
- buf.append(name1);
- }
- if (name2 != null && name2.length() > 0) {
- if (buf.length() > 0) {
- buf.append('.');
- }
- buf.append(name2);
- }
- return buf.toString();
- }
-
- /**
- * Concatenates two names. Uses a dot for separation. Both strings can be
- * empty or <code>null</code>.
- * @param name1
- * @param name2
- * @return name1 + name2
- */
- public static String concatenateName(char[] name1, char[] name2) {
- StringBuffer buf = new StringBuffer();
- if (name1 != null && name1.length > 0) {
- buf.append(name1);
- }
- if (name2 != null && name2.length > 0) {
- if (buf.length() > 0) {
- buf.append('.');
- }
- buf.append(name2);
- }
- return buf.toString();
- }
-
- /**
- * Evaluates if a member (possible from another package) is visible from
- * elements in a package.
- *
- * @param member
- * The member to test the visibility for
- * @param pack
- * The package in focus
- * @return true if visible
- * @throws JavaModelException
- */
- public static boolean isVisible(IMember member, IPackageFragment pack)
- throws JavaModelException {
-
- int type = member.getElementType();
- if (type == IJavaElement.INITIALIZER
- || (type == IJavaElement.METHOD && member.getElementName()
- .startsWith("<"))) { //$NON-NLS-1$
- //$NON-NLS-1$
- return false;
- }
-
- int otherflags = member.getFlags();
- IType declaringType = member.getDeclaringType();
- if (Flags.isPublic(otherflags)
- || (declaringType != null && declaringType.isInterface())) {
- return true;
- } else if (Flags.isPrivate(otherflags)) {
- return false;
- }
-
- IPackageFragment otherpack = (IPackageFragment) findParentOfKind(
- member, IJavaElement.PACKAGE_FRAGMENT);
- return (pack != null && otherpack != null && isSamePackage(pack,
- otherpack));
- }
-
- /**
- * Evaluates if a member in the focus' element hierarchy is visible from
- * elements in a package.
- *
- * @param member
- * The member to test the visibility for
- * @param pack
- * The package of the focus element focus
- * @return true if is visible in hiearchy
- * @throws JavaModelException
- */
- public static boolean isVisibleInHierarchy(IMember member,
- IPackageFragment pack) throws JavaModelException {
- int type = member.getElementType();
- if (type == IJavaElement.INITIALIZER
- || (type == IJavaElement.METHOD && member.getElementName()
- .startsWith("<"))) { //$NON-NLS-1$
- //$NON-NLS-1$
- return false;
- }
-
- int otherflags = member.getFlags();
-
- IType declaringType = member.getDeclaringType();
- if (Flags.isPublic(otherflags) || Flags.isProtected(otherflags)
- || (declaringType != null && declaringType.isInterface())) {
- return true;
- } else if (Flags.isPrivate(otherflags)) {
- return false;
- }
-
- IPackageFragment otherpack = (IPackageFragment) findParentOfKind(
- member, IJavaElement.PACKAGE_FRAGMENT);
- return (pack != null && pack.equals(otherpack));
- }
-
- /**
- * Returns the package fragment root of <code>IJavaElement</code>. If the
- * given element is already a package fragment root, the element itself is
- * returned.
- * @param element
- * @return the package fragment root
- */
- public static IPackageFragmentRoot getPackageFragmentRoot(
- IJavaElement element) {
- return (IPackageFragmentRoot) element
- .getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
- }
-
- /**
- * Returns the parent of the supplied java element that conforms to the
- * given parent type or <code>null</code>, if such a parent doesn't exit.
- *
- * @deprecated Use element.getParent().getAncestor(kind);
- */
- private static IJavaElement findParentOfKind(IJavaElement element, int kind) {
- if (element != null && element.getParent() != null) {
- return element.getParent().getAncestor(kind);
- }
- return null;
- }
-
- /**
- * Finds a method in a type. This searches for a method with the same name
- * and signature. Parameter types are only compared by the simple name, no
- * resolving for the fully qualified type name is done. Constructors are
- * only compared by parameters, not the name.
- *
- * @param name
- * The name of the method to find
- * @param paramTypes
- * The type signatures of the parameters e.g.
- * <code>{"QString;","I"}</code>
- * @param isConstructor
- * If the method is a constructor
- * @param type
- * @return The first found method or <code>null</code>, if nothing found
- * @throws JavaModelException
- */
- public static IMethod findMethod(String name, String[] paramTypes,
- boolean isConstructor, IType type) throws JavaModelException {
- return findMethod(name, paramTypes, isConstructor, type.getMethods());
- }
-
- /**
- * Finds a method by name. This searches for a method with a name and
- * signature. Parameter types are only compared by the simple name, no
- * resolving for the fully qualified type name is done. Constructors are
- * only compared by parameters, not the name.
- *
- * @param name
- * The name of the method to find
- * @param paramTypes
- * The type signatures of the parameters e.g.
- * <code>{"QString;","I"}</code>
- * @param isConstructor
- * If the method is a constructor
- * @param methods
- * The methods to search in
- * @return The found method or <code>null</code>, if nothing found
- * @throws JavaModelException
- */
- public static IMethod findMethod(String name, String[] paramTypes,
- boolean isConstructor, IMethod[] methods) throws JavaModelException {
- for (int i = methods.length - 1; i >= 0; i--) {
- if (isSameMethodSignature(name, paramTypes, isConstructor,
- methods[i])) {
- return methods[i];
- }
- }
- return null;
- }
-
- /**
- * Finds a method declararion in a type's hierarchy. The search is top down,
- * so this returns the first declaration of the method in the hierarchy.
- * This searches for a method with a name and signature. Parameter types are
- * only compared by the simple name, no resolving for the fully qualified
- * type name is done. Constructors are only compared by parameters, not the
- * name.
- * @param hierarchy
- *
- * @param type
- * Searches in this type's supertypes.
- * @param name
- * The name of the method to find
- * @param paramTypes
- * The type signatures of the parameters e.g.
- * <code>{"QString;","I"}</code>
- * @param isConstructor
- * If the method is a constructor
- * @return The first method found or null, if nothing found
- * @throws JavaModelException
- */
- public static IMethod findMethodDeclarationInHierarchy(
- ITypeHierarchy hierarchy, IType type, String name,
- String[] paramTypes, boolean isConstructor)
- throws JavaModelException {
- IType[] superTypes = hierarchy.getAllSupertypes(type);
- for (int i = superTypes.length - 1; i >= 0; i--) {
- IMethod first = findMethod(name, paramTypes, isConstructor,
- superTypes[i]);
- if (first != null && !Flags.isPrivate(first.getFlags())) {
- // the order getAllSupertypes does make assumptions of the order
- // of inner elements -> search recursivly
- IMethod res = findMethodDeclarationInHierarchy(hierarchy, first
- .getDeclaringType(), name, paramTypes, isConstructor);
- if (res != null) {
- return res;
- }
- return first;
- }
- }
- return null;
- }
-
- /**
- * Finds a method implementation in a type's classhierarchy. The search is
- * bottom-up, so this returns the nearest overridden method. Does not find
- * methods in interfaces or abstract methods. This searches for a method
- * with a name and signature. Parameter types are only compared by the
- * simple name, no resolving for the fully qualified type name is done.
- * Constructors are only compared by parameters, not the name.
- * @param hierarchy
- *
- * @param type
- * Type to search the superclasses
- * @param name
- * The name of the method to find
- * @param paramTypes
- * The type signatures of the parameters e.g.
- * <code>{"QString;","I"}</code>
- * @param isConstructor
- * If the method is a constructor
- * @return The first method found or null, if nothing found
- * @throws JavaModelException
- */
- public static IMethod findMethodImplementationInHierarchy(
- ITypeHierarchy hierarchy, IType type, String name,
- String[] paramTypes, boolean isConstructor)
- throws JavaModelException {
- IType[] superTypes = hierarchy.getAllSuperclasses(type);
- for (int i = 0; i < superTypes.length; i++) {
- IMethod found = findMethod(name, paramTypes, isConstructor,
- superTypes[i]);
- if (found != null) {
- if (Flags.isAbstract(found.getFlags())) {
- return null;
- }
- return found;
- }
- }
- return null;
- }
-
- private static IMethod findMethodInHierarchy(ITypeHierarchy hierarchy,
- IType type, String name, String[] paramTypes, boolean isConstructor)
- throws JavaModelException {
- IMethod method = findMethod(name, paramTypes, isConstructor, type);
- if (method != null) {
- return method;
- }
- IType superClass = hierarchy.getSuperclass(type);
- if (superClass != null) {
- IMethod res = findMethodInHierarchy(hierarchy, superClass, name,
- paramTypes, isConstructor);
- if (res != null) {
- return res;
- }
- }
- if (!isConstructor) {
- IType[] superInterfaces = hierarchy.getSuperInterfaces(type);
- for (int i = 0; i < superInterfaces.length; i++) {
- IMethod res = findMethodInHierarchy(hierarchy,
- superInterfaces[i], name, paramTypes, false);
- if (res != null) {
- return res;
- }
- }
- }
- return method;
- }
-
- /**
- * Finds the method that is defines/declares the given method. The search is
- * bottom-up, so this returns the nearest defining/declaring method.
- * @param typeHierarchy
- * @param type
- * @param methodName
- * @param paramTypes
- * @param isConstructor
- *
- * @param testVisibility
- * If true the result is tested on visibility. Null is returned
- * if the method is not visible.
- * @return the method or null
- * @throws JavaModelException
- */
- public static IMethod findMethodDefininition(ITypeHierarchy typeHierarchy,
- IType type, String methodName, String[] paramTypes,
- boolean isConstructor, boolean testVisibility)
- throws JavaModelException {
- IType superClass = typeHierarchy.getSuperclass(type);
- if (superClass != null) {
- IMethod res = findMethodInHierarchy(typeHierarchy, superClass,
- methodName, paramTypes, isConstructor);
- if (res != null && !Flags.isPrivate(res.getFlags())) {
- if (!testVisibility
- || isVisibleInHierarchy(res, type.getPackageFragment())) {
- return res;
- }
- }
- }
- if (!isConstructor) {
- IType[] interfaces = typeHierarchy.getSuperInterfaces(type);
- for (int i = 0; i < interfaces.length; i++) {
- IMethod res = findMethodInHierarchy(typeHierarchy,
- interfaces[i], methodName, paramTypes, false);
- if (res != null) {
- return res; // methods from interfaces are always public and
- // therefore visible
- }
- }
- }
- return null;
- }
-
- /**
- * Tests if a method equals to the given signature. Parameter types are only
- * compared by the simple name, no resolving for the fully qualified type
- * name is done. Constructors are only compared by parameters, not the name.
- *
- * @param name
- * Name of the method
- * @param paramTypes
- * The type signatures of the parameters e.g.
- * <code>{"QString;","I"}</code>
- * @param isConstructor
- * Specifies if the method is a constructor
- * @param curr
- * @return Returns <code>true</code> if the method has the given name and
- * parameter types and constructor state.
- * @throws JavaModelException
- */
- public static boolean isSameMethodSignature(String name,
- String[] paramTypes, boolean isConstructor, IMethod curr)
- throws JavaModelException {
- if (isConstructor || name.equals(curr.getElementName())) {
- if (isConstructor == curr.isConstructor()) {
- String[] currParamTypes = curr.getParameterTypes();
- if (paramTypes.length == currParamTypes.length) {
- for (int i = 0; i < paramTypes.length; i++) {
- String t1 = Signature.getSimpleName(Signature
- .toString(paramTypes[i]));
- String t2 = Signature.getSimpleName(Signature
- .toString(currParamTypes[i]));
- if (!t1.equals(t2)) {
- return false;
- }
- }
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Tests if two <code>IPackageFragment</code>s represent the same logical
- * java package.
- * @param pack1
- * @param pack2
- *
- * @return <code>true</code> if the package fragments' names are equal.
- */
- public static boolean isSamePackage(IPackageFragment pack1,
- IPackageFragment pack2) {
- return pack1.getElementName().equals(pack2.getElementName());
- }
-
- /**
- * Checks whether the given type has a valid main method or not.
- * @param type
- * @return true if type has a main method
- * @throws JavaModelException
- */
- public static boolean hasMainMethod(IType type) throws JavaModelException {
- IMethod[] methods = type.getMethods();
- for (int i = 0; i < methods.length; i++) {
- if (methods[i].isMainMethod()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Checks if the field is boolean.
- * @param field
- * @return true if the file is of primitive boolean type
- * @throws JavaModelException
- */
- public static boolean isBoolean(IField field) throws JavaModelException {
- return field.getTypeSignature().equals(Signature.SIG_BOOLEAN);
- }
-
- /**
- * Tests if the given element is on the class path of its containing
- * project. Handles the case that the containing project isn't a Java
- * project.
- * @param element
- * @return true if element in on the class path?
- */
- public static boolean isOnClasspath(IJavaElement element) {
- IJavaProject project = element.getJavaProject();
- if (!project.exists())
- return false;
- return project.isOnClasspath(element);
- }
-
- /**
- * Resolves a type name in the context of the declaring type.
- *
- * @param refTypeSig
- * the type name in signature notation (for example 'QVector')
- * this can also be an array type, but dimensions will be
- * ignored.
- * @param declaringType
- * the context for resolving (type where the reference was made
- * in)
- * @return returns the fully qualified type name or build-in-type name. if a
- * unresoved type couldn't be resolved null is returned
- * @throws JavaModelException
- */
- public static String getResolvedTypeName(String refTypeSig,
- IType declaringType) throws JavaModelException {
- int arrayCount = Signature.getArrayCount(refTypeSig);
- char type = refTypeSig.charAt(arrayCount);
- if (type == Signature.C_UNRESOLVED) {
- int semi = refTypeSig
- .indexOf(Signature.C_SEMICOLON, arrayCount + 1);
- if (semi == -1) {
- throw new IllegalArgumentException();
- }
- String name = refTypeSig.substring(arrayCount + 1, semi);
-
- String[][] resolvedNames = declaringType.resolveType(name);
- if (resolvedNames != null && resolvedNames.length > 0) {
- return JavaModelUtil.concatenateName(resolvedNames[0][0],
- resolvedNames[0][1]);
- }
- return null;
- }
- return Signature.toString(refTypeSig.substring(arrayCount));
- }
-
- /**
- * Returns if a CU can be edited.
- * @param cu
- * @return true if cu is editable
- */
- public static boolean isEditable(ICompilationUnit cu) {
- IResource resource = toOriginal(cu).getResource();
- return (resource.exists() && !resource.getResourceAttributes()
- .isReadOnly());
- }
-
- /**
- * Finds a qualified import for a type name.
- * @param cu
- * @param simpleName
- * @return the import declaration or null
- * @throws JavaModelException
- */
- public static IImportDeclaration findImport(ICompilationUnit cu,
- String simpleName) throws JavaModelException {
- IImportDeclaration[] existing = cu.getImports();
- for (int i = 0; i < existing.length; i++) {
- String curr = existing[i].getElementName();
- if (curr.endsWith(simpleName)) {
- int dotPos = curr.length() - simpleName.length() - 1;
- if ((dotPos == -1)
- || (dotPos > 0 && curr.charAt(dotPos) == '.')) {
- return existing[i];
- }
- }
- }
- return null;
- }
-
- /**
- * Returns the original if the given member. If the member is already an
- * original the input is returned. The returned member might not exist
- * @param member
- * @return the original IMember
- */
- public static IMember toOriginal(IMember member) {
- if (member instanceof IMethod) {
- return toOriginalMethod((IMethod) member);
- }
-
- return (IMember) member.getPrimaryElement();
- /*
- * ICompilationUnit cu= member.getCompilationUnit(); if (cu != null &&
- * cu.isWorkingCopy()) return (IMember)cu.getOriginal(member); return
- * member;
- */
- }
-
- /*
- * XXX workaround for bug 18568
- * http://bugs.eclipse.org/bugs/show_bug.cgi?id=18568 to be removed once the
- * bug is fixed
- */
- private static IMethod toOriginalMethod(IMethod method) {
- ICompilationUnit cu = method.getCompilationUnit();
- if (cu == null || isPrimary(cu)) {
- return method;
- }
- try {
- // use the workaround only if needed
- if (!method.getElementName().equals(
- method.getDeclaringType().getElementName()))
- return (IMethod) method.getPrimaryElement();
-
- IType originalType = (IType) toOriginal(method.getDeclaringType());
- IMethod[] methods = originalType.findMethods(method);
- boolean isConstructor = method.isConstructor();
- for (int i = 0; i < methods.length; i++) {
- if (methods[i].isConstructor() == isConstructor)
- return methods[i];
- }
- return null;
- } catch (JavaModelException e) {
- return null;
- }
- }
-
- // private static boolean PRIMARY_ONLY = false;
-
- /**
- * Returns the original cu if the given cu is a working copy. If the cu is
- * already an original the input cu is returned. The returned cu might not
- * exist
- * @param cu
- * @return the original compiliation unit
- */
- public static ICompilationUnit toOriginal(ICompilationUnit cu) {
- // To stay compatible with old version returned null
- // if cu is null
- if (cu == null)
- return cu;
- return cu.getPrimary();
- }
-
- /**
- * Returns the original element if the given element is a working copy. If
- * the cu is already an original the input element is returned. The returned
- * element might not exist
- * @param element
- * @return element's primary element
- */
- public static IJavaElement toOriginal(IJavaElement element) {
- return element.getPrimaryElement();
- }
-
- /**
- * Returns true if a cu is a primary cu (original or shared working copy)
- * @param cu
- * @return true if cu is primary
- */
- public static boolean isPrimary(ICompilationUnit cu) {
- return cu.getOwner() == null;
- }
-
- /**
- * http://bugs.eclipse.org/bugs/show_bug.cgi?id=19253
- *
- * Reconciling happens in a separate thread. This can cause a situation
- * where the Java element gets disposed after an exists test has been done.
- * So we should not log not present exceptions when they happen in working
- * copies.
- * @param exception
- * @return true if filter not present
- */
- public static boolean filterNotPresentException(CoreException exception) {
- if (!(exception instanceof JavaModelException)) {
- return true;
- }
- JavaModelException je = (JavaModelException) exception;
- if (!je.isDoesNotExist()) {
- return true;
- }
- IJavaElement[] elements = je.getJavaModelStatus().getElements();
- for (int i = 0; i < elements.length; i++) {
- IJavaElement element = elements[i];
- ICompilationUnit unit = (ICompilationUnit) element
- .getAncestor(IJavaElement.COMPILATION_UNIT);
- if (unit == null) {
- return true;
- }
- if (!unit.isWorkingCopy()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @param type
- * @param pm
- * @return all supertypes of type
- * @throws JavaModelException
- */
- public static IType[] getAllSuperTypes(IType type, IProgressMonitor pm)
- throws JavaModelException {
- // workaround for 23656
- Set types = new HashSet(Arrays.asList(type.newSupertypeHierarchy(pm)
- .getAllSupertypes(type)));
- IType objekt = type.getJavaProject().findType("java.lang.Object");//$NON-NLS-1$
- if (objekt != null) {
- types.add(objekt);
- }
- return (IType[]) types.toArray(new IType[types.size()]);
- }
-
- /**
- * @param resourcePath
- * @param exclusionPatterns
- * @return true if resourcePath is excluded by exclusion patterns
- */
- public static boolean isExcludedPath(IPath resourcePath,
- IPath[] exclusionPatterns) {
- char[] path = resourcePath.toString().toCharArray();
- for (int i = 0, length = exclusionPatterns.length; i < length; i++) {
- char[] pattern = exclusionPatterns[i].toString().toCharArray();
- if (CharOperation.pathMatch(pattern, path, true, '/')) {
- return true;
- }
- }
- return false;
- }
-
- /*
-
- * @see IClasspathEntry#getExclusionPatterns
- */
- /**
- * Returns whether the given resource path matches one of the exclusion
- * patterns.
- *
- * @param resourcePath
- * @param exclusionPatterns
- * @return true if resourcePath is excluded
- */
- public static boolean isExcluded(IPath resourcePath,
- char[][] exclusionPatterns) {
- if (exclusionPatterns == null) {
- return false;
- }
- char[] path = resourcePath.toString().toCharArray();
- for (int i = 0, length = exclusionPatterns.length; i < length; i++) {
- if (CharOperation.pathMatch(exclusionPatterns[i], path, true, '/')) {
- return true;
- }
- }
- return false;
- }
-
- private static Boolean fgIsJDTCore_1_5 = null;
-
- /**
- * @return true if JRE 1.5 in enabled.
- */
- public static boolean isJDTCore_1_5() {
- if (fgIsJDTCore_1_5 == null) {
- fgIsJDTCore_1_5 = JavaCore
- .getDefaultOptions()
- .containsKey(
- "org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation") ? Boolean.TRUE //$NON-NLS-1$
- : Boolean.FALSE;
- }
- return fgIsJDTCore_1_5.booleanValue();
- }
-
- /**
- * Helper method that tests if an classpath entry can be found in a
- * container. <code>null</code> is returned if the entry can not be found
- * or if the container does not allows the configuration of source
- * attachments
- *
- * @param jproject
- * The container's parent project
- * @param containerPath
- * The path of the container
- * @param libPath
- * The path of the library to be found
- * @return IClasspathEntry A classpath entry from the container of
- * <code>null</code> if the container can not be modified.
- * @throws JavaModelException
- */
- public static IClasspathEntry getClasspathEntryToEdit(
- IJavaProject jproject, IPath containerPath, IPath libPath)
- throws JavaModelException {
- IClasspathContainer container = JavaCore.getClasspathContainer(
- containerPath, jproject);
- ClasspathContainerInitializer initializer = JavaCore
- .getClasspathContainerInitializer(containerPath.segment(0));
- if (container != null
- && initializer != null
- && initializer.canUpdateClasspathContainer(containerPath,
- jproject)) {
- IClasspathEntry[] entries = container.getClasspathEntries();
- for (int i = 0; i < entries.length; i++) {
- IClasspathEntry curr = entries[i];
- IClasspathEntry resolved = JavaCore
- .getResolvedClasspathEntry(curr);
- if (resolved != null && libPath.equals(resolved.getPath())) {
- return curr; // return the real entry
- }
- }
- }
- return null; // attachment not possible
- }
-}

Back to the top