package com.seventh7.mybatis.alias; import com.google.common.collect.Sets; import com.intellij.openapi.project.Project; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Set; /** * @author yanglin */ public abstract class PackageAliasResolver extends AliasResolver{ private JavaPsiFacade javaPsiFacade; public PackageAliasResolver(Project project) { super(project); this.javaPsiFacade = JavaPsiFacade.getInstance(project); } @NotNull @Override public Set<AliasDesc> getClassAliasDescriptions(@Nullable PsiElement element) { Set<AliasDesc> result = Sets.newHashSet(); for (String pkgName : getPackages(element)) { if (null == pkgName) { continue; } PsiPackage pkg = javaPsiFacade.findPackage(pkgName); if (null != pkg) { addAliasDesc(result, pkg); for (PsiPackage tmp : pkg.getSubPackages()) { addAliasDesc(result, tmp); } } } return result; } private void addAliasDesc(Set<AliasDesc> result, PsiPackage pkg) { for (PsiClass clazz : pkg.getClasses()) { addAliasDesc(result, clazz, clazz.getName()); } } @NotNull public abstract Collection<String> getPackages(@Nullable PsiElement element); }