diff --git a/python/src/com/jetbrains/python/psi/resolve/PythonBuiltinReferenceResolveProvider.java b/python/src/com/jetbrains/python/psi/resolve/PythonBuiltinReferenceResolveProvider.java index b1dcd9b58840..3f4f0ada9a19 100644 --- a/python/src/com/jetbrains/python/psi/resolve/PythonBuiltinReferenceResolveProvider.java +++ b/python/src/com/jetbrains/python/psi/resolve/PythonBuiltinReferenceResolveProvider.java @@ -65,6 +65,10 @@ public class PythonBuiltinReferenceResolveProvider implements PyReferenceResolve } } + if (!element.isQualified() && "__builtins__".equals(referencedName)) { + result.add(new ImportedResolveResult(PyBuiltinCache.getInstance(element).getBuiltinsFile(), RatedResolveResult.RATE_NORMAL, null)); + } + return result; } } diff --git a/python/testData/resolve/DunderBuiltins.py b/python/testData/resolve/DunderBuiltins.py new file mode 100644 index 000000000000..747d9b2c5d40 --- /dev/null +++ b/python/testData/resolve/DunderBuiltins.py @@ -0,0 +1,2 @@ +print(__builtins__) +# \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/Py3ResolveTest.java b/python/testSrc/com/jetbrains/python/Py3ResolveTest.java index e622a3ebef30..3f0038f70025 100644 --- a/python/testSrc/com/jetbrains/python/Py3ResolveTest.java +++ b/python/testSrc/com/jetbrains/python/Py3ResolveTest.java @@ -22,6 +22,7 @@ import com.intellij.testFramework.LightProjectDescriptor; import com.jetbrains.python.fixtures.PyResolveTestCase; import com.jetbrains.python.fixtures.PyTestCase; import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.impl.PythonLanguageLevelPusher; import com.jetbrains.python.psi.types.TypeEvalContext; @@ -592,4 +593,10 @@ public class Py3ResolveTest extends PyResolveTestCase { } ); } + + // PY-30512 + public void testDunderBuiltins() { + final PsiElement element = doResolve(); + assertEquals(PyBuiltinCache.getInstance(myFixture.getFile()).getBuiltinsFile(), element); + } } diff --git a/python/testSrc/com/jetbrains/python/PyResolveTest.java b/python/testSrc/com/jetbrains/python/PyResolveTest.java index 892c1880ca46..5c04c0767613 100644 --- a/python/testSrc/com/jetbrains/python/PyResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyResolveTest.java @@ -9,6 +9,7 @@ import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil; import com.jetbrains.python.documentation.docstrings.DocStringFormat; import com.jetbrains.python.fixtures.PyResolveTestCase; import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.resolve.ImportedResolveResult; import com.jetbrains.python.psi.resolve.PyResolveContext; @@ -1336,4 +1337,10 @@ public class PyResolveTest extends PyResolveTestCase { public void testUnboundVariableOnClassLevelNotDeclaredBelow() { assertResolvesTo(PyNamedParameter.class, "foo"); } + + // PY-30512 + public void testDunderBuiltins() { + final PsiElement element = doResolve(); + assertEquals(PyBuiltinCache.getInstance(myFixture.getFile()).getBuiltinsFile(), element); + } }