| package org.jetbrains.idea.maven.plugins.api; |
| |
| import com.intellij.openapi.util.TextRange; |
| import com.intellij.psi.*; |
| import com.intellij.util.ProcessingContext; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.idea.maven.dom.MavenPropertyResolver; |
| import org.jetbrains.idea.maven.dom.model.MavenDomConfiguration; |
| |
| import java.util.Arrays; |
| import java.util.regex.Matcher; |
| |
| /** |
| * @author Sergey Evdokimov |
| */ |
| public class MavenFixedValueReferenceProvider implements MavenParamReferenceProvider, MavenSoftAwareReferenceProvider { |
| |
| private final String[] myValues; |
| |
| private boolean mySoft = false; |
| |
| public MavenFixedValueReferenceProvider(String[] values) { |
| myValues = values; |
| } |
| |
| @Override |
| public PsiReference[] getReferencesByElement(@NotNull PsiElement element, |
| @NotNull MavenDomConfiguration domCfg, |
| @NotNull ProcessingContext context) { |
| ElementManipulator<PsiElement> manipulator = ElementManipulators.getManipulator(element); |
| TextRange range = manipulator.getRangeInElement(element); |
| |
| String text = range.substring(element.getText()); |
| Matcher matcher = MavenPropertyResolver.PATTERN.matcher(text); |
| if (matcher.find()) { |
| return PsiReference.EMPTY_ARRAY; |
| } |
| |
| return new PsiReference[] { |
| new PsiReferenceBase<PsiElement>(element, mySoft) { |
| @Nullable |
| @Override |
| public PsiElement resolve() { |
| if (mySoft) { |
| return null; |
| } |
| |
| if (Arrays.asList(myValues).contains(getValue())) { |
| return getElement(); |
| } |
| |
| return null; |
| } |
| |
| @NotNull |
| @Override |
| public Object[] getVariants() { |
| return myValues; |
| } |
| } |
| }; |
| } |
| |
| @Override |
| public void setSoft(boolean soft) { |
| mySoft = soft; |
| } |
| } |