package ru.naumen.gintonic.utils;
import java.util.List;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
public class IPackageFragmentUtils {
public static List<IPackageFragment> getParentPackages(
IPackageFragment packageFragment, int ascendLevel) {
List<IPackageFragment> parentPackages = ListUtils.newArrayList();
getParentPackages(packageFragment, ascendLevel, parentPackages);
return parentPackages;
}
public static IPackageFragment getParentPackage(
IPackageFragment packageFragment) {
if (packageFragment instanceof IPackageFragmentRoot) {
return null;
}
String elementName = packageFragment.getElementName();
if (isSpecialPackage(elementName)) {
return null;
}
/*
* This is way to complicated. If you see this code and know the answer
* please mail me!
*/
List<String> pathOfChild = StringUtils.split('.', elementName);
List<String> pathOfParent = pathOfChild.subList(
0,
pathOfChild.size() - 1);
String pathToParentAsDottedName = StringUtils.join('.', pathOfParent);
IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot) packageFragment.getParent();
IPackageFragment packageFragmentParent = packageFragmentRoot.getPackageFragment(pathToParentAsDottedName);
return packageFragmentParent;
}
private static void getParentPackages(IPackageFragment packageFragment,
int ascendLevel, List<IPackageFragment> parentPackages) {
if (ascendLevel > 0) {
IPackageFragment parentPackage = getParentPackage(packageFragment);
if (parentPackage != null) {
parentPackages.add(parentPackage);
getParentPackages(
parentPackage,
ascendLevel - 1,
parentPackages);
}
}
}
private static boolean isSpecialPackage(String elementName) {
return elementName.length() == 0 /* the empty package */
|| elementName.equals("java.lang");
}
}