diff --git a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyFinalInspection.kt b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyFinalInspection.kt index c13214f1b52b..856ee33f0b6c 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyFinalInspection.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyFinalInspection.kt @@ -323,7 +323,11 @@ class PyFinalInspection : PyInspection() { val scopeOwner = ScopeUtil.getScopeOwner(target); if (!target.isQualified && scopeOwner != null) { // multiResolve finds last assignments, but we need all earlier assignments - resolved += ControlFlowCache.getScope(scopeOwner).getNamedElements(target.referencedName, false) + val scope = ControlFlowCache.getScope(scopeOwner) + resolved += scope.getNamedElements(target.referencedName, false) + target.name?.let { name -> + resolved += scope.importedNameDefiners.flatMap { it.multiResolveName(name).mapNotNull { it.element } } + } } diff --git a/python/testData/inspections/PyFinalInspection/ImportedModuleFinalReassignment/a.py b/python/testData/inspections/PyFinalInspection/ImportedModuleFinalReassignment/a.py index a42972ee18ed..a42037d336c3 100644 --- a/python/testData/inspections/PyFinalInspection/ImportedModuleFinalReassignment/a.py +++ b/python/testData/inspections/PyFinalInspection/ImportedModuleFinalReassignment/a.py @@ -2,4 +2,4 @@ import b b.a = 2 from b import a -a = 3 \ No newline at end of file +a = 3 \ No newline at end of file diff --git a/python/testData/inspections/PyFinalInspection/ImportedVariableFinalReassignment/a.py b/python/testData/inspections/PyFinalInspection/ImportedVariableFinalReassignment/a.py new file mode 100644 index 000000000000..40b55ba14cef --- /dev/null +++ b/python/testData/inspections/PyFinalInspection/ImportedVariableFinalReassignment/a.py @@ -0,0 +1,5 @@ +from b import * + +print(BAR) + +BAR = 43 \ No newline at end of file diff --git a/python/testData/inspections/PyFinalInspection/ImportedVariableFinalReassignment/b.py b/python/testData/inspections/PyFinalInspection/ImportedVariableFinalReassignment/b.py new file mode 100644 index 000000000000..0f44cc453c55 --- /dev/null +++ b/python/testData/inspections/PyFinalInspection/ImportedVariableFinalReassignment/b.py @@ -0,0 +1,3 @@ +from typing import Final + +BAR: Final = 42 \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyFinalInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyFinalInspectionTest.java index 73ec3daf6eec..66081fe1b3f0 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyFinalInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyFinalInspectionTest.java @@ -8,6 +8,11 @@ import org.jetbrains.annotations.NotNull; public class PyFinalInspectionTest extends PyInspectionTestCase { + // PY-79743 + public void testImportedVariableFinalReassignment() { + doMultiFileTest(); + } + // PY-34945 public void testSubclassingFinalClass() { doMultiFileTest();