| package com.intellij.jarFinder; |
| |
| import com.intellij.psi.*; |
| import com.intellij.psi.impl.source.PsiImportStaticStatementImpl; |
| import com.intellij.psi.util.PsiTreeUtil; |
| import org.jetbrains.annotations.NotNull; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| |
| /** |
| * @author Sergey Evdokimov |
| */ |
| public class JavaFindJarFix extends FindJarFix<PsiQualifiedReferenceElement> { |
| public JavaFindJarFix(PsiQualifiedReferenceElement ref) { |
| super(ref); |
| } |
| |
| @Override |
| protected Collection<String> getFqns(@NotNull PsiQualifiedReferenceElement ref) { |
| final PsiImportStatementBase importStatement = PsiTreeUtil.getParentOfType(ref.getElement(), PsiImportStatementBase.class); |
| |
| //from static imports |
| if (importStatement != null) { |
| if (importStatement instanceof PsiImportStatement) { |
| final String importFQN = ((PsiImportStatement)importStatement).getQualifiedName(); |
| if (importFQN != null && !importFQN.endsWith("*")) { |
| return Collections.singleton(importFQN); |
| } |
| } |
| else if (importStatement instanceof PsiImportStaticStatementImpl) { |
| final PsiJavaCodeReferenceElement classRef = ((PsiImportStaticStatementImpl)importStatement).getClassReference(); |
| if (classRef != null) { |
| final String importFQN = classRef.getQualifiedName(); |
| if (importFQN != null) { |
| return Collections.singleton(importFQN); |
| } |
| } |
| } |
| return Collections.emptyList(); |
| } |
| |
| final PsiElement qualifier = ref.getQualifier(); |
| if (qualifier instanceof PsiQualifiedReference) { |
| //PsiQualifiedReference r = (PsiQualifiedReference)qualifier; |
| //TODO[kb] get fqn from expressions like org.unresolvedPackage.MyClass.staticMethodCall(...); |
| return Collections.emptyList(); |
| } |
| final String className = ref.getReferenceName(); |
| PsiFile file = ref.getContainingFile().getOriginalFile(); |
| if (className != null && file instanceof PsiJavaFile) { |
| final PsiImportList importList = ((PsiJavaFile)file).getImportList(); |
| if (importList != null) { |
| final PsiImportStatementBase statement = importList.findSingleImportStatement(className); |
| if (statement instanceof PsiImportStatement) { |
| final String importFQN = ((PsiImportStatement)statement).getQualifiedName(); |
| if (importFQN != null) { |
| return Collections.singleton(importFQN); |
| } |
| } |
| else { |
| List<String> res = new ArrayList<String>(); |
| // iterate through * |
| for (PsiImportStatementBase imp : importList.getAllImportStatements()) { |
| if (imp.isOnDemand() && imp instanceof PsiImportStatement) { |
| res.add(((PsiImportStatement)imp).getQualifiedName() + "." + className); |
| } |
| } |
| |
| return res; |
| } |
| } |
| } |
| return Collections.emptyList(); |
| } |
| } |