diff --git a/plugins/sh/gen/com/intellij/sh/psi/ShVariable.java b/plugins/sh/gen/com/intellij/sh/psi/ShVariable.java index 7c7af994331d..ed29d8059cdc 100644 --- a/plugins/sh/gen/com/intellij/sh/psi/ShVariable.java +++ b/plugins/sh/gen/com/intellij/sh/psi/ShVariable.java @@ -4,10 +4,14 @@ package com.intellij.sh.psi; import java.util.List; import org.jetbrains.annotations.*; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiReference; public interface ShVariable extends ShLiteral { @NotNull PsiElement getVar(); + @NotNull + PsiReference[] getReferences(); + } diff --git a/plugins/sh/gen/com/intellij/sh/psi/impl/ShVariableImpl.java b/plugins/sh/gen/com/intellij/sh/psi/impl/ShVariableImpl.java index 92234c800504..baa9958c422b 100644 --- a/plugins/sh/gen/com/intellij/sh/psi/impl/ShVariableImpl.java +++ b/plugins/sh/gen/com/intellij/sh/psi/impl/ShVariableImpl.java @@ -9,6 +9,7 @@ import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.util.PsiTreeUtil; import static com.intellij.sh.ShTypes.*; import com.intellij.sh.psi.*; +import com.intellij.psi.PsiReference; public class ShVariableImpl extends ShLiteralImpl implements ShVariable { @@ -31,4 +32,10 @@ public class ShVariableImpl extends ShLiteralImpl implements ShVariable { return findNotNullChildByType(VAR); } + @Override + @NotNull + public PsiReference[] getReferences() { + return ShPsiImplUtil.getReferences(this); + } + } diff --git a/plugins/sh/grammar/sh.bnf b/plugins/sh/grammar/sh.bnf index 2ee17914b3f7..69f16347bc34 100644 --- a/plugins/sh/grammar/sh.bnf +++ b/plugins/sh/grammar/sh.bnf @@ -298,7 +298,10 @@ literal ::= word | string | number | variable { } private not_lvalue ::= '!' | vars | '$' | brace_expansion | 'file descriptor' brace_expansion ::= '{' (word | brace_expansion)* '}' -variable ::= var {extends=literal} +variable ::= var { + methods=[getReferences] + extends=literal +} number ::= int | hex | octal {extends=literal} string ::= (OPEN_QUOTE (STRING_CONTENT | vars | <>)* CLOSE_QUOTE) | RAW_STRING { diff --git a/plugins/sh/src/com/intellij/sh/ShSupport.java b/plugins/sh/src/com/intellij/sh/ShSupport.java index 82dcb8caefb1..f0c577e2aae8 100644 --- a/plugins/sh/src/com/intellij/sh/ShSupport.java +++ b/plugins/sh/src/com/intellij/sh/ShSupport.java @@ -5,6 +5,8 @@ import com.intellij.execution.Executor; import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.openapi.components.ServiceManager; +import com.intellij.psi.PsiReference; +import com.intellij.sh.psi.ShVariable; import com.intellij.sh.run.ShRunConfiguration; import com.intellij.sh.run.ShRunConfigurationProfileState; import org.jetbrains.annotations.NotNull; @@ -21,6 +23,10 @@ public interface ShSupport { @NotNull ExecutionEnvironment environment, @NotNull ShRunConfiguration configuration); + @NotNull + PsiReference[] getVariableReferences(@NotNull ShVariable v); + + class Impl implements ShSupport { @Override public boolean isExternalFormatterEnabled() { return true; } @@ -35,5 +41,11 @@ public interface ShSupport { @NotNull ShRunConfiguration configuration) { return new ShRunConfigurationProfileState(environment.getProject(), configuration); } + + @NotNull + @Override + public PsiReference[] getVariableReferences(@NotNull ShVariable v) { + return PsiReference.EMPTY_ARRAY; + } } } \ No newline at end of file diff --git a/plugins/sh/src/com/intellij/sh/psi/impl/ShPsiImplUtil.java b/plugins/sh/src/com/intellij/sh/psi/impl/ShPsiImplUtil.java index 85dbd754cd4f..ae1177b60da8 100644 --- a/plugins/sh/src/com/intellij/sh/psi/impl/ShPsiImplUtil.java +++ b/plugins/sh/src/com/intellij/sh/psi/impl/ShPsiImplUtil.java @@ -3,8 +3,10 @@ package com.intellij.sh.psi.impl; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry; +import com.intellij.sh.ShSupport; import com.intellij.sh.psi.ShLiteral; import com.intellij.sh.psi.ShString; +import com.intellij.sh.psi.ShVariable; import org.jetbrains.annotations.NotNull; public class ShPsiImplUtil { @@ -14,4 +16,9 @@ public class ShPsiImplUtil { ? ReferenceProvidersRegistry.getReferencesFromProviders(o) : PsiReference.EMPTY_ARRAY; } + + @NotNull + static PsiReference[] getReferences(@NotNull ShVariable o) { + return ShSupport.getInstance().getVariableReferences(o); + } }