From f8a5625f991e18fa963d0eafbd1c222ebd9499f9 Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Thu, 11 Jan 2024 16:18:42 +0100 Subject: [PATCH] [python] packages moved to `com.jetbrains.python` package, as whole `community.python.impl` must be there GitOrigin-RevId: 339a5be4b4c260ce0c31ee2245870ef953065b2d --- .../src/com/jetbrains/extensions/ModuleExt.kt | 4 +- .../jetbrains/extensions/QualifiedNameExt.kt | 84 +++++---- .../jetbrains/extensions/package-info.java | 9 + .../extensions/python/PyCallExpressionExt.kt | 17 +- .../extensions/python/package-info.java | 9 + .../jetbrains/python/extensions/ModuleExt.kt} | 13 +- .../python/extensions/QualifiedNameExt.kt | 168 ++++++++++++++++++ .../extensions/RegExpPatternExt.kt | 2 +- .../extensions/python/PyCallExpressionExt.kt | 21 +++ .../extensions/PsiFileSystemItemExt.kt | 8 +- .../jetbrains/extensions/python/PyClassExt.kt | 17 +- .../PyRelativeToAbsoluteImportIntention.kt | 2 +- ...PyStdlibOverridingModuleMembersProvider.kt | 2 +- .../python/extensions/PsiFileSystemItemExt.kt | 29 +++ .../jetbrains/python/extensions/PyClassExt.kt | 32 ++++ .../python/testing/PythonUnitTestDetectors.kt | 2 +- .../PySymbolFieldWithBrowseButton.kt | 18 +- .../PyPostfixTemplateExpressionCondition.kt | 2 +- .../extensions}/FileChooserDescriptorExt.kt | 6 +- .../extensions}/ProgressManagerExt.kt | 4 +- .../extensions}/PyFunctionExt.kt | 4 +- .../extensions/PythonProjectExt.kt | 2 +- .../extensions/RegistryValueExt.kt | 2 +- .../extensions/StringLiteralExpressionExt.kt | 2 +- .../extensions/TargetWithVariantExt.kt | 4 +- .../extensions}/VirtualFileExt.kt | 4 +- .../python/extensions/package-info.java | 8 + .../management/PythonPackagesUpdater.kt | 2 +- .../reflection/ReflectionUtils.kt | 4 +- .../python/remote/NewFilesProcessor.java | 2 +- .../PythonRemoteInterpreterManager.java | 2 +- .../python/run/PyBrowseActionListener.kt | 2 +- .../python/run/PythonImportErrorFilter.kt | 3 +- .../run/PythonRunConfigurationForm.java | 2 +- .../python/run/PythonRunConfigurationPanel.kt | 8 +- .../configuration/PyScriptOrModuleFragment.kt | 8 +- .../PyRunTargetVariant.kt | 6 +- .../PyTargetTypeRefactoring.kt | 2 +- .../python/sdk/poetry/PoetryRunScript.kt | 2 +- .../AnnotationSerializationFilter.java | 18 +- .../serialization/CompoundFilter.java | 18 +- .../statistics/PyPackageUsagesCollector.kt | 2 +- .../python/statistics/PyStatisticTools.kt | 2 +- .../testing/PyQNameResolveAndSplitUtils.kt | 8 +- .../python/testing/PyTestSharedForm.java | 12 +- .../jetbrains/python/testing/PyTestsShared.kt | 10 +- .../PyAutoDetectTestConfiguration.kt | 2 +- .../testing/pyTestFixtures/PyTestFixture.kt | 2 +- .../testing/tox/PyToxConfiguration.java | 4 +- .../env/PyExecutionFixtureTestTask.java | 2 +- .../env/PyProcessWithConsoleTestTask.java | 2 +- .../CreateConfigurationMultipleCasesTask.java | 2 +- 52 files changed, 425 insertions(+), 177 deletions(-) create mode 100644 python/python-core-impl/src/com/jetbrains/extensions/package-info.java create mode 100644 python/python-core-impl/src/com/jetbrains/extensions/python/package-info.java rename python/{src/com/jetbrains/extensions/package-info.java => python-core-impl/src/com/jetbrains/python/extensions/ModuleExt.kt} (70%) create mode 100644 python/python-core-impl/src/com/jetbrains/python/extensions/QualifiedNameExt.kt rename python/python-core-impl/src/com/jetbrains/{ => python}/extensions/RegExpPatternExt.kt (87%) create mode 100644 python/python-core-impl/src/com/jetbrains/python/extensions/python/PyCallExpressionExt.kt create mode 100644 python/python-psi-impl/src/com/jetbrains/python/extensions/PsiFileSystemItemExt.kt create mode 100644 python/python-psi-impl/src/com/jetbrains/python/extensions/PyClassExt.kt rename python/src/com/jetbrains/{ => python}/PySymbolFieldWithBrowseButton.kt (94%) rename python/src/com/jetbrains/{extensions/python => python/extensions}/FileChooserDescriptorExt.kt (64%) rename python/src/com/jetbrains/{extensions/python => python/extensions}/ProgressManagerExt.kt (75%) rename python/src/com/jetbrains/{extensions/python => python/extensions}/PyFunctionExt.kt (77%) rename python/src/com/jetbrains/{ => python}/extensions/PythonProjectExt.kt (92%) rename python/src/com/jetbrains/{ => python}/extensions/RegistryValueExt.kt (95%) rename python/src/com/jetbrains/{ => python}/extensions/StringLiteralExpressionExt.kt (97%) rename python/src/com/jetbrains/{ => python}/extensions/TargetWithVariantExt.kt (93%) rename python/src/com/jetbrains/{extensions/python => python/extensions}/VirtualFileExt.kt (61%) create mode 100644 python/src/com/jetbrains/python/extensions/package-info.java rename python/src/com/jetbrains/{ => python}/reflection/ReflectionUtils.kt (96%) rename python/src/com/jetbrains/{ => python}/serialization/AnnotationSerializationFilter.java (56%) rename python/src/com/jetbrains/{ => python}/serialization/CompoundFilter.java (57%) diff --git a/python/python-core-impl/src/com/jetbrains/extensions/ModuleExt.kt b/python/python-core-impl/src/com/jetbrains/extensions/ModuleExt.kt index 5d7bb2dab432..beda6906249b 100644 --- a/python/python-core-impl/src/com/jetbrains/extensions/ModuleExt.kt +++ b/python/python-core-impl/src/com/jetbrains/extensions/ModuleExt.kt @@ -18,6 +18,8 @@ package com.jetbrains.extensions import com.intellij.openapi.module.Module import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.ModuleRootManager +import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval - +@Deprecated(message = "Moved to com.jetbrains.python") +@ScheduledForRemoval fun Module.getSdk(): Sdk? = ModuleRootManager.getInstance(this).sdk diff --git a/python/python-core-impl/src/com/jetbrains/extensions/QualifiedNameExt.kt b/python/python-core-impl/src/com/jetbrains/extensions/QualifiedNameExt.kt index 70859fe81f70..812fc061db89 100644 --- a/python/python-core-impl/src/com/jetbrains/extensions/QualifiedNameExt.kt +++ b/python/python-core-impl/src/com/jetbrains/extensions/QualifiedNameExt.kt @@ -1,18 +1,4 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.jetbrains.extensions import com.intellij.openapi.module.Module @@ -34,9 +20,14 @@ import com.jetbrains.python.psi.resolve.* import com.jetbrains.python.psi.stubs.PyModuleNameIndex import com.jetbrains.python.psi.types.TypeEvalContext import com.jetbrains.python.sdk.PySdkUtil +import org.jetbrains.annotations.ApiStatus import java.util.* - +/** + * @deprecated moved to {@link com.jetbrains.python.extensions} + */ +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") interface ContextAnchor { val sdk: Sdk? val project: Project @@ -47,6 +38,11 @@ interface ContextAnchor { } } +/** + * @deprecated moved to {@link com.jetbrains.python.extensions} + */ +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") class ModuleBasedContextAnchor(val module: Module) : ContextAnchor { override val sdk: Sdk? = module.getSdk() override val project: Project = module.project @@ -58,16 +54,11 @@ class ModuleBasedContextAnchor(val module: Module) : ContextAnchor { } } -class ProjectSdkContextAnchor(override val project: Project, override val sdk: Sdk?) : ContextAnchor { - override val qualifiedNameResolveContext: PyQualifiedNameResolveContext? = sdk?.let { fromSdk(project, it) } - override val scope: GlobalSearchScope = GlobalSearchScope.projectScope(project) //TODO: Check if project scope includes SDK - override fun getRoots(): Array { - val manager = ProjectRootManager.getInstance(project) - return super.getRoots() + manager.contentRoots + manager.contentSourceRoots - } -} - - +/** + * @deprecated moved to {@link com.jetbrains.python.extensions} + */ +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") data class QNameResolveContext( val contextAnchor: ContextAnchor, /** @@ -86,9 +77,21 @@ data class QNameResolveContext( val allowInaccurateResult: Boolean = false ) + /** - * @return qname part relative to root + * @deprecated moved to {@link com.jetbrains.python.extensions} */ +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") +fun QualifiedName.resolveToElement(context: QNameResolveContext, stopOnFirstFail: Boolean = false): PsiElement? { + return getElementAndResolvableName(context, stopOnFirstFail)?.element +} + +/** + * @deprecated moved to {@link com.jetbrains.python.extensions} + */ +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") fun QualifiedName.getRelativeNameTo(root: QualifiedName): QualifiedName? { if (Collections.indexOfSubList(components, root.components) == -1) { return null @@ -97,22 +100,31 @@ fun QualifiedName.getRelativeNameTo(root: QualifiedName): QualifiedName? { } /** - * Resolves qname of any symbol to appropriate PSI element. - * Shortcut for [getElementAndResolvableName] - * @see [getElementAndResolvableName] + * @deprecated moved to {@link com.jetbrains.python.extensions} */ -fun QualifiedName.resolveToElement(context: QNameResolveContext, stopOnFirstFail: Boolean = false): PsiElement? { - return getElementAndResolvableName(context, stopOnFirstFail)?.element +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") +class ProjectSdkContextAnchor(override val project: Project, override val sdk: Sdk?) : com.jetbrains.python.extensions.ContextAnchor { + override val qualifiedNameResolveContext: PyQualifiedNameResolveContext? = sdk?.let { fromSdk(project, it) } + override val scope: GlobalSearchScope = GlobalSearchScope.projectScope(project) //TODO: Check if project scope includes SDK + override fun getRoots(): Array { + val manager = ProjectRootManager.getInstance(project) + return super.getRoots() + manager.contentRoots + manager.contentSourceRoots + } } - +/** + * @deprecated moved to {@link com.jetbrains.python.extensions} + */ +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") data class NameAndElement(val name: QualifiedName, val element: PsiElement) /** - * Resolves qname of any symbol to PSI element popping tail until element becomes resolved or only one time if stopOnFirstFail - * @return element and longest name that was resolved successfully. - * @see [resolveToElement] + * @deprecated moved to {@link com.jetbrains.python.extensions} */ +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") fun QualifiedName.getElementAndResolvableName(context: QNameResolveContext, stopOnFirstFail: Boolean = false): NameAndElement? { var currentName = QualifiedName.fromComponents(this.components) diff --git a/python/python-core-impl/src/com/jetbrains/extensions/package-info.java b/python/python-core-impl/src/com/jetbrains/extensions/package-info.java new file mode 100644 index 000000000000..b75f3c30e94c --- /dev/null +++ b/python/python-core-impl/src/com/jetbrains/extensions/package-info.java @@ -0,0 +1,9 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +/** + * @deprecated moved to {@link com.jetbrains.python.extensions} + */ +@ApiStatus.ScheduledForRemoval +@Deprecated +package com.jetbrains.extensions; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/python/python-core-impl/src/com/jetbrains/extensions/python/PyCallExpressionExt.kt b/python/python-core-impl/src/com/jetbrains/extensions/python/PyCallExpressionExt.kt index 98ad7a6beec7..2820ba1267d1 100644 --- a/python/python-core-impl/src/com/jetbrains/extensions/python/PyCallExpressionExt.kt +++ b/python/python-core-impl/src/com/jetbrains/extensions/python/PyCallExpressionExt.kt @@ -1,21 +1,16 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.jetbrains.extensions.python + +package com.jetbrains.extensions.python; import com.jetbrains.python.nameResolver.FQNamesProvider import com.jetbrains.python.nameResolver.NameResolverTools -import com.jetbrains.python.psi.PyAssignmentStatement import com.jetbrains.python.psi.PyCallExpression -import com.jetbrains.python.psi.PyPossibleClassMember +import org.jetbrains.annotations.ApiStatus /** - * Checks if ``foo = SomeExpr()`` where foo is class attribute - */ -val PyCallExpression.isClassAttribute: Boolean - get() = - (parent as? PyAssignmentStatement)?.targets?.filterIsInstance()?.any { it.containingClass != null } == true - -/** - * Checks if callee has certain name. Only name is checked, so import aliases aren't supported, but it works pretty fast + * @deprecated moved to {@link com.jetbrains.python.extensions} */ +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python") fun PyCallExpression.isCalleeName(vararg names: FQNamesProvider): Boolean = NameResolverTools.isCalleeShortCut(this, *names) diff --git a/python/python-core-impl/src/com/jetbrains/extensions/python/package-info.java b/python/python-core-impl/src/com/jetbrains/extensions/python/package-info.java new file mode 100644 index 000000000000..1af75ceebbe1 --- /dev/null +++ b/python/python-core-impl/src/com/jetbrains/extensions/python/package-info.java @@ -0,0 +1,9 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +/** + * @deprecated moved to {@link com.jetbrains.python.extensions} + */ +@ApiStatus.ScheduledForRemoval +@Deprecated +package com.jetbrains.extensions.python; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/python/src/com/jetbrains/extensions/package-info.java b/python/python-core-impl/src/com/jetbrains/python/extensions/ModuleExt.kt similarity index 70% rename from python/src/com/jetbrains/extensions/package-info.java rename to python/python-core-impl/src/com/jetbrains/python/extensions/ModuleExt.kt index 56344f29a2ff..0a89ce5ff4c7 100644 --- a/python/src/com/jetbrains/extensions/package-info.java +++ b/python/python-core-impl/src/com/jetbrains/python/extensions/ModuleExt.kt @@ -13,10 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +package com.jetbrains.python.extensions -/** - * Extension methods for various classes. - * Methods are transparent for Kotlin, while in Java you must use following pattern: class MyClass has extensions in MyClassExtKt. - * @author Ilya.Kazakevich - */ -package com.jetbrains.extensions; \ No newline at end of file +import com.intellij.openapi.module.Module +import com.intellij.openapi.projectRoots.Sdk +import com.intellij.openapi.roots.ModuleRootManager + + +fun Module.getSdk(): Sdk? = ModuleRootManager.getInstance(this).sdk diff --git a/python/python-core-impl/src/com/jetbrains/python/extensions/QualifiedNameExt.kt b/python/python-core-impl/src/com/jetbrains/python/extensions/QualifiedNameExt.kt new file mode 100644 index 000000000000..1b64f844ce18 --- /dev/null +++ b/python/python-core-impl/src/com/jetbrains/python/extensions/QualifiedNameExt.kt @@ -0,0 +1,168 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.extensions + +import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project +import com.intellij.openapi.projectRoots.Sdk +import com.intellij.openapi.roots.ModuleRootManager +import com.intellij.openapi.roots.OrderRootType +import com.intellij.openapi.roots.ProjectRootManager +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.PsiDirectory +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiManager +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.util.QualifiedName +import com.jetbrains.python.PyNames +import com.jetbrains.python.psi.PyClass +import com.jetbrains.python.psi.PyFile +import com.jetbrains.python.psi.resolve.* +import com.jetbrains.python.psi.stubs.PyModuleNameIndex +import com.jetbrains.python.psi.types.TypeEvalContext +import com.jetbrains.python.sdk.PySdkUtil +import java.util.* + + +interface ContextAnchor { + val sdk: Sdk? + val project: Project + val qualifiedNameResolveContext: PyQualifiedNameResolveContext? + val scope: GlobalSearchScope + fun getRoots(): Array { + return sdk?.rootProvider?.getFiles(OrderRootType.CLASSES) ?: emptyArray() + } +} + +class ModuleBasedContextAnchor(val module: Module) : ContextAnchor { + override val sdk: Sdk? = module.getSdk() + override val project: Project = module.project + override val qualifiedNameResolveContext: PyQualifiedNameResolveContext = fromModule(module) + override val scope: GlobalSearchScope = module.moduleContentScope + override fun getRoots(): Array { + val manager = ModuleRootManager.getInstance(module) + return super.getRoots() + manager.contentRoots + manager.sourceRoots + } +} + +class ProjectSdkContextAnchor(override val project: Project, override val sdk: Sdk?) : ContextAnchor { + override val qualifiedNameResolveContext: PyQualifiedNameResolveContext? = sdk?.let { fromSdk(project, it) } + override val scope: GlobalSearchScope = GlobalSearchScope.projectScope(project) //TODO: Check if project scope includes SDK + override fun getRoots(): Array { + val manager = ProjectRootManager.getInstance(project) + return super.getRoots() + manager.contentRoots + manager.contentSourceRoots + } +} + + +data class QNameResolveContext( + val contextAnchor: ContextAnchor, + /** + * Used for language level etc + */ + val sdk: Sdk? = contextAnchor.sdk, + + val evalContext: TypeEvalContext, + /** + * If not provided resolves against roots only. Resolved also against this folder otherwise + */ + val folderToStart: VirtualFile? = null, + /** + * Use index, plain dirs with Py2 and so on. May resolve names unresolvable in other cases, but may return false results. + */ + val allowInaccurateResult: Boolean = false +) + +/** + * @return qname part relative to root + */ +fun QualifiedName.getRelativeNameTo(root: QualifiedName): QualifiedName? { + if (Collections.indexOfSubList(components, root.components) == -1) { + return null + } + return subQualifiedName(root.componentCount, componentCount) +} + +/** + * Resolves qname of any symbol to appropriate PSI element. + * Shortcut for [getElementAndResolvableName] + * @see [getElementAndResolvableName] + */ +fun QualifiedName.resolveToElement(context: QNameResolveContext, stopOnFirstFail: Boolean = false): PsiElement? { + return getElementAndResolvableName(context, stopOnFirstFail)?.element +} + + +data class NameAndElement(val name: QualifiedName, val element: PsiElement) + +/** + * Resolves qname of any symbol to PSI element popping tail until element becomes resolved or only one time if stopOnFirstFail + * @return element and longest name that was resolved successfully. + * @see [resolveToElement] + */ +fun QualifiedName.getElementAndResolvableName(context: QNameResolveContext, stopOnFirstFail: Boolean = false): NameAndElement? { + var currentName = QualifiedName.fromComponents(this.components) + + + var element: PsiElement? = null + + + var lastElement: String? = null + var psiDirectory: PsiDirectory? = null + + var resolveContext = context.contextAnchor.qualifiedNameResolveContext?.copyWithMembers() ?: return null + if (PySdkUtil.getLanguageLevelForSdk(context.sdk).isPy3K || context.allowInaccurateResult) { + resolveContext = resolveContext.copyWithPlainDirectories() + } + + if (context.folderToStart != null) { + psiDirectory = PsiManager.getInstance(context.contextAnchor.project).findDirectory(context.folderToStart) + } + + + // Drill as deep, as we can + while (currentName.componentCount > 0 && element == null) { + if (psiDirectory != null) { // Resolve against folder + // There could be folder and module on the same level. Empty folder should be ignored in this case. + element = resolveModuleAt(currentName, psiDirectory, resolveContext).filterNot { + it is PsiDirectory && it.children.filterIsInstance().isEmpty() + }.firstOrNull() + } + + if (element == null) { // Resolve against roots + element = resolveQualifiedName(currentName, resolveContext).firstOrNull() + } + + if (element != null || stopOnFirstFail) { + break + } + lastElement = currentName.lastComponent!! + currentName = currentName.removeLastComponent() + } + + if (lastElement != null && element is PyClass) { + // Drill in class + + //TODO: Support nested classes + val method = element.findMethodByName(lastElement, true, context.evalContext) + if (method != null) { + return NameAndElement(currentName.append(lastElement), method) + } + + } + + if (element == null && this.firstComponent != null && context.allowInaccurateResult) { + // If name starts with file which is not in root nor in folders -- use index. + val nameToFind = this.firstComponent!! + val pyFile = PyModuleNameIndex.find(nameToFind, context.contextAnchor.project, false).firstOrNull() ?: return element + + val folder = + if (pyFile.name == PyNames.INIT_DOT_PY) { // We are in folder + pyFile.virtualFile.parent.parent + } + else { + pyFile.virtualFile.parent + } + return getElementAndResolvableName(context.copy(folderToStart = folder)) + } + return if (element != null) NameAndElement(currentName, element) else null +} diff --git a/python/python-core-impl/src/com/jetbrains/extensions/RegExpPatternExt.kt b/python/python-core-impl/src/com/jetbrains/python/extensions/RegExpPatternExt.kt similarity index 87% rename from python/python-core-impl/src/com/jetbrains/extensions/RegExpPatternExt.kt rename to python/python-core-impl/src/com/jetbrains/python/extensions/RegExpPatternExt.kt index 1e7367bdef4c..28fd42402c09 100644 --- a/python/python-core-impl/src/com/jetbrains/extensions/RegExpPatternExt.kt +++ b/python/python-core-impl/src/com/jetbrains/python/extensions/RegExpPatternExt.kt @@ -1,5 +1,5 @@ // Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.jetbrains.extensions +package com.jetbrains.python.extensions import org.intellij.lang.regexp.psi.RegExpPattern import java.util.regex.Pattern diff --git a/python/python-core-impl/src/com/jetbrains/python/extensions/python/PyCallExpressionExt.kt b/python/python-core-impl/src/com/jetbrains/python/extensions/python/PyCallExpressionExt.kt new file mode 100644 index 000000000000..e8cc260b600c --- /dev/null +++ b/python/python-core-impl/src/com/jetbrains/python/extensions/python/PyCallExpressionExt.kt @@ -0,0 +1,21 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.jetbrains.python.extensions.python + +import com.jetbrains.python.nameResolver.FQNamesProvider +import com.jetbrains.python.nameResolver.NameResolverTools +import com.jetbrains.python.psi.PyAssignmentStatement +import com.jetbrains.python.psi.PyCallExpression +import com.jetbrains.python.psi.PyPossibleClassMember + +/** + * Checks if ``foo = SomeExpr()`` where foo is class attribute + */ +val PyCallExpression.isClassAttribute: Boolean + get() = + (parent as? PyAssignmentStatement)?.targets?.filterIsInstance()?.any { it.containingClass != null } == true + +/** + * Checks if callee has certain name. Only name is checked, so import aliases aren't supported, but it works pretty fast + */ +fun PyCallExpression.isCalleeName(vararg names: FQNamesProvider): Boolean = NameResolverTools.isCalleeShortCut(this, *names) + diff --git a/python/python-psi-impl/src/com/jetbrains/extensions/PsiFileSystemItemExt.kt b/python/python-psi-impl/src/com/jetbrains/extensions/PsiFileSystemItemExt.kt index a457d0794e70..47dcf6e4cf5f 100644 --- a/python/python-psi-impl/src/com/jetbrains/extensions/PsiFileSystemItemExt.kt +++ b/python/python-psi-impl/src/com/jetbrains/extensions/PsiFileSystemItemExt.kt @@ -18,12 +18,14 @@ package com.jetbrains.extensions import com.intellij.psi.PsiFileSystemItem import com.intellij.psi.util.QualifiedName import com.jetbrains.python.psi.PyPsiFacade +import org.jetbrains.annotations.ApiStatus /** - * @author Ilya.Kazakevich + * @deprecated moved to {@link com.jetbrains.python.extensions} */ - -fun PsiFileSystemItem.getQName(): QualifiedName? { +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python.extensions") +fun PsiFileSystemItem.getQName(): QualifiedName? { val name = PyPsiFacade.getInstance(this.project).findShortestImportableName(this.virtualFile, this) ?: return null return QualifiedName.fromDottedString(name) } \ No newline at end of file diff --git a/python/python-psi-impl/src/com/jetbrains/extensions/python/PyClassExt.kt b/python/python-psi-impl/src/com/jetbrains/extensions/python/PyClassExt.kt index e6aec733ccd3..95ee92539612 100644 --- a/python/python-psi-impl/src/com/jetbrains/extensions/python/PyClassExt.kt +++ b/python/python-psi-impl/src/com/jetbrains/extensions/python/PyClassExt.kt @@ -15,19 +15,14 @@ */ package com.jetbrains.extensions.python -import com.jetbrains.python.extensions.isNameMatches -import com.jetbrains.python.nameResolver.FQNamesProvider +import com.jetbrains.python.extensions.inherits import com.jetbrains.python.psi.PyClass -import com.jetbrains.python.psi.types.PyClassLikeType import com.jetbrains.python.psi.types.TypeEvalContext +import org.jetbrains.annotations.ApiStatus /** - * @author Ilya.Kazakevich + * @deprecated moved to {@link com.jetbrains.python.extensions} */ -fun PyClass.inherits(evalContext: TypeEvalContext, parentNames: Set): Boolean = - this.getAncestorTypes(evalContext).filterNotNull().mapNotNull(PyClassLikeType::getClassQName).any(parentNames::contains) - -fun PyClass.inherits(evalContext: TypeEvalContext, vararg parentNames: String): Boolean = this.inherits(evalContext, parentNames.toHashSet()) - -fun PyClass.inherits(evalContext: TypeEvalContext?, parentNames: FQNamesProvider): Boolean = - this.getAncestorClasses(evalContext).any(parentNames::isNameMatches) +@ApiStatus.ScheduledForRemoval +@Deprecated(message = "Moved to com.jetbrains.python.extensions") +fun PyClass.inherits(evalContext: TypeEvalContext, vararg parentNames: String ): Boolean = inherits(evalContext, parentNames.toHashSet()) diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/intentions/PyRelativeToAbsoluteImportIntention.kt b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/intentions/PyRelativeToAbsoluteImportIntention.kt index 36245703fadf..abc212361ea6 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/intentions/PyRelativeToAbsoluteImportIntention.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/intentions/PyRelativeToAbsoluteImportIntention.kt @@ -4,7 +4,7 @@ package com.jetbrains.python.codeInsight.intentions import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile -import com.jetbrains.extensions.getQName +import com.jetbrains.python.extensions.getQName import com.jetbrains.python.psi.PyFile /** diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibOverridingModuleMembersProvider.kt b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibOverridingModuleMembersProvider.kt index 572b6dbbe8de..2fb3abbc5835 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibOverridingModuleMembersProvider.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibOverridingModuleMembersProvider.kt @@ -3,7 +3,7 @@ package com.jetbrains.python.codeInsight.stdlib import com.intellij.psi.PsiElement import com.intellij.psi.util.QualifiedName -import com.jetbrains.extensions.getQName +import com.jetbrains.python.extensions.getQName import com.jetbrains.python.PyNames import com.jetbrains.python.codeInsight.PyCustomMember import com.jetbrains.python.psi.PyFile diff --git a/python/python-psi-impl/src/com/jetbrains/python/extensions/PsiFileSystemItemExt.kt b/python/python-psi-impl/src/com/jetbrains/python/extensions/PsiFileSystemItemExt.kt new file mode 100644 index 000000000000..0d3d300c8b88 --- /dev/null +++ b/python/python-psi-impl/src/com/jetbrains/python/extensions/PsiFileSystemItemExt.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jetbrains.python.extensions + +import com.intellij.psi.PsiFileSystemItem +import com.intellij.psi.util.QualifiedName +import com.jetbrains.python.psi.PyPsiFacade + +/** + * @author Ilya.Kazakevich + */ + +fun PsiFileSystemItem.getQName(): QualifiedName? { + val name = PyPsiFacade.getInstance(this.project).findShortestImportableName(this.virtualFile, this) ?: return null + return QualifiedName.fromDottedString(name) +} \ No newline at end of file diff --git a/python/python-psi-impl/src/com/jetbrains/python/extensions/PyClassExt.kt b/python/python-psi-impl/src/com/jetbrains/python/extensions/PyClassExt.kt new file mode 100644 index 000000000000..1df1f1f37874 --- /dev/null +++ b/python/python-psi-impl/src/com/jetbrains/python/extensions/PyClassExt.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jetbrains.python.extensions + +import com.jetbrains.python.nameResolver.FQNamesProvider +import com.jetbrains.python.psi.PyClass +import com.jetbrains.python.psi.types.PyClassLikeType +import com.jetbrains.python.psi.types.TypeEvalContext + +/** + * @author Ilya.Kazakevich + */ +fun PyClass.inherits(evalContext: TypeEvalContext, parentNames: Set): Boolean = + this.getAncestorTypes(evalContext).filterNotNull().mapNotNull(PyClassLikeType::getClassQName).any(parentNames::contains) + +fun PyClass.inherits(evalContext: TypeEvalContext, vararg parentNames: String): Boolean = this.inherits(evalContext, parentNames.toHashSet()) + +fun PyClass.inherits(evalContext: TypeEvalContext?, parentNames: FQNamesProvider): Boolean = + this.getAncestorClasses(evalContext).any(parentNames::isNameMatches) diff --git a/python/python-psi-impl/src/com/jetbrains/python/testing/PythonUnitTestDetectors.kt b/python/python-psi-impl/src/com/jetbrains/python/testing/PythonUnitTestDetectors.kt index 98ebfab1b2d0..dd4049de6971 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/testing/PythonUnitTestDetectors.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/testing/PythonUnitTestDetectors.kt @@ -4,7 +4,7 @@ package com.jetbrains.python.testing import com.intellij.psi.PsiDirectory import com.intellij.psi.PsiElement import com.intellij.util.Processor -import com.jetbrains.extensions.python.inherits +import com.jetbrains.python.extensions.inherits import com.jetbrains.python.psi.PyClass import com.jetbrains.python.psi.PyFile import com.jetbrains.python.psi.PyFunction diff --git a/python/src/com/jetbrains/PySymbolFieldWithBrowseButton.kt b/python/src/com/jetbrains/python/PySymbolFieldWithBrowseButton.kt similarity index 94% rename from python/src/com/jetbrains/PySymbolFieldWithBrowseButton.kt rename to python/src/com/jetbrains/python/PySymbolFieldWithBrowseButton.kt index 5af0c501bd7b..6385e9c07474 100644 --- a/python/src/com/jetbrains/PySymbolFieldWithBrowseButton.kt +++ b/python/src/com/jetbrains/python/PySymbolFieldWithBrowseButton.kt @@ -1,7 +1,7 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. @file:Suppress("ReplaceJavaStaticMethodWithKotlinAnalog") -package com.jetbrains +package com.jetbrains.python import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.codeInsight.lookup.LookupElement @@ -31,15 +31,11 @@ import com.intellij.util.indexing.FindSymbolParameters import com.intellij.util.indexing.IdFilter import com.intellij.util.textCompletion.TextFieldWithCompletion import com.intellij.util.ui.JBUI -import com.jetbrains.extensions.ContextAnchor -import com.jetbrains.extensions.QNameResolveContext -import com.jetbrains.extensions.getQName -import com.jetbrains.extensions.python.toPsi -import com.jetbrains.extensions.resolveToElement -import com.jetbrains.python.PyBundle -import com.jetbrains.python.PyGotoSymbolContributor -import com.jetbrains.python.PyNames -import com.jetbrains.python.PyTreeChooserDialog +import com.jetbrains.python.extensions.ContextAnchor +import com.jetbrains.python.extensions.QNameResolveContext +import com.jetbrains.python.extensions.getQName +import com.jetbrains.python.extensions.toPsi +import com.jetbrains.python.extensions.resolveToElement import com.jetbrains.python.psi.PyFile import com.jetbrains.python.psi.PyQualifiedNameOwner import com.jetbrains.python.psi.PyTypedElement diff --git a/python/src/com/jetbrains/python/codeInsight/postfix/PyPostfixTemplateExpressionCondition.kt b/python/src/com/jetbrains/python/codeInsight/postfix/PyPostfixTemplateExpressionCondition.kt index 5e72cdea709a..470fe96ff022 100644 --- a/python/src/com/jetbrains/python/codeInsight/postfix/PyPostfixTemplateExpressionCondition.kt +++ b/python/src/com/jetbrains/python/codeInsight/postfix/PyPostfixTemplateExpressionCondition.kt @@ -6,7 +6,7 @@ import com.intellij.codeInsight.template.postfix.templates.editable.PostfixTempl import com.intellij.openapi.util.NlsSafe import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.QualifiedName -import com.jetbrains.extensions.python.inherits +import com.jetbrains.python.extensions.inherits import com.jetbrains.python.PyBundle import com.jetbrains.python.PyNames import com.jetbrains.python.psi.* diff --git a/python/src/com/jetbrains/extensions/python/FileChooserDescriptorExt.kt b/python/src/com/jetbrains/python/extensions/FileChooserDescriptorExt.kt similarity index 64% rename from python/src/com/jetbrains/extensions/python/FileChooserDescriptorExt.kt rename to python/src/com/jetbrains/python/extensions/FileChooserDescriptorExt.kt index 901d8b13a3b3..2d6d51ab9850 100644 --- a/python/src/com/jetbrains/extensions/python/FileChooserDescriptorExt.kt +++ b/python/src/com/jetbrains/python/extensions/FileChooserDescriptorExt.kt @@ -1,7 +1,5 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. - */ -package com.jetbrains.extensions.python +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.extensions import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.jetbrains.python.PyNames diff --git a/python/src/com/jetbrains/extensions/python/ProgressManagerExt.kt b/python/src/com/jetbrains/python/extensions/ProgressManagerExt.kt similarity index 75% rename from python/src/com/jetbrains/extensions/python/ProgressManagerExt.kt rename to python/src/com/jetbrains/python/extensions/ProgressManagerExt.kt index b91839fd8996..33ab47eca6bd 100644 --- a/python/src/com/jetbrains/extensions/python/ProgressManagerExt.kt +++ b/python/src/com/jetbrains/python/extensions/ProgressManagerExt.kt @@ -1,5 +1,5 @@ -// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.jetbrains.extensions.python +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.extensions import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressManager diff --git a/python/src/com/jetbrains/extensions/python/PyFunctionExt.kt b/python/src/com/jetbrains/python/extensions/PyFunctionExt.kt similarity index 77% rename from python/src/com/jetbrains/extensions/python/PyFunctionExt.kt rename to python/src/com/jetbrains/python/extensions/PyFunctionExt.kt index f70a7aff3faa..84fad945f057 100644 --- a/python/src/com/jetbrains/extensions/python/PyFunctionExt.kt +++ b/python/src/com/jetbrains/python/extensions/PyFunctionExt.kt @@ -1,5 +1,5 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.jetbrains.extensions.python +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.extensions import com.jetbrains.python.FunctionParameter import com.jetbrains.python.psi.PyFunction diff --git a/python/src/com/jetbrains/extensions/PythonProjectExt.kt b/python/src/com/jetbrains/python/extensions/PythonProjectExt.kt similarity index 92% rename from python/src/com/jetbrains/extensions/PythonProjectExt.kt rename to python/src/com/jetbrains/python/extensions/PythonProjectExt.kt index e36fc75df919..b10d274037a1 100644 --- a/python/src/com/jetbrains/extensions/PythonProjectExt.kt +++ b/python/src/com/jetbrains/python/extensions/PythonProjectExt.kt @@ -1,7 +1,7 @@ // Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. @file:JvmName("PythonProjectExt") -package com.jetbrains.extensions +package com.jetbrains.python.extensions import com.intellij.openapi.project.Project import com.intellij.openapi.project.modules diff --git a/python/src/com/jetbrains/extensions/RegistryValueExt.kt b/python/src/com/jetbrains/python/extensions/RegistryValueExt.kt similarity index 95% rename from python/src/com/jetbrains/extensions/RegistryValueExt.kt rename to python/src/com/jetbrains/python/extensions/RegistryValueExt.kt index 6908745d6468..7753e3490c22 100644 --- a/python/src/com/jetbrains/extensions/RegistryValueExt.kt +++ b/python/src/com/jetbrains/python/extensions/RegistryValueExt.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.jetbrains.extensions +package com.jetbrains.python.extensions import com.intellij.openapi.util.registry.RegistryValue diff --git a/python/src/com/jetbrains/extensions/StringLiteralExpressionExt.kt b/python/src/com/jetbrains/python/extensions/StringLiteralExpressionExt.kt similarity index 97% rename from python/src/com/jetbrains/extensions/StringLiteralExpressionExt.kt rename to python/src/com/jetbrains/python/extensions/StringLiteralExpressionExt.kt index 5f54f7c5e0ad..2aa3c1c7f178 100644 --- a/python/src/com/jetbrains/extensions/StringLiteralExpressionExt.kt +++ b/python/src/com/jetbrains/python/extensions/StringLiteralExpressionExt.kt @@ -1,5 +1,5 @@ // Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.jetbrains.extensions +package com.jetbrains.python.extensions import com.jetbrains.python.FunctionParameter import com.jetbrains.python.psi.PyArgumentList diff --git a/python/src/com/jetbrains/extensions/TargetWithVariantExt.kt b/python/src/com/jetbrains/python/extensions/TargetWithVariantExt.kt similarity index 93% rename from python/src/com/jetbrains/extensions/TargetWithVariantExt.kt rename to python/src/com/jetbrains/python/extensions/TargetWithVariantExt.kt index 80ce246e97c0..df1389dc3063 100644 --- a/python/src/com/jetbrains/extensions/TargetWithVariantExt.kt +++ b/python/src/com/jetbrains/python/extensions/TargetWithVariantExt.kt @@ -1,5 +1,5 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.extensions +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.extensions import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile diff --git a/python/src/com/jetbrains/extensions/python/VirtualFileExt.kt b/python/src/com/jetbrains/python/extensions/VirtualFileExt.kt similarity index 61% rename from python/src/com/jetbrains/extensions/python/VirtualFileExt.kt rename to python/src/com/jetbrains/python/extensions/VirtualFileExt.kt index ae0b5bee012f..4fab87f2d42f 100644 --- a/python/src/com/jetbrains/extensions/python/VirtualFileExt.kt +++ b/python/src/com/jetbrains/python/extensions/VirtualFileExt.kt @@ -1,5 +1,5 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.jetbrains.extensions.python +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.extensions import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile diff --git a/python/src/com/jetbrains/python/extensions/package-info.java b/python/src/com/jetbrains/python/extensions/package-info.java new file mode 100644 index 000000000000..69dd063c7cd5 --- /dev/null +++ b/python/src/com/jetbrains/python/extensions/package-info.java @@ -0,0 +1,8 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +/** + * Extension methods for various classes. + * Methods are transparent for Kotlin, while in Java you must use following pattern: class MyClass has extensions in MyClassExtKt. + * @author Ilya.Kazakevich + */ +package com.jetbrains.python.extensions; \ No newline at end of file diff --git a/python/src/com/jetbrains/python/packaging/management/PythonPackagesUpdater.kt b/python/src/com/jetbrains/python/packaging/management/PythonPackagesUpdater.kt index 295d938e2257..54fc035ffbb2 100644 --- a/python/src/com/jetbrains/python/packaging/management/PythonPackagesUpdater.kt +++ b/python/src/com/jetbrains/python/packaging/management/PythonPackagesUpdater.kt @@ -6,7 +6,7 @@ import com.intellij.openapi.components.service import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project import com.intellij.openapi.startup.ProjectActivity -import com.jetbrains.extensions.hasPython +import com.jetbrains.python.extensions.hasPython import com.jetbrains.python.packaging.PyPIPackageRanking import com.jetbrains.python.packaging.pip.PypiPackageCache import kotlinx.coroutines.Dispatchers diff --git a/python/src/com/jetbrains/reflection/ReflectionUtils.kt b/python/src/com/jetbrains/python/reflection/ReflectionUtils.kt similarity index 96% rename from python/src/com/jetbrains/reflection/ReflectionUtils.kt rename to python/src/com/jetbrains/python/reflection/ReflectionUtils.kt index 4d102f1bb20e..901b3de70eb4 100644 --- a/python/src/com/jetbrains/reflection/ReflectionUtils.kt +++ b/python/src/com/jetbrains/python/reflection/ReflectionUtils.kt @@ -1,5 +1,5 @@ -// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.jetbrains.reflection +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.reflection import java.beans.Introspector import java.beans.PropertyDescriptor diff --git a/python/src/com/jetbrains/python/remote/NewFilesProcessor.java b/python/src/com/jetbrains/python/remote/NewFilesProcessor.java index 7e68c9e1cd5c..5c2ee9d2cb53 100644 --- a/python/src/com/jetbrains/python/remote/NewFilesProcessor.java +++ b/python/src/com/jetbrains/python/remote/NewFilesProcessor.java @@ -10,7 +10,7 @@ import com.intellij.openapi.vcs.checkin.CheckinEnvironment; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.util.ArrayUtilRt; import com.intellij.vcsUtil.VcsUtil; -import com.jetbrains.extensions.ModuleExtKt; +import com.jetbrains.python.extensions.ModuleExtKt; import org.jetbrains.annotations.NotNull; import java.util.Arrays; diff --git a/python/src/com/jetbrains/python/remote/PythonRemoteInterpreterManager.java b/python/src/com/jetbrains/python/remote/PythonRemoteInterpreterManager.java index 1d03d4029fed..8efa5fc32bde 100644 --- a/python/src/com/jetbrains/python/remote/PythonRemoteInterpreterManager.java +++ b/python/src/com/jetbrains/python/remote/PythonRemoteInterpreterManager.java @@ -17,12 +17,12 @@ import com.intellij.remote.RemoteSdkAdditionalData; import com.intellij.remote.RemoteSdkProperties; import com.intellij.util.PathMappingSettings; import com.intellij.util.containers.ContainerUtil; -import com.jetbrains.extensions.python.ProgressManagerExtKt; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.console.PyConsoleProcessHandler; import com.jetbrains.python.console.PydevConsoleCommunication; import com.jetbrains.python.console.PythonConsoleView; +import com.jetbrains.python.extensions.ProgressManagerExtKt; import com.jetbrains.python.remote.PyRemotePathMapper.PyPathMappingType; import kotlin.jvm.functions.Function0; import org.jdom.Element; diff --git a/python/src/com/jetbrains/python/run/PyBrowseActionListener.kt b/python/src/com/jetbrains/python/run/PyBrowseActionListener.kt index fc360ecbecac..aad3ca5b7372 100644 --- a/python/src/com/jetbrains/python/run/PyBrowseActionListener.kt +++ b/python/src/com/jetbrains/python/run/PyBrowseActionListener.kt @@ -8,7 +8,7 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory import com.intellij.openapi.ui.TextBrowseFolderListener import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile -import com.jetbrains.extensions.python.withPythonFiles +import com.jetbrains.python.extensions.withPythonFiles open class PyBrowseActionListener @JvmOverloads diff --git a/python/src/com/jetbrains/python/run/PythonImportErrorFilter.kt b/python/src/com/jetbrains/python/run/PythonImportErrorFilter.kt index 5efa9876e565..60f6334dfd81 100644 --- a/python/src/com/jetbrains/python/run/PythonImportErrorFilter.kt +++ b/python/src/com/jetbrains/python/run/PythonImportErrorFilter.kt @@ -11,7 +11,6 @@ import com.intellij.openapi.actionSystem.ex.ActionUtil import com.intellij.openapi.actionSystem.impl.SimpleDataContext import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.EditorCustomElementRenderer -import com.intellij.openapi.editor.impl.EditorImpl import com.intellij.openapi.project.DumbAwareAction import com.intellij.openapi.project.Project import com.intellij.openapi.ui.JBPopupMenu @@ -19,7 +18,7 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.FilenameIndex import com.intellij.psi.search.GlobalSearchScope import com.intellij.refactoring.actions.RenameElementAction -import com.jetbrains.extensions.python.toPsi +import com.jetbrains.python.extensions.toPsi import com.jetbrains.python.PyBundle import java.awt.Point import java.awt.event.MouseEvent diff --git a/python/src/com/jetbrains/python/run/PythonRunConfigurationForm.java b/python/src/com/jetbrains/python/run/PythonRunConfigurationForm.java index 63481e7739b9..2b3fedd8d9db 100644 --- a/python/src/com/jetbrains/python/run/PythonRunConfigurationForm.java +++ b/python/src/com/jetbrains/python/run/PythonRunConfigurationForm.java @@ -19,9 +19,9 @@ import com.intellij.ui.PanelWithAnchor; import com.intellij.ui.UserActivityProviderComponent; import com.intellij.ui.components.JBComboBoxLabel; import com.intellij.util.containers.ContainerUtil; -import com.jetbrains.extensions.python.FileChooserDescriptorExtKt; import com.jetbrains.python.PyBundle; import com.jetbrains.python.debugger.PyDebuggerOptionsProvider; +import com.jetbrains.python.extensions.FileChooserDescriptorExtKt; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; diff --git a/python/src/com/jetbrains/python/run/PythonRunConfigurationPanel.kt b/python/src/com/jetbrains/python/run/PythonRunConfigurationPanel.kt index 093b14d632d4..39fa6d111621 100644 --- a/python/src/com/jetbrains/python/run/PythonRunConfigurationPanel.kt +++ b/python/src/com/jetbrains/python/run/PythonRunConfigurationPanel.kt @@ -11,10 +11,10 @@ import com.intellij.ui.RawCommandLineEditor import com.intellij.ui.components.JBComboBoxLabel import com.intellij.ui.dsl.builder.* import com.intellij.ui.layout.selected -import com.jetbrains.PySymbolFieldWithBrowseButton -import com.jetbrains.extensions.ModuleBasedContextAnchor -import com.jetbrains.extensions.ProjectSdkContextAnchor -import com.jetbrains.isPythonModule +import com.jetbrains.python.PySymbolFieldWithBrowseButton +import com.jetbrains.python.extensions.ModuleBasedContextAnchor +import com.jetbrains.python.extensions.ProjectSdkContextAnchor +import com.jetbrains.python.isPythonModule import com.jetbrains.python.PyBundle import java.util.* import javax.swing.ButtonGroup diff --git a/python/src/com/jetbrains/python/run/configuration/PyScriptOrModuleFragment.kt b/python/src/com/jetbrains/python/run/configuration/PyScriptOrModuleFragment.kt index ea316b250e36..cef104627b70 100644 --- a/python/src/com/jetbrains/python/run/configuration/PyScriptOrModuleFragment.kt +++ b/python/src/com/jetbrains/python/run/configuration/PyScriptOrModuleFragment.kt @@ -14,10 +14,10 @@ import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.psi.PsiFileSystemItem import com.intellij.ui.TextAccessor import com.intellij.ui.components.fields.ExtendableTextField -import com.jetbrains.PySymbolFieldWithBrowseButton -import com.jetbrains.extensions.ModuleBasedContextAnchor -import com.jetbrains.extensions.ProjectSdkContextAnchor -import com.jetbrains.isPythonModule +import com.jetbrains.python.PySymbolFieldWithBrowseButton +import com.jetbrains.python.extensions.ModuleBasedContextAnchor +import com.jetbrains.python.extensions.ProjectSdkContextAnchor +import com.jetbrains.python.isPythonModule import com.jetbrains.python.PyBundle import com.jetbrains.python.run.PythonRunConfiguration import java.awt.GridBagConstraints diff --git a/python/src/com/jetbrains/python/run/targetBasedConfiguration/PyRunTargetVariant.kt b/python/src/com/jetbrains/python/run/targetBasedConfiguration/PyRunTargetVariant.kt index f8bbf1c5babf..897282c7d9ef 100644 --- a/python/src/com/jetbrains/python/run/targetBasedConfiguration/PyRunTargetVariant.kt +++ b/python/src/com/jetbrains/python/run/targetBasedConfiguration/PyRunTargetVariant.kt @@ -8,9 +8,9 @@ import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiElement import com.intellij.psi.util.QualifiedName -import com.jetbrains.extensions.ModuleBasedContextAnchor -import com.jetbrains.extensions.QNameResolveContext -import com.jetbrains.extensions.resolveToElement +import com.jetbrains.python.extensions.ModuleBasedContextAnchor +import com.jetbrains.python.extensions.QNameResolveContext +import com.jetbrains.python.extensions.resolveToElement import com.jetbrains.python.psi.types.TypeEvalContext import com.jetbrains.python.run.AbstractPythonRunConfiguration import com.jetbrains.python.run.PythonRunConfigurationForm diff --git a/python/src/com/jetbrains/python/run/targetBasedConfiguration/PyTargetTypeRefactoring.kt b/python/src/com/jetbrains/python/run/targetBasedConfiguration/PyTargetTypeRefactoring.kt index 12904e2476a3..6488f12a3c12 100644 --- a/python/src/com/jetbrains/python/run/targetBasedConfiguration/PyTargetTypeRefactoring.kt +++ b/python/src/com/jetbrains/python/run/targetBasedConfiguration/PyTargetTypeRefactoring.kt @@ -9,7 +9,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFileSystemItem import com.intellij.psi.PsiNamedElement import com.intellij.psi.util.PsiTreeUtil -import com.jetbrains.extensions.getQName +import com.jetbrains.python.extensions.getQName import com.jetbrains.python.psi.PyQualifiedNameOwner import com.jetbrains.python.run.UndoRefactoringCompletionListener diff --git a/python/src/com/jetbrains/python/sdk/poetry/PoetryRunScript.kt b/python/src/com/jetbrains/python/sdk/poetry/PoetryRunScript.kt index a6635d0b552c..dc235e875d91 100644 --- a/python/src/com/jetbrains/python/sdk/poetry/PoetryRunScript.kt +++ b/python/src/com/jetbrains/python/sdk/poetry/PoetryRunScript.kt @@ -13,7 +13,7 @@ import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile -import com.jetbrains.extensions.python.toPsi +import com.jetbrains.python.extensions.toPsi import com.jetbrains.python.PyBundle import com.jetbrains.python.packaging.PyExecutionException import com.jetbrains.python.run.PythonRunConfigurationProducer diff --git a/python/src/com/jetbrains/serialization/AnnotationSerializationFilter.java b/python/src/com/jetbrains/python/serialization/AnnotationSerializationFilter.java similarity index 56% rename from python/src/com/jetbrains/serialization/AnnotationSerializationFilter.java rename to python/src/com/jetbrains/python/serialization/AnnotationSerializationFilter.java index 3eaea6c9058e..b718093c7ab9 100644 --- a/python/src/com/jetbrains/serialization/AnnotationSerializationFilter.java +++ b/python/src/com/jetbrains/python/serialization/AnnotationSerializationFilter.java @@ -1,19 +1,5 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.jetbrains.serialization; +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.serialization; import com.intellij.util.xmlb.Accessor; import com.intellij.util.xmlb.SerializationFilterBase; diff --git a/python/src/com/jetbrains/serialization/CompoundFilter.java b/python/src/com/jetbrains/python/serialization/CompoundFilter.java similarity index 57% rename from python/src/com/jetbrains/serialization/CompoundFilter.java rename to python/src/com/jetbrains/python/serialization/CompoundFilter.java index 90e3cbaab4bd..0e034ad95e10 100644 --- a/python/src/com/jetbrains/serialization/CompoundFilter.java +++ b/python/src/com/jetbrains/python/serialization/CompoundFilter.java @@ -1,19 +1,5 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.jetbrains.serialization; +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.serialization; import com.intellij.util.xmlb.Accessor; import com.intellij.util.xmlb.SerializationFilter; diff --git a/python/src/com/jetbrains/python/statistics/PyPackageUsagesCollector.kt b/python/src/com/jetbrains/python/statistics/PyPackageUsagesCollector.kt index d40cc038bd78..c0d439358711 100644 --- a/python/src/com/jetbrains/python/statistics/PyPackageUsagesCollector.kt +++ b/python/src/com/jetbrains/python/statistics/PyPackageUsagesCollector.kt @@ -7,7 +7,7 @@ import com.intellij.internal.statistic.eventLog.events.EventFields import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.project.Project -import com.jetbrains.extensions.getSdk +import com.jetbrains.python.extensions.getSdk import com.jetbrains.python.packaging.PyPIPackageCache import com.jetbrains.python.packaging.PyPackageManager import com.jetbrains.python.packaging.management.PythonPackageManager diff --git a/python/src/com/jetbrains/python/statistics/PyStatisticTools.kt b/python/src/com/jetbrains/python/statistics/PyStatisticTools.kt index 84c450ec741d..e7ff24c12ec1 100644 --- a/python/src/com/jetbrains/python/statistics/PyStatisticTools.kt +++ b/python/src/com/jetbrains/python/statistics/PyStatisticTools.kt @@ -11,7 +11,7 @@ import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk -import com.jetbrains.extensions.getSdk +import com.jetbrains.python.extensions.getSdk import com.jetbrains.python.PythonLanguage import com.jetbrains.python.psi.LanguageLevel import com.jetbrains.python.remote.PyRemoteSdkAdditionalDataBase diff --git a/python/src/com/jetbrains/python/testing/PyQNameResolveAndSplitUtils.kt b/python/src/com/jetbrains/python/testing/PyQNameResolveAndSplitUtils.kt index 11571a8d3e25..e4975dba7228 100644 --- a/python/src/com/jetbrains/python/testing/PyQNameResolveAndSplitUtils.kt +++ b/python/src/com/jetbrains/python/testing/PyQNameResolveAndSplitUtils.kt @@ -20,10 +20,10 @@ import com.intellij.psi.PsiDirectory import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.util.QualifiedName -import com.jetbrains.extensions.QNameResolveContext -import com.jetbrains.extensions.getQName -import com.jetbrains.extensions.getRelativeNameTo -import com.jetbrains.extensions.resolveToElement +import com.jetbrains.python.extensions.QNameResolveContext +import com.jetbrains.python.extensions.getQName +import com.jetbrains.python.extensions.getRelativeNameTo +import com.jetbrains.python.extensions.resolveToElement import com.jetbrains.python.PyNames import com.jetbrains.python.psi.PyFile import com.jetbrains.python.psi.PyQualifiedNameOwner diff --git a/python/src/com/jetbrains/python/testing/PyTestSharedForm.java b/python/src/com/jetbrains/python/testing/PyTestSharedForm.java index 298bef419056..9a63dc78136e 100644 --- a/python/src/com/jetbrains/python/testing/PyTestSharedForm.java +++ b/python/src/com/jetbrains/python/testing/PyTestSharedForm.java @@ -32,17 +32,17 @@ import com.intellij.ui.components.JBTextField; import com.intellij.uiDesigner.core.GridConstraints; import com.intellij.util.ThreeState; import com.intellij.util.ui.JBUI; -import com.jetbrains.PySymbolFieldWithBrowseButton; -import com.jetbrains.extensions.ContextAnchor; -import com.jetbrains.extensions.ModuleBasedContextAnchor; -import com.jetbrains.extensions.ProjectSdkContextAnchor; +import com.jetbrains.python.PySymbolFieldWithBrowseButton; +import com.jetbrains.python.extensions.ContextAnchor; +import com.jetbrains.python.extensions.ModuleBasedContextAnchor; +import com.jetbrains.python.extensions.ProjectSdkContextAnchor; import com.jetbrains.python.psi.types.TypeEvalContext; +import com.jetbrains.python.reflection.ReflectionUtilsKt; import com.jetbrains.python.run.AbstractPyCommonOptionsForm; import com.jetbrains.python.run.PyBrowseActionListener; import com.jetbrains.python.run.PyCommonOptionsFormFactory; import com.jetbrains.python.run.targetBasedConfiguration.PyRunTargetVariant; -import com.jetbrains.reflection.ReflectionUtilsKt; -import com.jetbrains.reflection.SimplePropertiesProvider; +import com.jetbrains.python.reflection.SimplePropertiesProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/python/src/com/jetbrains/python/testing/PyTestsShared.kt b/python/src/com/jetbrains/python/testing/PyTestsShared.kt index e7afcdbf08f2..885bcdf24b84 100644 --- a/python/src/com/jetbrains/python/testing/PyTestsShared.kt +++ b/python/src/com/jetbrains/python/testing/PyTestsShared.kt @@ -40,8 +40,8 @@ import com.intellij.refactoring.listeners.RefactoringElementListener import com.intellij.remote.PathMappingProvider import com.intellij.remote.RemoteSdkAdditionalData import com.intellij.util.ThreeState -import com.jetbrains.extensions.* import com.jetbrains.python.PyBundle +import com.jetbrains.python.extensions.* import com.jetbrains.python.packaging.PyPackageManager import com.jetbrains.python.psi.PyFile import com.jetbrains.python.psi.PyFunction @@ -53,10 +53,10 @@ import com.jetbrains.python.run.targetBasedConfiguration.TargetWithVariant import com.jetbrains.python.run.targetBasedConfiguration.createRefactoringListenerIfPossible import com.jetbrains.python.run.targetBasedConfiguration.targetAsPsiElement import com.jetbrains.python.sdk.PythonSdkUtil -import com.jetbrains.reflection.DelegationProperty -import com.jetbrains.reflection.Properties -import com.jetbrains.reflection.Property -import com.jetbrains.reflection.getProperties +import com.jetbrains.python.reflection.DelegationProperty +import com.jetbrains.python.reflection.Properties +import com.jetbrains.python.reflection.Property +import com.jetbrains.python.reflection.getProperties import jetbrains.buildServer.messages.serviceMessages.ServiceMessage import jetbrains.buildServer.messages.serviceMessages.TestStdErr import jetbrains.buildServer.messages.serviceMessages.TestStdOut diff --git a/python/src/com/jetbrains/python/testing/autoDetectTests/PyAutoDetectTestConfiguration.kt b/python/src/com/jetbrains/python/testing/autoDetectTests/PyAutoDetectTestConfiguration.kt index 8db61ef10b17..cabe53a6b437 100644 --- a/python/src/com/jetbrains/python/testing/autoDetectTests/PyAutoDetectTestConfiguration.kt +++ b/python/src/com/jetbrains/python/testing/autoDetectTests/PyAutoDetectTestConfiguration.kt @@ -11,7 +11,7 @@ import com.intellij.util.xmlb.BeanBinding import com.jetbrains.python.testing.PyAbstractTestConfiguration import com.jetbrains.python.testing.PyAbstractTestSettingsEditor import com.jetbrains.python.testing.PyTestSharedForm -import com.jetbrains.reflection.getProperties +import com.jetbrains.python.reflection.getProperties class PyAutoDetectTestConfiguration(project: Project, factory: PyAutoDetectionConfigurationFactory) : PyAbstractTestConfiguration(project, factory) { diff --git a/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixture.kt b/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixture.kt index f99f0652e214..b062d857afe5 100644 --- a/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixture.kt +++ b/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixture.kt @@ -11,7 +11,7 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.PathUtil import com.intellij.util.Processor import com.intellij.util.ThreeState -import com.jetbrains.extensions.getSdk +import com.jetbrains.python.extensions.getSdk import com.jetbrains.python.psi.* import com.jetbrains.python.psi.impl.getNamedArgument import com.jetbrains.python.psi.stubs.PyDecoratorStubIndex diff --git a/python/src/com/jetbrains/python/testing/tox/PyToxConfiguration.java b/python/src/com/jetbrains/python/testing/tox/PyToxConfiguration.java index 8a28b7b83d25..47b1197236db 100644 --- a/python/src/com/jetbrains/python/testing/tox/PyToxConfiguration.java +++ b/python/src/com/jetbrains/python/testing/tox/PyToxConfiguration.java @@ -18,8 +18,8 @@ import com.intellij.util.xmlb.SkipEmptySerializationFilter; import com.intellij.util.xmlb.XmlSerializer; import com.intellij.util.xmlb.annotations.Tag; import com.jetbrains.python.testing.AbstractPythonTestRunConfiguration; -import com.jetbrains.serialization.AnnotationSerializationFilter; -import com.jetbrains.serialization.CompoundFilter; +import com.jetbrains.python.serialization.AnnotationSerializationFilter; +import com.jetbrains.python.serialization.CompoundFilter; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/python/testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java b/python/testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java index f804f57bf346..198667310321 100644 --- a/python/testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java +++ b/python/testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java @@ -27,10 +27,10 @@ import com.intellij.testFramework.fixtures.impl.ModuleFixtureBuilderImpl; import com.intellij.testFramework.fixtures.impl.ModuleFixtureImpl; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; -import com.jetbrains.extensions.ModuleExtKt; import com.jetbrains.python.PyNames; import com.jetbrains.python.PythonModuleTypeBase; import com.jetbrains.python.PythonTestUtil; +import com.jetbrains.python.extensions.ModuleExtKt; import com.jetbrains.python.packaging.PyCondaPackageManagerImpl; import com.jetbrains.python.packaging.PyPackageManager; import com.jetbrains.python.psi.LanguageLevel; diff --git a/python/testSrc/com/jetbrains/env/PyProcessWithConsoleTestTask.java b/python/testSrc/com/jetbrains/env/PyProcessWithConsoleTestTask.java index 85b4da9ef898..9cd33d2f5acf 100644 --- a/python/testSrc/com/jetbrains/env/PyProcessWithConsoleTestTask.java +++ b/python/testSrc/com/jetbrains/env/PyProcessWithConsoleTestTask.java @@ -31,7 +31,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.EdtTestUtil; import com.intellij.testFramework.common.ThreadLeakTracker; import com.intellij.xdebugger.XDebuggerTestUtil; -import com.jetbrains.extensions.ModuleExtKt; +import com.jetbrains.python.extensions.ModuleExtKt; import com.jetbrains.python.tools.sdkTools.SdkCreationType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/python/testSrc/com/jetbrains/env/python/testing/CreateConfigurationMultipleCasesTask.java b/python/testSrc/com/jetbrains/env/python/testing/CreateConfigurationMultipleCasesTask.java index 204670292bdd..a78c1b46e402 100644 --- a/python/testSrc/com/jetbrains/env/python/testing/CreateConfigurationMultipleCasesTask.java +++ b/python/testSrc/com/jetbrains/env/python/testing/CreateConfigurationMultipleCasesTask.java @@ -18,7 +18,7 @@ package com.jetbrains.env.python.testing; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; -import com.jetbrains.extensions.TargetWithVariantExtKt; +import com.jetbrains.python.extensions.TargetWithVariantExtKt; import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyFunction;