From 44b75503a14f5a6d73ecb2c0d8760bf8eec7b715 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Wed, 5 Jul 2017 19:40:41 +0300 Subject: [PATCH] PY-25076 Method may be static checks compares only unqualified references with "self" --- .../python/inspections/PyMethodMayBeStaticInspection.java | 6 ++++-- .../PyMethodMayBeStaticInspection/attributeNamedSelf.py | 7 +++++++ .../inspections/PyMethodMayBeStaticInspectionTest.java | 5 +++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 python/testData/inspections/PyMethodMayBeStaticInspection/attributeNamedSelf.py diff --git a/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java b/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java index 9c6f31d6bf2b..d2196dba44d1 100644 --- a/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java @@ -113,8 +113,10 @@ public class PyMethodMayBeStaticInspection extends PyInspection { @Override public void visitPyReferenceExpression(PyReferenceExpression node) { - super.visitPyReferenceExpression(node); - if (selfName.equals(node.getName())) { + if (node.isQualified()) { + super.visitPyReferenceExpression(node); + } + else if (selfName.equals(node.getName())) { mayBeStatic[0] = false; } } diff --git a/python/testData/inspections/PyMethodMayBeStaticInspection/attributeNamedSelf.py b/python/testData/inspections/PyMethodMayBeStaticInspection/attributeNamedSelf.py new file mode 100644 index 000000000000..9b0a0a526400 --- /dev/null +++ b/python/testData/inspections/PyMethodMayBeStaticInspection/attributeNamedSelf.py @@ -0,0 +1,7 @@ +x = object() +x.self = 42 + + +class C: + def method(self): + print(x.self) diff --git a/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java index 1ec0cf7d0a7d..ddf3d5690748 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java @@ -115,6 +115,11 @@ public class PyMethodMayBeStaticInspectionTest extends PyTestCase { doTest(); } + // PY-25076 + public void testAttributeNamedSelf() { + doTest(); + } + private void doTest() { myFixture.configureByFile(getTestName(true) + ".py"); myFixture.enableInspections(PyMethodMayBeStaticInspection.class);