mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Revert "PY-86493 get types only from external type provider if it's enabled"
This reverts commit 6715f96668d42711b24d0f36d57eb00de7da37fb. GitOrigin-RevId: f41f8e73ccbb5bf1ad8fe6f58f22183d33bd1860
This commit is contained in:
committed by
intellij-monorepo-bot
parent
fbbca2bf86
commit
09718a1e14
@@ -297,6 +297,10 @@ public sealed class TypeEvalContext {
|
||||
return Registry.is("python.use.separated.libraries.type.cache") && isLibraryElement(element);
|
||||
}
|
||||
|
||||
private static boolean isExternalTypeProviderApplicable(PyTypedElement element) {
|
||||
return element instanceof PyInstantTypeProvider;
|
||||
}
|
||||
|
||||
public @Nullable PyType getType(final @NotNull PyTypedElement element) {
|
||||
if (canDelegateToLibraryContext(element)) {
|
||||
var context = getLibraryContext(element.getProject());
|
||||
@@ -311,35 +315,33 @@ public sealed class TypeEvalContext {
|
||||
Pair.create(element, this),
|
||||
false,
|
||||
() -> {
|
||||
var externalTypeProvider = isInsideExternalTypeProviderCall ? null :
|
||||
ContainerUtil.find(TypeEvalExternalTypeProvider.EP_NAME.getExtensionList(),
|
||||
provider -> provider.isAvailable(element));
|
||||
|
||||
if (externalTypeProvider != null) {
|
||||
try {
|
||||
isInsideExternalTypeProviderCall = true;
|
||||
var provided = externalTypeProvider.provideType(element, this);
|
||||
isInsideExternalTypeProviderCall = false;
|
||||
if (provided != null) {
|
||||
var type = provided.get();
|
||||
myExternalEvaluated.put(element, type == null ? PyNullType.INSTANCE : type);
|
||||
return type;
|
||||
if (!isExternalTypeProviderApplicable(element) && !isInsideExternalTypeProviderCall) {
|
||||
var externalTypeProvider =
|
||||
ContainerUtil.find(TypeEvalExternalTypeProvider.EP_NAME.getExtensionList(), TypeEvalExternalTypeProvider::isAvailable);
|
||||
if (externalTypeProvider != null) {
|
||||
try {
|
||||
isInsideExternalTypeProviderCall = true;
|
||||
var provided = externalTypeProvider.provideType(element, this);
|
||||
isInsideExternalTypeProviderCall = false;
|
||||
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 " + externalTypeProvider.getClass().getName(), e);
|
||||
}
|
||||
}
|
||||
catch (ProcessCanceledException e) {
|
||||
throw e;
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.warn("Exception during external type provider " + externalTypeProvider.getClass().getName(), e);
|
||||
}
|
||||
}
|
||||
else {
|
||||
PyType type = element.getType(this, Key.INSTANCE);
|
||||
assertValid(type, element);
|
||||
myEvaluated.put(element, type == null ? PyNullType.INSTANCE : type);
|
||||
return type;
|
||||
}
|
||||
return null;
|
||||
|
||||
PyType type = element.getType(this, Key.INSTANCE);
|
||||
assertValid(type, element);
|
||||
myEvaluated.put(element, type == null ? PyNullType.INSTANCE : type);
|
||||
return type;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
+1
-2
@@ -3,7 +3,6 @@ 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
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@@ -13,7 +12,7 @@ import org.jetbrains.annotations.ApiStatus
|
||||
*/
|
||||
@ApiStatus.Internal
|
||||
interface TypeEvalExternalTypeProvider {
|
||||
fun isAvailable(element: PsiElement): Boolean
|
||||
fun isAvailable(): Boolean
|
||||
|
||||
fun provideType(element: PyTypedElement, context: TypeEvalContext): Ref<PyType?>?
|
||||
|
||||
|
||||
Reference in New Issue
Block a user