[pycharm] prevent propagation of PyNarrowedType

GitOrigin-RevId: fdfd8e7563f36768b050efbf5ed8f259db994afd
This commit is contained in:
Vladimir Koshelev
2024-07-17 15:22:11 +02:00
committed by intellij-monorepo-bot
parent a4b42aa71f
commit a40425e28a
3 changed files with 34 additions and 5 deletions

View File

@@ -1925,6 +1925,16 @@ public final class PyTypingTypeProvider extends PyTypeProviderWithCustomContext<
return returnType;
}
@Nullable
public static PyType removeNarrowedTypeIfNeeded(@Nullable PyType type) {
if (type instanceof PyNarrowedType pyNarrowedType) {
return PyBuiltinCache.getInstance(pyNarrowedType.getOriginal()).getBoolType();
}
else {
return type;
}
}
@Nullable
private static PyType wrapInCoroutineType(@Nullable PyType returnType, @NotNull PsiElement resolveAnchor) {
final PyClass coroutine = PyPsiFacade.getInstance(resolveAnchor.getProject()).createClassByQName(COROUTINE, resolveAnchor);

View File

@@ -6,7 +6,6 @@ import com.intellij.navigation.ItemPresentation;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiComment;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.search.LocalSearchScope;
@@ -17,13 +16,11 @@ import com.intellij.psi.util.*;
import com.intellij.ui.IconManager;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.ObjectUtils;
import com.intellij.util.PlatformIcons;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.JBIterable;
import com.jetbrains.python.PyNames;
import com.jetbrains.python.PyStubElementTypes;
import com.jetbrains.python.ast.impl.PyUtilCore;
import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache;
import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
@@ -151,7 +148,7 @@ public class PyFunctionImpl extends PyBaseElementImpl<PyFunctionStub> implements
for (PyTypeProvider typeProvider : PyTypeProvider.EP_NAME.getExtensionList()) {
final Ref<PyType> returnTypeRef = typeProvider.getReturnType(this, context);
if (returnTypeRef != null) {
return derefType(returnTypeRef, typeProvider);
return PyTypingTypeProvider.removeNarrowedTypeIfNeeded(derefType(returnTypeRef, typeProvider));
}
}
@@ -165,7 +162,7 @@ public class PyFunctionImpl extends PyBaseElementImpl<PyFunctionStub> implements
inferredType = getReturnStatementType(context);
}
}
return PyTypingTypeProvider.toAsyncIfNeeded(this, inferredType);
return PyTypingTypeProvider.removeNarrowedTypeIfNeeded(PyTypingTypeProvider.toAsyncIfNeeded(this, inferredType));
}
@Override