Copyright (c) 2000, 2019 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: Jesper Kamstrup Linnet (eclipse@kamstrup-linnet.dk) - initial API and implementation (report 36180: Callers/Callees view) Red Hat Inc. - refactored to jdt.core.manipulation
/******************************************************************************* * Copyright (c) 2000, 2019 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: * Jesper Kamstrup Linnet (eclipse@kamstrup-linnet.dk) - initial API and implementation * (report 36180: Callers/Callees view) * Red Hat Inc. - refactored to jdt.core.manipulation *******************************************************************************/
package org.eclipse.jdt.internal.corext.callhierarchy; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IMember; import org.eclipse.jdt.core.dom.CompilationUnit; class CalleeMethodWrapper extends MethodWrapper { private Comparator<MethodWrapper> fMethodWrapperComparator = new MethodWrapperComparator(); private static class MethodWrapperComparator implements Comparator<MethodWrapper> { @Override public int compare(MethodWrapper m1, MethodWrapper m2) { CallLocation callLocation1 = m1.getMethodCall().getFirstCallLocation(); CallLocation callLocation2 = m2.getMethodCall().getFirstCallLocation(); if ((callLocation1 != null) && (callLocation2 != null)) { if (callLocation1.getStart() == callLocation2.getStart()) { return callLocation1.getEnd() - callLocation2.getEnd(); } return callLocation1.getStart() - callLocation2.getStart(); } return 0; } } public CalleeMethodWrapper(MethodWrapper parent, MethodCall methodCall) { super(parent, methodCall); } /* Returns the calls sorted after the call location * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#getCalls() */ @Override public MethodWrapper[] getCalls(IProgressMonitor progressMonitor) { MethodWrapper[] result = super.getCalls(progressMonitor); Arrays.sort(result, fMethodWrapperComparator); return result; } @Override protected String getTaskName() { return CallHierarchyMessages.CalleeMethodWrapper_taskname; } /* * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#createMethodWrapper(org.eclipse.jdt.internal.corext.callhierarchy.MethodCall) */ @Override protected MethodWrapper createMethodWrapper(MethodCall methodCall) { return new CalleeMethodWrapper(this, methodCall); } /* * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#canHaveChildren() */ @Override public boolean canHaveChildren() { return true; }
Find callees called from the current method.
See Also:
  • findChildren.findChildren(IProgressMonitor)
/** * Find callees called from the current method. * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#findChildren(org.eclipse.core.runtime.IProgressMonitor) */
@Override protected Map<String, MethodCall> findChildren(IProgressMonitor progressMonitor) { IMember member= getMember(); if (member.exists()) { CompilationUnit cu= CallHierarchyCore.getCompilationUnitNode(member, true); if (progressMonitor != null) { progressMonitor.worked(5); } if (cu != null) { CalleeAnalyzerVisitor visitor = new CalleeAnalyzerVisitor(member, cu, progressMonitor); cu.accept(visitor); return visitor.getCallees(); } } return new HashMap<>(0); } }