Copyright (c) 2000, 2009 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.core;
import org.eclipse.jdt.core.*;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaModelStatus;
import org.eclipse.jdt.core.IJavaModelStatusConstants;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IRegion;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeHierarchy;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy;
import org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy;
This operation creates an ITypeHierarchy
for a specific type within
a specified region, or for all types within a region. The specified
region limits the number of resolved subtypes (to the subset of
types in the specified region). The resolved supertypes may go outside
of the specified region in order to reach the root(s) of the type
hierarchy. A Java Project is required to provide a context (classpath)
to use while resolving supertypes and subtypes.
See Also: - ITypeHierarchy
/**
* This operation creates an <code>ITypeHierarchy</code> for a specific type within
* a specified region, or for all types within a region. The specified
* region limits the number of resolved subtypes (to the subset of
* types in the specified region). The resolved supertypes may go outside
* of the specified region in order to reach the root(s) of the type
* hierarchy. A Java Project is required to provide a context (classpath)
* to use while resolving supertypes and subtypes.
*
* @see ITypeHierarchy
*/
public class CreateTypeHierarchyOperation extends JavaModelOperation {
The generated type hierarchy
/**
* The generated type hierarchy
*/
protected TypeHierarchy typeHierarchy;
Constructs an operation to create a type hierarchy for the
given type within the specified region, in the context of
the given project.
/**
* Constructs an operation to create a type hierarchy for the
* given type within the specified region, in the context of
* the given project.
*/
public CreateTypeHierarchyOperation(IRegion region, ICompilationUnit[] workingCopies, IType element, boolean computeSubtypes) {
super(element);
this.typeHierarchy = new RegionBasedTypeHierarchy(region, workingCopies, element, computeSubtypes);
}
Constructs an operation to create a type hierarchy for the
given type and working copies.
/**
* Constructs an operation to create a type hierarchy for the
* given type and working copies.
*/
public CreateTypeHierarchyOperation(IType element, ICompilationUnit[] workingCopies, IJavaSearchScope scope, boolean computeSubtypes) {
super(element);
ICompilationUnit[] copies;
if (workingCopies != null) {
int length = workingCopies.length;
copies = new ICompilationUnit[length];
System.arraycopy(workingCopies, 0, copies, 0, length);
} else {
copies = null;
}
this.typeHierarchy = new TypeHierarchy(element, copies, scope, computeSubtypes);
}
Constructs an operation to create a type hierarchy for the
given type and working copies.
/**
* Constructs an operation to create a type hierarchy for the
* given type and working copies.
*/
public CreateTypeHierarchyOperation(IType element, ICompilationUnit[] workingCopies, IJavaProject project, boolean computeSubtypes) {
super(element);
ICompilationUnit[] copies;
if (workingCopies != null) {
int length = workingCopies.length;
copies = new ICompilationUnit[length];
System.arraycopy(workingCopies, 0, copies, 0, length);
} else {
copies = null;
}
this.typeHierarchy = new TypeHierarchy(element, copies, project, computeSubtypes);
}
Performs the operation - creates the type hierarchy
Throws: - JavaModelException – The operation has failed.
/**
* Performs the operation - creates the type hierarchy
* @exception JavaModelException The operation has failed.
*/
@Override
protected void executeOperation() throws JavaModelException {
this.typeHierarchy.refresh(this);
}
Returns the generated type hierarchy.
/**
* Returns the generated type hierarchy.
*/
public ITypeHierarchy getResult() {
return this.typeHierarchy;
}
See Also: - JavaModelOperation
/**
* @see JavaModelOperation
*/
@Override
public boolean isReadOnly() {
return true;
}
Possible failures:
- NO_ELEMENTS_TO_PROCESS - at least one of a type or region must
be provided to generate a type hierarchy.
- ELEMENT_NOT_PRESENT - the provided type or type's project does not exist
/**
* Possible failures: <ul>
* <li>NO_ELEMENTS_TO_PROCESS - at least one of a type or region must
* be provided to generate a type hierarchy.
* <li>ELEMENT_NOT_PRESENT - the provided type or type's project does not exist
* </ul>
*/
@Override
public IJavaModelStatus verify() {
IJavaElement elementToProcess= getElementToProcess();
if (elementToProcess == null && !(this.typeHierarchy instanceof RegionBasedTypeHierarchy)) {
return new JavaModelStatus(IJavaModelStatusConstants.NO_ELEMENTS_TO_PROCESS);
}
if (elementToProcess != null && !elementToProcess.exists()) {
return new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, elementToProcess);
}
IJavaProject project = this.typeHierarchy.javaProject();
if (project != null && !project.exists()) {
return new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, project);
}
return JavaModelStatus.VERIFIED_OK;
}
}