diff --git a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java index 5c38699137c7..32e52a3eb175 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java @@ -304,9 +304,9 @@ public class PyNamedParameterImpl extends PyBaseElementImpl attributes = collectUsedAttributes(context); - if (!attributes.isEmpty()) { - return new PyStructuralType(attributes, true); + final PyType typeFromUsages = getTypeFromUsages(context); + if (typeFromUsages != null) { + return typeFromUsages; } } } @@ -319,12 +319,15 @@ public class PyNamedParameterImpl extends PyBaseElementImpl collectUsedAttributes(@NotNull final TypeEvalContext context) { - final Set result = new LinkedHashSet<>(); + @Nullable + private PyType getTypeFromUsages(@NotNull TypeEvalContext context) { + final Set usedAttributes = new LinkedHashSet<>(); + final ScopeOwner owner = ScopeUtil.getScopeOwner(this); final String name = getName(); + final Ref parameterWasReassigned = Ref.create(false); + final Ref noneComparison = Ref.create(false); if (owner != null && name != null) { owner.accept(new PyRecursiveElementVisitor() { @@ -411,6 +414,21 @@ public class PyNamedParameterImpl extends PyBaseElementImpl false") private boolean isReferenceToParameter(@Nullable PsiElement element) { if (element == null) return false; @@ -419,7 +437,13 @@ public class PyNamedParameterImpl extends PyBaseElementImplNone)\n" + + "func32(None)\n" + + "func33(None)\n" + + "func34(None)"); + } + // PY-29704 public void testPassingAbstractMethodResult() { doTestByText("import abc\n" +