blob: 98e5a6709a5c999ca285166e1a754a3372e473b6 [file] [log] [blame]
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();
}
}