package com.seventh7.mybatis.locator; 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.PsiFile; import com.intellij.psi.PsiJavaFile; import com.intellij.psi.PsiPackage; import com.intellij.psi.search.GlobalSearchScope; import com.seventh7.mybatis.dom.model.Mapper; import com.seventh7.mybatis.util.MapperUtils; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * @author yanglin */ public class MapperXmlPackageProvider extends PackageProvider{ @NotNull @Override public Set<PsiPackage> getPackages(@NotNull Project project) { HashSet<PsiPackage> res = Sets.newHashSet(); Collection<Mapper> mappers = MapperUtils.findMappers(project); JavaPsiFacade javaPsiFacade = JavaPsiFacade.getInstance(project); for (Mapper mapper : mappers) { String namespace = MapperUtils.getNamespace(mapper); PsiClass clazz = javaPsiFacade.findClass(namespace, GlobalSearchScope.allScope(project)); if (null != clazz) { PsiFile file = clazz.getContainingFile(); if (file instanceof PsiJavaFile) { String packageName = ((PsiJavaFile) file).getPackageName(); PsiPackage pkg = javaPsiFacade.findPackage(packageName); if (null != pkg) { res.add(pkg); } } } } return res; } }