diff --git a/python/psi-api/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java b/python/psi-api/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java index ce5f560b56d9..798ec70e421f 100644 --- a/python/psi-api/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java +++ b/python/psi-api/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java @@ -16,4 +16,5 @@ public interface PythonDialectsTokenSetContributor { TokenSet getParameterTokens(); TokenSet getFunctionDeclarationTokens(); TokenSet getUnbalancedBracesRecoveryTokens(); + TokenSet getReferenceExpressionTokens(); } diff --git a/python/src/com/jetbrains/python/PyElementTypes.java b/python/src/com/jetbrains/python/PyElementTypes.java index a76d47d1184e..7b58d74ac685 100644 --- a/python/src/com/jetbrains/python/PyElementTypes.java +++ b/python/src/com/jetbrains/python/PyElementTypes.java @@ -72,8 +72,6 @@ public interface PyElementTypes { PyElementType EMPTY_EXPRESSION = new PyElementType("EMPTY_EXPRESSION", PyEmptyExpressionImpl.class); PyElementType REFERENCE_EXPRESSION = new PyElementType("REFERENCE_EXPRESSION", PyReferenceExpressionImpl.class); - TokenSet REFERENCE_EXPRESSION_SET = TokenSet.create(REFERENCE_EXPRESSION); - PyStubElementType TARGET_EXPRESSION = new PyTargetExpressionElementType(); PyElementType INTEGER_LITERAL_EXPRESSION = new PyElementType("INTEGER_LITERAL_EXPRESSION", PyNumericLiteralExpressionImpl.class); PyElementType FLOAT_LITERAL_EXPRESSION = new PyElementType("FLOAT_LITERAL_EXPRESSION", PyNumericLiteralExpressionImpl.class); diff --git a/python/src/com/jetbrains/python/PythonDialectsTokenSetProvider.java b/python/src/com/jetbrains/python/PythonDialectsTokenSetProvider.java index 469f6206a549..1e0da69a7807 100644 --- a/python/src/com/jetbrains/python/PythonDialectsTokenSetProvider.java +++ b/python/src/com/jetbrains/python/PythonDialectsTokenSetProvider.java @@ -16,6 +16,7 @@ public class PythonDialectsTokenSetProvider { private final TokenSet myParameterTokens; private final TokenSet myFunctionDeclarationTokens; private final TokenSet myUnbalancedBracesRecoveryTokens; + private final TokenSet myReferenceExpressionTokens; private PythonDialectsTokenSetProvider() { TokenSet stmts = TokenSet.EMPTY; @@ -25,6 +26,7 @@ public class PythonDialectsTokenSetProvider { TokenSet parameters = TokenSet.EMPTY; TokenSet functionDeclarations = TokenSet.EMPTY; TokenSet recoveryTokens = TokenSet.EMPTY; + TokenSet referenceExpressions = TokenSet.EMPTY; for(PythonDialectsTokenSetContributor contributor: Extensions.getExtensions(PythonDialectsTokenSetContributor.EP_NAME)) { stmts = TokenSet.orSet(stmts, contributor.getStatementTokens()); exprs = TokenSet.orSet(exprs, contributor.getExpressionTokens()); @@ -33,6 +35,7 @@ public class PythonDialectsTokenSetProvider { parameters = TokenSet.orSet(parameters, contributor.getParameterTokens()); functionDeclarations = TokenSet.orSet(functionDeclarations, contributor.getFunctionDeclarationTokens()); recoveryTokens = TokenSet.orSet(recoveryTokens, contributor.getUnbalancedBracesRecoveryTokens()); + referenceExpressions = TokenSet.orSet(referenceExpressions, contributor.getReferenceExpressionTokens()); } myStatementTokens = stmts; myExpressionTokens = exprs; @@ -41,6 +44,7 @@ public class PythonDialectsTokenSetProvider { myParameterTokens = parameters; myFunctionDeclarationTokens = functionDeclarations; myUnbalancedBracesRecoveryTokens = recoveryTokens; + myReferenceExpressionTokens = referenceExpressions; } public TokenSet getStatementTokens() { @@ -70,4 +74,8 @@ public class PythonDialectsTokenSetProvider { public TokenSet getUnbalancedBracesRecoveryTokens() { return myUnbalancedBracesRecoveryTokens; } + + public TokenSet getReferenceExpressionTokens() { + return myReferenceExpressionTokens; + } } diff --git a/python/src/com/jetbrains/python/PythonTokenSetContributor.java b/python/src/com/jetbrains/python/PythonTokenSetContributor.java index e47eec8bfa07..878043dcb078 100644 --- a/python/src/com/jetbrains/python/PythonTokenSetContributor.java +++ b/python/src/com/jetbrains/python/PythonTokenSetContributor.java @@ -70,4 +70,9 @@ public class PythonTokenSetContributor implements PythonDialectsTokenSetContribu return TokenSet.create(DEF_KEYWORD, CLASS_KEYWORD, RETURN_KEYWORD, WITH_KEYWORD, WHILE_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, RAISE_KEYWORD, TRY_KEYWORD, EXCEPT_KEYWORD, FINALLY_KEYWORD); } + + @Override + public TokenSet getReferenceExpressionTokens() { + return TokenSet.create(REFERENCE_EXPRESSION); + } } diff --git a/python/src/com/jetbrains/python/psi/impl/PyDecoratorImpl.java b/python/src/com/jetbrains/python/psi/impl/PyDecoratorImpl.java index cb48d7fba867..efa10ccd8128 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyDecoratorImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyDecoratorImpl.java @@ -7,6 +7,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PyTokenTypes; +import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.resolve.PyResolveUtil; @@ -47,7 +48,7 @@ public class PyDecoratorImpl extends StubBasedPsiElementBase im } public boolean isBuiltin() { - ASTNode node = getNode().findChildByType(PyElementTypes.REFERENCE_EXPRESSION_SET); + ASTNode node = getNode().findChildByType(PythonDialectsTokenSetProvider.INSTANCE.getReferenceExpressionTokens()); if (node != null) { PyReferenceExpression ref = (PyReferenceExpression)node.getPsi(); PsiElement target = ref.getReference().resolve(); diff --git a/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java index 6601f24d47b1..b43511d0d442 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java @@ -8,6 +8,7 @@ import com.intellij.util.ArrayFactory; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PyNames; import com.jetbrains.python.PyTokenTypes; +import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.resolve.ResolveImportUtil; import com.jetbrains.python.psi.stubs.PyFromImportStatementStub; @@ -49,7 +50,7 @@ public class PyFromImportStatementImpl extends PyBaseElementImpl @Nullable public PyReferenceExpression getImportReferenceExpression() { - final ASTNode node = getNode().findChildByType(PyElementTypes.REFERENCE_EXPRESSION_SET); + final ASTNode node = getNode().findChildByType(PythonDialectsTokenSetProvider.INSTANCE.getReferenceExpressionTokens()); return node == null ? null : (PyReferenceExpression) node.getPsi(); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java index 3e702bf69ef5..63e2e1902feb 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java @@ -6,11 +6,6 @@ import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.util.Ref; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; -import com.jetbrains.cython.CythonLanguageDialect; -import com.jetbrains.cython.psi.CythonCImportElement; -import com.jetbrains.cython.psi.CythonFromCImportStatement; -import com.jetbrains.cython.psi.CythonImportReference; -import com.jetbrains.cython.psi.CythonReference; import com.jetbrains.python.PyNames; import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.PythonDialectsTokenSetProvider; @@ -56,12 +51,6 @@ public class PyReferenceExpressionImpl extends PyElementImpl implements PyRefere final PyExpression qualifier = getQualifier(); // Handle import reference - final boolean inCythonFile = CythonLanguageDialect.isInsideCythonFile(this); - if (inCythonFile) { - if (PsiTreeUtil.getParentOfType(this, CythonCImportElement.class, CythonFromCImportStatement.class) != null) { - return new CythonImportReference(this, context); - } - } final PsiElement importParent = PsiTreeUtil.getParentOfType(this, PyImportElement.class, PyFromImportStatement.class); if (importParent != null) { return PyImportReference.forElement(this, importParent, context); @@ -80,10 +69,6 @@ public class PyReferenceExpressionImpl extends PyElementImpl implements PyRefere return new PyQualifiedReference(this, context); } - if (inCythonFile) { - return new CythonReference(this, context); - } - return new PyReferenceImpl(this, context); } diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java index 6c61d3ffd357..4f004f594be9 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java @@ -12,6 +12,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.io.StringRef; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PyNames; +import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.documentation.DocStringUtil; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyQualifiedName; @@ -118,7 +119,7 @@ public class PyTargetExpressionElementType extends PyStubElementType