| /******************************************************************************* |
| * Copyright (c) 2000, 2017 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.corext.refactoring.reorg; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.core.runtime.Assert; |
| |
| import org.eclipse.core.resources.IFile; |
| |
| import org.eclipse.jdt.core.IClassFile; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IJavaElement; |
| import org.eclipse.jdt.core.ISourceReference; |
| import org.eclipse.jdt.core.JavaModelException; |
| |
| |
| public class SourceReferenceUtil { |
| |
| //no instances |
| private SourceReferenceUtil(){} |
| |
| public static IFile getFile(ISourceReference ref) { |
| ICompilationUnit unit= getCompilationUnit(ref); |
| return (IFile) unit.getPrimary().getResource(); |
| } |
| |
| public static ICompilationUnit getCompilationUnit(ISourceReference o){ |
| Assert.isTrue(! (o instanceof IClassFile)); |
| |
| if (o instanceof ICompilationUnit) |
| return (ICompilationUnit)o; |
| if (o instanceof IJavaElement) |
| return (ICompilationUnit) ((IJavaElement)o).getAncestor(IJavaElement.COMPILATION_UNIT); |
| return null; |
| } |
| |
| @SuppressWarnings("unlikely-arg-type") |
| private static boolean hasParentInSet(IJavaElement elem, Set<ISourceReference> set){ |
| IJavaElement parent= elem.getParent(); |
| while (parent != null) { |
| if (set.contains(parent)) |
| return true; |
| parent= parent.getParent(); |
| } |
| return false; |
| } |
| |
| public static ISourceReference[] removeAllWithParentsSelected(ISourceReference[] elems){ |
| Set<ISourceReference> set= new HashSet<>(Arrays.asList(elems)); |
| List<ISourceReference> result= new ArrayList<>(elems.length); |
| for (ISourceReference elem : elems) { |
| if (! (elem instanceof IJavaElement)) |
| result.add(elem); |
| else{ |
| if (! hasParentInSet(((IJavaElement)elem), set)) |
| result.add(elem); |
| } |
| } |
| return result.toArray(new ISourceReference[result.size()]); |
| } |
| |
| public static ISourceReference[] sortByOffset(ISourceReference[] methods){ |
| Arrays.sort(methods, (o1, o2) -> { |
| try{ |
| return o2.getSourceRange().getOffset() - o1.getSourceRange().getOffset(); |
| } catch (JavaModelException e){ |
| return o2.hashCode() - o1.hashCode(); |
| } |
| }); |
| return methods; |
| } |
| } |
| |