diff --git a/python/python-psi-api/BUILD.bazel b/python/python-psi-api/BUILD.bazel index f4a2b0f04a23..3ce7b05a5f2e 100644 --- a/python/python-psi-api/BUILD.bazel +++ b/python/python-psi-api/BUILD.bazel @@ -25,7 +25,6 @@ jvm_library( "//python/python-syntax-core:syntax-core", "@lib//:kotlin-stdlib", "@lib//:jetbrains-kotlin-annotations-jvm", - "//platform/editor-ui-api:editor-ui", ], exports = [ "//python/python-parser:parser", diff --git a/python/python-psi-api/intellij.python.psi.iml b/python/python-psi-api/intellij.python.psi.iml index 6dac8d55083c..3745762eb78b 100644 --- a/python/python-psi-api/intellij.python.psi.iml +++ b/python/python-psi-api/intellij.python.psi.iml @@ -21,6 +21,5 @@ - \ No newline at end of file diff --git a/python/python-psi-api/resources/intellij.python.psi.xml b/python/python-psi-api/resources/intellij.python.psi.xml index 1f563b87e08e..46fa08063dce 100644 --- a/python/python-psi-api/resources/intellij.python.psi.xml +++ b/python/python-psi-api/resources/intellij.python.psi.xml @@ -42,7 +42,7 @@ interface="com.jetbrains.python.documentation.PythonDocumentationQuickInfoProvider" dynamic="true"/> diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/PyInstantTypeProvider.kt b/python/python-psi-api/src/com/jetbrains/python/psi/PyInstantTypeProvider.kt index 3ece10cd29cd..55dcd13b46c4 100644 --- a/python/python-psi-api/src/com/jetbrains/python/psi/PyInstantTypeProvider.kt +++ b/python/python-psi-api/src/com/jetbrains/python/psi/PyInstantTypeProvider.kt @@ -4,7 +4,4 @@ package com.jetbrains.python.psi import org.jetbrains.annotations.ApiStatus @ApiStatus.Internal -/** - * Does not require [com.jetbrains.python.psi.types.TypeEvalContext] for resolving the type - */ interface PyInstantTypeProvider : PyTypedElement \ No newline at end of file diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/PyWrapperTypeProvider.kt b/python/python-psi-api/src/com/jetbrains/python/psi/PyWrapperTypeProvider.kt deleted file mode 100644 index fe1249a151a6..000000000000 --- a/python/python-psi-api/src/com/jetbrains/python/psi/PyWrapperTypeProvider.kt +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.python.psi - -import org.jetbrains.annotations.ApiStatus - -@ApiStatus.Internal -/** - * Fast wrapper for another element type. - * These elements can be easily calculated if a type of wrapped element is known. - */ -interface PyWrapperTypeProvider : PyTypedElement \ No newline at end of file diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/types/TypeEvalContext.java b/python/python-psi-api/src/com/jetbrains/python/psi/types/TypeEvalContext.java index 12b7b7c55978..441b3ae3b12e 100644 --- a/python/python-psi-api/src/com/jetbrains/python/psi/types/TypeEvalContext.java +++ b/python/python-psi-api/src/com/jetbrains/python/psi/types/TypeEvalContext.java @@ -2,11 +2,11 @@ package com.jetbrains.python.psi.types; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.RecursionManager; -import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -19,8 +19,6 @@ import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyTypeProvider; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.resolve.RatedResolveResult; -import com.jetbrains.python.psi.types.external.ExternalPyTypeResolver; -import com.jetbrains.python.psi.types.external.ExternalPyTypeResolverProvider; import com.jetbrains.python.pyi.PyiLanguageDialect; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -55,8 +53,8 @@ public sealed class TypeEvalContext { private final ThreadLocal myProcessingContext = ThreadLocal.withInitial(ProcessingContext::new); - private Ref externalTypeResolver = null; protected final Map myEvaluated = getConcurrentMapForCaching(); + protected final Map myExternalEvaluated = getConcurrentMapForCaching(); protected final Map myEvaluatedReturn = getConcurrentMapForCaching(); protected final Map, PyType> contextTypeCache = getConcurrentMapForCaching(); @@ -222,7 +220,7 @@ public sealed class TypeEvalContext { return null; } AssumptionContext context = new AssumptionContext(this, element, type); - R result; + R result = null; try { result = func.apply(context); } @@ -251,7 +249,11 @@ public sealed class TypeEvalContext { assertValid(cachedType, element); return cachedType; } - + final PyType cachedExternalType = myExternalEvaluated.get(element); + if (cachedExternalType != null) { + assertValid(cachedExternalType, element); + return cachedExternalType; + } return null; } @@ -264,6 +266,11 @@ public sealed class TypeEvalContext { return null; } + @ApiStatus.Experimental + public void putExternalType(PyTypedElement element, PyType type) { + myExternalEvaluated.put(element, type == null ? PyNullType.INSTANCE : type); + } + private static boolean isLibraryElement(@NotNull PsiElement element) { PsiFile containingFile = element.getContainingFile(); VirtualFile vFile = containingFile == null ? null : containingFile.getOriginalFile().getVirtualFile(); @@ -298,28 +305,29 @@ public sealed class TypeEvalContext { if (knownType != null) { return knownType == PyNullType.INSTANCE ? null : knownType; } - - PsiFile file = element.getContainingFile(); - - //lateinit because there is no project for this class - if (file != null && externalTypeResolver == null) { - externalTypeResolver = Ref.create(ExternalPyTypeResolverProvider.createTypeResolver(file.getProject())); - } - return RecursionManager.doPreventingRecursion( Pair.create(element, this), false, () -> { - ExternalPyTypeResolver externalPyTypeResolver = externalTypeResolver.get(); - PyType type; - - if (externalPyTypeResolver != null && externalPyTypeResolver.isSupportedForResolve(element)) { - type = externalPyTypeResolver.resolveType(element, this, this instanceof LibraryTypeEvalContext); - } - else { - type = element.getType(this, Key.INSTANCE); + // Try external providers first + for (var provider : TypeEvalExternalTypeProvider.EP_NAME.getExtensionList()) { + try { + var provided = provider.provideType(element, this); + if (provided != null) { + var type = provided.get(); + myExternalEvaluated.put(element, type == null ? PyNullType.INSTANCE : type); + return type; + } + } + catch (ProcessCanceledException e) { + throw e; + } + catch (Exception e) { + logger.warn("Exception during external type provider " + provider.getClass().getName(), e); + } } + PyType type = element.getType(this, Key.INSTANCE); assertValid(type, element); myEvaluated.put(element, type == null ? PyNullType.INSTANCE : type); return type; diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/types/TypeEvalExternalTypeProvider.kt b/python/python-psi-api/src/com/jetbrains/python/psi/types/TypeEvalExternalTypeProvider.kt new file mode 100644 index 000000000000..b46fc04f625c --- /dev/null +++ b/python/python-psi-api/src/com/jetbrains/python/psi/types/TypeEvalExternalTypeProvider.kt @@ -0,0 +1,21 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.psi.types + +import com.intellij.openapi.extensions.ExtensionPointName +import com.intellij.openapi.util.Ref +import com.intellij.psi.PsiElement +import com.jetbrains.python.psi.PyTypedElement + +/** + * An external type provider invoked by [TypeEvalContext] to obtain a type from a separate engine. + * Implementations may return `null` if they cannot provide a type for the given element. + */ +interface TypeEvalExternalTypeProvider { + fun provideType(element: PyTypedElement, context: TypeEvalContext): Ref? + + companion object { + @JvmField + val EP_NAME: ExtensionPointName = + ExtensionPointName.create("Pythonid.typeEvalExternalTypeProvider") + } +} diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/types/external/ExternalPyTypeResolver.kt b/python/python-psi-api/src/com/jetbrains/python/psi/types/external/ExternalPyTypeResolver.kt deleted file mode 100644 index 29e569e67576..000000000000 --- a/python/python-psi-api/src/com/jetbrains/python/psi/types/external/ExternalPyTypeResolver.kt +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.python.psi.types.external - -import com.jetbrains.python.psi.PyTypedElement -import com.jetbrains.python.psi.types.PyType -import com.jetbrains.python.psi.types.TypeEvalContext -import org.jetbrains.annotations.ApiStatus - -@ApiStatus.Internal -interface ExternalPyTypeResolver { - fun isSupportedForResolve(pyTypedElement: PyTypedElement): Boolean - fun resolveType(pyTypedElement: PyTypedElement, evalContext: TypeEvalContext, isLibrary: Boolean): PyType? -} diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/types/external/ExternalPyTypeResolverProvider.kt b/python/python-psi-api/src/com/jetbrains/python/psi/types/external/ExternalPyTypeResolverProvider.kt deleted file mode 100644 index 3d3b01f5d875..000000000000 --- a/python/python-psi-api/src/com/jetbrains/python/psi/types/external/ExternalPyTypeResolverProvider.kt +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.python.psi.types.external - -import com.intellij.openapi.extensions.ExtensionPointName -import com.intellij.openapi.project.Project -import org.jetbrains.annotations.ApiStatus - -/** - * An external type provider invoked by [com.jetbrains.python.psi.types.TypeEvalContext] to obtain a type from a separate engine. - * Implementations may return `null` if they cannot provide a type for the given element. - */ -@ApiStatus.Internal -interface ExternalPyTypeResolverProvider { - fun createResolver(project: Project): ExternalPyTypeResolver? = null - - companion object { - private val EP_NAME: ExtensionPointName = - ExtensionPointName.Companion.create("Pythonid.typeEvalExternalTypeProvider") - - @JvmStatic - @ApiStatus.Internal - fun createTypeResolver(project: Project): ExternalPyTypeResolver? { - return EP_NAME.extensionList.firstNotNullOfOrNull { it.createResolver(project) } - } - } -} \ No newline at end of file diff --git a/python/python-psi-impl/src/com/jetbrains/python/PyCustomType.java b/python/python-psi-impl/src/com/jetbrains/python/PyCustomType.java index 303e4f848c47..a36dc705a2b4 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/PyCustomType.java +++ b/python/python-psi-impl/src/com/jetbrains/python/PyCustomType.java @@ -343,9 +343,4 @@ public final class PyCustomType implements PyClassLikeType { return myFilter.process(pyElement); } } - - @Override - public String toString() { - return "PyCustomType: " + getName(); - } } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyAsPatternImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyAsPatternImpl.java index 6b3ee81ea5fe..4f6b95ac9cdc 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyAsPatternImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyAsPatternImpl.java @@ -3,13 +3,12 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.jetbrains.python.psi.PyAsPattern; import com.jetbrains.python.psi.PyElementVisitor; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PyAsPatternImpl extends PyElementImpl implements PyAsPattern, PyWrapperTypeProvider { +public class PyAsPatternImpl extends PyElementImpl implements PyAsPattern { public PyAsPatternImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyAssignmentExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyAssignmentExpressionImpl.java index b8e5a8e0a9da..45df56480be3 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyAssignmentExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyAssignmentExpressionImpl.java @@ -5,7 +5,6 @@ import com.intellij.lang.ASTNode; import com.jetbrains.python.psi.PyAssignmentExpression; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyTargetExpression; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.ApiStatus; @@ -13,7 +12,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @ApiStatus.Internal -public class PyAssignmentExpressionImpl extends PyElementImpl implements PyAssignmentExpression, PyWrapperTypeProvider { +public class PyAssignmentExpressionImpl extends PyElementImpl implements PyAssignmentExpression { public PyAssignmentExpressionImpl(@NotNull ASTNode astNode) { super(astNode); diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyClassImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyClassImpl.java index 54cbcc39b124..b3a663a11ccd 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyClassImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyClassImpl.java @@ -65,7 +65,7 @@ import static com.jetbrains.python.psi.impl.PyDeprecationUtilKt.extractDeprecati import static java.util.Collections.emptySet; -public class PyClassImpl extends PyBaseElementImpl implements PyClass, PyInstantTypeProvider { +public class PyClassImpl extends PyBaseElementImpl implements PyClass { public static class MROException extends Exception { public MROException(String s) { super(s); diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyConditionalExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyConditionalExpressionImpl.java index 9a43034d891b..d9f7ca701f7b 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyConditionalExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyConditionalExpressionImpl.java @@ -5,14 +5,13 @@ import com.intellij.lang.ASTNode; import com.jetbrains.python.psi.PyConditionalExpression; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.PyUnionType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; -public class PyConditionalExpressionImpl extends PyElementImpl implements PyConditionalExpression, PyWrapperTypeProvider { +public class PyConditionalExpressionImpl extends PyElementImpl implements PyConditionalExpression { public PyConditionalExpressionImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyDictCompExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyDictCompExpressionImpl.java index 5865e6e7a3a8..dfbbe45efda8 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyDictCompExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyDictCompExpressionImpl.java @@ -3,14 +3,17 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.util.SmartList; -import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.PyDictCompExpression; +import com.jetbrains.python.psi.PyElementVisitor; +import com.jetbrains.python.psi.PyExpression; +import com.jetbrains.python.psi.PyKeyValueExpression; import com.jetbrains.python.psi.types.PyCollectionTypeImpl; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; -public class PyDictCompExpressionImpl extends PyComprehensionElementImpl implements PyDictCompExpression, PyWrapperTypeProvider { +public class PyDictCompExpressionImpl extends PyComprehensionElementImpl implements PyDictCompExpression { public PyDictCompExpressionImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFileImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFileImpl.java index 717bf42099d8..eb5fad3f8fcd 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFileImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFileImpl.java @@ -48,7 +48,7 @@ import java.lang.ref.SoftReference; import java.util.*; import java.util.function.Function; -public class PyFileImpl extends PsiFileBase implements PyFile, PyExpression, PyInstantTypeProvider { +public class PyFileImpl extends PsiFileBase implements PyFile, PyExpression { protected volatile @Nullable PyType myType; //private volatile Boolean myAbsoluteImportEnabled; diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyGeneratorExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyGeneratorExpressionImpl.java index 5fe919b384d7..3876bc084728 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyGeneratorExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyGeneratorExpressionImpl.java @@ -20,14 +20,13 @@ import com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyGeneratorExpression; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PyGeneratorExpressionImpl extends PyComprehensionElementImpl implements PyGeneratorExpression, PyWrapperTypeProvider { +public class PyGeneratorExpressionImpl extends PyComprehensionElementImpl implements PyGeneratorExpression { public PyGeneratorExpressionImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyGroupPatternImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyGroupPatternImpl.java index c4924c7aa056..79c47cec1c83 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyGroupPatternImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyGroupPatternImpl.java @@ -3,13 +3,12 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyGroupPattern; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PyGroupPatternImpl extends PyElementImpl implements PyGroupPattern, PyWrapperTypeProvider { +public class PyGroupPatternImpl extends PyElementImpl implements PyGroupPattern { public PyGroupPatternImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyImportedModule.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyImportedModule.java index a2a34409abfa..559b216ab23b 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyImportedModule.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyImportedModule.java @@ -22,7 +22,10 @@ import com.intellij.psi.impl.light.LightElement; import com.intellij.psi.util.QualifiedName; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.PythonLanguage; -import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.PyFile; +import com.jetbrains.python.psi.PyImportElement; +import com.jetbrains.python.psi.PyTypedElement; +import com.jetbrains.python.psi.PyUtil; import com.jetbrains.python.psi.resolve.RatedResolveResult; import com.jetbrains.python.psi.resolve.ResolveImportUtil; import com.jetbrains.python.psi.types.PyImportedModuleType; @@ -35,7 +38,7 @@ import java.util.List; import java.util.Objects; -public class PyImportedModule extends LightElement implements PyTypedElement, PyInstantTypeProvider { +public class PyImportedModule extends LightElement implements PyTypedElement { private final @Nullable PyImportElement myImportElement; private final @NotNull PyFile myContainingFile; private final @NotNull QualifiedName myImportedPrefix; diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeyValueExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeyValueExpressionImpl.java index 872f08900b25..b2c0e0273b0c 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeyValueExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeyValueExpressionImpl.java @@ -5,7 +5,6 @@ import com.intellij.lang.ASTNode; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyKeyValueExpression; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyTupleType; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; @@ -14,7 +13,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Arrays; -public class PyKeyValueExpressionImpl extends PyElementImpl implements PyKeyValueExpression, PyWrapperTypeProvider { +public class PyKeyValueExpressionImpl extends PyElementImpl implements PyKeyValueExpression { public PyKeyValueExpressionImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeywordArgumentImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeywordArgumentImpl.java index 45c8b3f5a6d8..cd69a65983ef 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeywordArgumentImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeywordArgumentImpl.java @@ -12,7 +12,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -public class PyKeywordArgumentImpl extends PyElementImpl implements PyKeywordArgument, PyWrapperTypeProvider { +public class PyKeywordArgumentImpl extends PyElementImpl implements PyKeywordArgument { public PyKeywordArgumentImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeywordPatternImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeywordPatternImpl.java index 4c4b34946f74..135f431a77a7 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeywordPatternImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyKeywordPatternImpl.java @@ -5,14 +5,13 @@ import com.intellij.psi.PsiReference; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyKeywordPattern; import com.jetbrains.python.psi.PyPattern; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.impl.references.PyKeywordPatternReference; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PyKeywordPatternImpl extends PyElementImpl implements PyKeywordPattern, PyWrapperTypeProvider { +public class PyKeywordPatternImpl extends PyElementImpl implements PyKeywordPattern { public PyKeywordPatternImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyListCompExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyListCompExpressionImpl.java index 4383aaf74a7a..33156d8ba7cd 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyListCompExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyListCompExpressionImpl.java @@ -16,7 +16,10 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.PyClass; +import com.jetbrains.python.psi.PyElementVisitor; +import com.jetbrains.python.psi.PyExpression; +import com.jetbrains.python.psi.PyListCompExpression; import com.jetbrains.python.psi.types.PyCollectionTypeImpl; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; @@ -26,7 +29,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Collections; -public class PyListCompExpressionImpl extends PyComprehensionElementImpl implements PyListCompExpression, PyWrapperTypeProvider { +public class PyListCompExpressionImpl extends PyComprehensionElementImpl implements PyListCompExpression { public PyListCompExpressionImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyMappingPatternImpl.kt b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyMappingPatternImpl.kt index 4d4aea91d545..bf0ff5278b8e 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyMappingPatternImpl.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyMappingPatternImpl.kt @@ -8,8 +8,7 @@ import com.jetbrains.python.psi.impl.PyBuiltinCache.Companion.getInstance import com.jetbrains.python.psi.types.* import com.jetbrains.python.psi.types.PyLiteralType.Companion.upcastLiteralToClass -class PyMappingPatternImpl(astNode: ASTNode?) : PyElementImpl(astNode), PyMappingPattern, PyCaptureContext, PsiListLikeElement, - PyWrapperTypeProvider { +class PyMappingPatternImpl(astNode: ASTNode?) : PyElementImpl(astNode), PyMappingPattern, PyCaptureContext, PsiListLikeElement { override fun acceptPyVisitor(pyVisitor: PyElementVisitor) { pyVisitor.visitPyMappingPattern(this) } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyOrPatternImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyOrPatternImpl.java index 41766e703620..ca5f3ba159aa 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyOrPatternImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyOrPatternImpl.java @@ -4,14 +4,13 @@ import com.intellij.lang.ASTNode; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyOrPattern; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.PyUnionType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PyOrPatternImpl extends PyElementImpl implements PyOrPattern, PyWrapperTypeProvider { +public class PyOrPatternImpl extends PyElementImpl implements PyOrPattern { public PyOrPatternImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyParenthesizedExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyParenthesizedExpressionImpl.java index d9e26e6230cc..986b8514150a 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyParenthesizedExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyParenthesizedExpressionImpl.java @@ -5,13 +5,12 @@ import com.intellij.lang.ASTNode; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyParenthesizedExpression; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; -public class PyParenthesizedExpressionImpl extends PyElementImpl implements PyParenthesizedExpression, PyWrapperTypeProvider { +public class PyParenthesizedExpressionImpl extends PyElementImpl implements PyParenthesizedExpression { public PyParenthesizedExpressionImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PySetCompExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PySetCompExpressionImpl.java index b7ce230ddbef..367d2ae91e24 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PySetCompExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PySetCompExpressionImpl.java @@ -4,7 +4,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PySetCompExpression; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyCollectionTypeImpl; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; @@ -13,7 +12,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Collections; -public class PySetCompExpressionImpl extends PyComprehensionElementImpl implements PySetCompExpression, PyWrapperTypeProvider { +public class PySetCompExpressionImpl extends PyComprehensionElementImpl implements PySetCompExpression { public PySetCompExpressionImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyStringLiteralExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyStringLiteralExpressionImpl.java index f2bbbcc10735..407ff8cf6570 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyStringLiteralExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyStringLiteralExpressionImpl.java @@ -31,7 +31,7 @@ import javax.swing.*; import java.util.List; public class PyStringLiteralExpressionImpl extends PyElementImpl - implements PyStringLiteralExpression, PsiLiteralValue, ContributedReferenceHost, PyInstantTypeProvider { + implements PyStringLiteralExpression, PsiLiteralValue, ContributedReferenceHost { private volatile @Nullable String myStringValue; private volatile @Nullable List myValueTextRanges; diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java index 24686caac5b0..e195309e0a39 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java @@ -10,7 +10,7 @@ import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; -public class PyTupleExpressionImpl extends PySequenceExpressionImpl implements PyTupleExpression, PyWrapperTypeProvider { +public class PyTupleExpressionImpl extends PySequenceExpressionImpl implements PyTupleExpression { public PyTupleExpressionImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTypeAliasStatementImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTypeAliasStatementImpl.java index 3050d77b793c..0e157bfecf31 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTypeAliasStatementImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTypeAliasStatementImpl.java @@ -16,8 +16,7 @@ import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PyTypeAliasStatementImpl extends PyBaseElementImpl - implements PyTypeAliasStatement, PyInstantTypeProvider { +public class PyTypeAliasStatementImpl extends PyBaseElementImpl implements PyTypeAliasStatement { public PyTypeAliasStatementImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTypeParameterImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTypeParameterImpl.java index 28f90c1f8189..778b9382f616 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTypeParameterImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyTypeParameterImpl.java @@ -15,7 +15,7 @@ import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PyTypeParameterImpl extends PyBaseElementImpl implements PyTypeParameter, PyInstantTypeProvider { +public class PyTypeParameterImpl extends PyBaseElementImpl implements PyTypeParameter { public PyTypeParameterImpl(ASTNode astNode) { super(astNode); diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyValuePatternImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyValuePatternImpl.java index 2fb30d3d5ec0..4ef6c4cd3a54 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyValuePatternImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyValuePatternImpl.java @@ -3,14 +3,13 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyValuePattern; -import com.jetbrains.python.psi.PyWrapperTypeProvider; import com.jetbrains.python.psi.types.PyLiteralType; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PyValuePatternImpl extends PyElementImpl implements PyValuePattern, PyWrapperTypeProvider { +public class PyValuePatternImpl extends PyElementImpl implements PyValuePattern { public PyValuePatternImpl(ASTNode astNode) { super(astNode); } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyCallableTypeImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyCallableTypeImpl.java index f12fe825d6b4..5128a283eaf7 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyCallableTypeImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyCallableTypeImpl.java @@ -93,11 +93,6 @@ public class PyCallableTypeImpl implements PyCallableType { return delegate != null ? delegate.getCompletionVariants(completionPrefix, location, context) : ArrayUtilRt.EMPTY_OBJECT_ARRAY; } - @Override - public String toString() { - return "PyCallableType: " + getName(); - } - @Override public @Nullable String getName() { final TypeEvalContext context = TypeEvalContext.codeInsightFallback(null); diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyFunctionTypeImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyFunctionTypeImpl.java index abb1bef87b7f..4de0637894d4 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyFunctionTypeImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyFunctionTypeImpl.java @@ -113,11 +113,6 @@ public class PyFunctionTypeImpl implements PyFunctionType { return this; } - @Override - public String toString() { - return "PyFunctionType"; - } - @Override public T acceptTypeVisitor(@NotNull PyTypeVisitor visitor) { return visitor.visitPyFunctionType(this); diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyModuleType.java b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyModuleType.java index 86130beab4b7..8d322f66e22d 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyModuleType.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyModuleType.java @@ -52,10 +52,6 @@ public class PyModuleType implements PyType { // Modules don't descend from obje myQualifiedName = LazyInitializer.create(() -> QualifiedNameFinder.findShortestImportableQName(myModule)); } - @Override - public String toString() { - return "PyModuleType(" + myModule.getName() + ")"; - } public @NotNull PyFile getModule() { return myModule; @@ -587,7 +583,7 @@ public class PyModuleType implements PyType { // Modules don't descend from obje @Override public void assertValid(String message) { if (!myModule.isValid()) { - throw new PsiInvalidElementAccessException(myModule, myModule.getClass() + ": " + message); + throw new PsiInvalidElementAccessException(myModule, myModule.getClass().toString() + ": " + message); } } diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyTupleType.java b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyTupleType.java index 054129b46f5e..57827b530d1f 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyTupleType.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyTupleType.java @@ -120,11 +120,6 @@ public class PyTupleType extends PyClassTypeImpl implements PyCollectionType { return PyUnionType.unionOrNever(unpackedTypes); } - @Override - public String toString() { - return "PyTupleType: " + getName(); - } - public @NotNull PyUnpackedTupleType asUnpackedTupleType() { return myUnpackedTupleType; }