// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). package com.twitter.intellij.pants.psi.reference; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.psi.PsiReferenceProvider; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.ProcessingContext; import com.jetbrains.python.psi.PyKeywordArgument; import com.jetbrains.python.psi.PyListLiteralExpression; import com.jetbrains.python.psi.PyStringLiteralExpression; import org.jetbrains.annotations.NotNull; import java.util.List; public class PantsTargetPathReferenceProvider extends PsiReferenceProvider { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) { final PyStringLiteralExpression stringLiteral = PsiTreeUtil.getParentOfType(element, PyStringLiteralExpression.class, false); final PsiElement parent = stringLiteral != null ? stringLiteral.getParent() : null; if (!(parent instanceof PyListLiteralExpression)) { return PsiReference.EMPTY_ARRAY; } final PsiElement parentParent = parent.getParent(); if (parentParent instanceof PyKeywordArgument && "dependencies".equalsIgnoreCase(((PyKeywordArgument)parentParent).getKeyword())) { return getReferences(stringLiteral); } return PsiReference.EMPTY_ARRAY; } @NotNull private PsiReference[] getReferences(PyStringLiteralExpression expression) { final List<PsiReference> references = new PantsTargetReferenceSet(expression).getReferences(); return ArrayUtil.toObjectArray(references, PsiReference.class); } }