package com.seventh7.mybatis.alias; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.Collections2; import com.google.common.collect.Sets; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.AnnotatedElementsSearch; import com.seventh7.mybatis.annotation.Annotation; import com.seventh7.mybatis.util.JavaUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Collections; import java.util.Set; /** * @author yanglin */ public class AnnotationAliasResolver extends AliasResolver { private static final Function FUN = new Function<PsiClass, AliasDesc>() { @Override public AliasDesc apply(PsiClass psiClass) { Optional<String> txt = JavaUtils.getAnnotationValueText(psiClass, Annotation.ALIAS); if (!txt.isPresent()) return null; AliasDesc ad = new AliasDesc(); ad.setAlias(txt.get()); ad.setClazz(psiClass); return ad; } }; public AnnotationAliasResolver(Project project) { super(project); } public static final AnnotationAliasResolver getInstance(@NotNull Project project) { return project.getComponent(AnnotationAliasResolver.class); } @NotNull @Override public Set<AliasDesc> getClassAliasDescriptions(@Nullable PsiElement element) { Optional<PsiClass> clazz = Annotation.ALIAS.toPsiClass(project); if (clazz.isPresent()) { Collection<PsiClass> res = AnnotatedElementsSearch.searchPsiClasses(clazz.get(), GlobalSearchScope.allScope(project)).findAll(); return Sets.newHashSet(Collections2.transform(res, FUN)); } return Collections.emptySet(); } }