// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.psi.resolve;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.psi.PyQualifiedExpression;
import com.jetbrains.python.psi.resolve.PyReferenceResolveProvider;
import com.jetbrains.python.psi.resolve.RatedResolveResult;
import com.jetbrains.python.psi.types.TypeEvalContext;
import com.twitter.intellij.pants.index.PantsTargetIndex;
import com.twitter.intellij.pants.util.PantsUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
public class PantsReferenceResolveProvider implements PyReferenceResolveProvider {
@NotNull
@Override
public List<RatedResolveResult> resolveName(@NotNull PyQualifiedExpression expression, @NotNull TypeEvalContext context) {
PsiFile containingFile = expression.getContainingFile();
return PantsUtil.isBUILDFileName(containingFile.getName()) ?
resolvePantsName(expression) :
Collections.<RatedResolveResult>emptyList();
}
private List<RatedResolveResult> resolvePantsName(@NotNull PyQualifiedExpression element) {
final String name = element.getName();
return ContainerUtil.map(
PantsTargetIndex.resolveTargetByName(name, element.getProject()),
new Function<PsiElement, RatedResolveResult>() {
@Override
public RatedResolveResult fun(PsiElement element) {
return new RatedResolveResult(RatedResolveResult.RATE_NORMAL, element);
}
}
);
}
}