Add initial platform independent tests for Python PSI

GitOrigin-RevId: bf0ff97f9d3a8f54cbadd91e6f68191bc18341cc
This commit is contained in:
Stanislav Utikeev
2019-12-03 15:11:09 +00:00
committed by intellij-monorepo-bot
parent 431b3e0037
commit b3d4556fd2
38 changed files with 932 additions and 14 deletions
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,9 @@
<idea-plugin>
<extensionPoints>
<extensionPoint name="languageInjector"
interface="com.intellij.psi.LanguageInjector"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<projectService serviceImplementation="com.intellij.psi.search.scope.packageSet.NamedScopeManager"/>
</extensions>
</idea-plugin>
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,13 @@
<idea-plugin>
<extensionPoints>
<extensionPoint name="severitiesProvider"
interface="com.intellij.codeInsight.daemon.impl.SeveritiesProvider"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.intellij.codeInspection.ex.InspectionToolRegistrar"/>
<projectService serviceImplementation="com.intellij.profile.codeInspection.ProjectInspectionProfileManager" preload="true"/>
<postStartupActivity implementation="com.intellij.profile.codeInspection.ProjectInspectionProfileManager$ProjectInspectionProfileStartUpActivity"/>
<projectService serviceInterface="com.intellij.packageDependencies.DependencyValidationManager"
serviceImplementation="com.intellij.packageDependencies.DependencyValidationManagerImpl"/>
</extensions>
</idea-plugin>
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,27 @@
<idea-plugin>
<extensionPoints>
<!--suppress PluginXmlValidity -->
<extensionPoint name="applicationService" beanClass="com.intellij.openapi.components.ServiceDescriptor" dynamic="true"/>
<!--suppress PluginXmlValidity -->
<extensionPoint name="projectService" beanClass="com.intellij.openapi.components.ServiceDescriptor" dynamic="true"/>
<extensionPoint name="virtualFileManagerListener" interface="com.intellij.openapi.vfs.VirtualFileManagerListener"/>
<extensionPoint name="vfs.asyncListener" interface="com.intellij.openapi.vfs.AsyncFileListener" />
<extensionPoint name="postStartupActivity" interface="com.intellij.openapi.startup.StartupActivity" dynamic="true"/>
<extensionPoint name="backgroundPostStartupActivity" interface="com.intellij.openapi.startup.StartupActivity" dynamic="true"/>
<extensionPoint name="fileTypeDetector" interface="com.intellij.openapi.fileTypes.FileTypeRegistry$FileTypeDetector"/>
<extensionPoint name="editorFactoryDocumentListener" interface="com.intellij.openapi.editor.event.DocumentListener"/>
<extensionPoint name="multiHostInjector"
interface="com.intellij.lang.injection.MultiHostInjector"
area="IDEA_PROJECT"/>
<extensionPoint name="writingAccessProvider" area="IDEA_PROJECT" interface="com.intellij.openapi.vfs.WritingAccessProvider"/>
<extensionPoint name="metaLanguage" interface="com.intellij.lang.MetaLanguage"/>
<extensionPoint name="lang.parserDefinition" beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
<with attribute="implementationClass" implements="com.intellij.lang.ParserDefinition"/>
</extensionPoint>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceInterface="com.intellij.util.messages.MessageBusFactory"
serviceImplementation="com.intellij.util.messages.impl.MessageBusFactoryImpl"/>
</extensions>
</idea-plugin>
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,40 @@
<idea-plugin>
<extensionPoints>
<extensionPoint name="virtualFileSystem" beanClass="com.intellij.openapi.vfs.impl.VirtualFileManagerImpl$VirtualFileSystemBean">
<with attribute="implementationClass" implements="com.intellij.openapi.vfs.VirtualFileSystem"/>
</extensionPoint>
<extensionPoint name="psi.treeChangePreprocessor"
interface="com.intellij.psi.impl.PsiTreeChangePreprocessor"
area="IDEA_PROJECT"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceInterface="com.intellij.diagnostic.PluginProblemReporter"
serviceImplementation="com.intellij.diagnostic.PluginProblemReporterImpl"/>
<applicationService serviceImplementation="com.intellij.diagnostic.PerformanceWatcher" preload="true"/>
<applicationService serviceInterface="com.intellij.openapi.application.ApplicationInfo"
serviceImplementation="com.intellij.openapi.application.impl.ApplicationInfoImpl"/>
<projectService serviceInterface="com.intellij.psi.PsiManager"
serviceImplementation="com.intellij.psi.impl.PsiManagerImpl" preload="true"/>
<applicationService serviceInterface="com.intellij.psi.impl.DocumentCommitProcessor"
serviceImplementation="com.intellij.psi.impl.DocumentCommitThread"/>
<projectService serviceInterface="com.intellij.psi.SmartPointerManager"
serviceImplementation="com.intellij.psi.impl.smartPointers.SmartPointerManagerImpl"/>
<projectService serviceInterface="com.intellij.psi.impl.file.PsiDirectoryFactory"
serviceImplementation="com.intellij.psi.impl.file.PsiDirectoryFactoryImpl"/>
<projectService serviceInterface="com.intellij.pom.PomModel"
serviceImplementation="com.intellij.pom.core.impl.PomModelImpl"/>
<projectService serviceInterface="com.intellij.psi.util.CachedValuesManager"
serviceImplementation="com.intellij.util.CachedValuesManagerImpl"/>
<applicationService serviceInterface="com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry"
serviceImplementation="com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl"/>
<projectService serviceInterface="com.intellij.psi.util.PsiModificationTracker"
serviceImplementation="com.intellij.psi.impl.PsiModificationTrackerImpl"/>
<applicationService serviceInterface="com.intellij.lang.PsiBuilderFactory"
serviceImplementation="com.intellij.lang.impl.PsiBuilderFactoryImpl"/>
<projectService serviceInterface="com.intellij.util.CachedValuesFactory"
serviceImplementation="com.intellij.psi.impl.PsiCachedValuesFactory"/>
<projectService serviceImplementation="com.intellij.psi.impl.source.resolve.ResolveCache"/>
</extensions>
</idea-plugin>
@@ -537,7 +537,8 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor, Plu
return build;
}
void registerExtensionPoints(@NotNull ExtensionsAreaImpl area, @NotNull ComponentManager componentManager) {
@ApiStatus.Internal
public void registerExtensionPoints(@NotNull ExtensionsAreaImpl area, @NotNull ComponentManager componentManager) {
ContainerDescriptor containerDescriptor;
boolean clonePoint = true;
if (componentManager.getPicoContainer().getParent() == null) {
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,13 @@
<idea-plugin>
<extensionPoints>
<extensionPoint name="editorFactoryListener" interface="com.intellij.openapi.editor.event.EditorFactoryListener"/>
<extensionPoint name="syntaxHighlighter"
beanClass="com.intellij.openapi.extensions.KeyedFactoryEPBean">
<with attribute="implementationClass" implements="com.intellij.openapi.fileTypes.SyntaxHighlighter"/>
</extensionPoint>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.intellij.ide.ui.UISettings" preload="true"/>
<applicationService serviceImplementation="com.intellij.ide.ui.NotRoamableUiSettings"/>
</extensions>
</idea-plugin>
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,9 @@
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.intellij.openapi.editor.colors.impl.AppEditorFontOptions"/>
<applicationService serviceInterface="com.intellij.openapi.editor.colors.EditorFontCache"
serviceImplementation="com.intellij.openapi.editor.colors.impl.EditorFontCacheImpl"/>
<applicationService serviceInterface="com.intellij.openapi.editor.highlighter.EditorHighlighterFactory"
serviceImplementation="com.intellij.openapi.editor.highlighter.EditorHighlighterFactoryImpl"/>
</extensions>
</idea-plugin>
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,6 @@
<idea-plugin>
<extensionPoints>
<extensionPoint name="fileBasedIndex" interface="com.intellij.util.indexing.FileBasedIndexExtension"/>
<extensionPoint name="indexedRootsProvider" interface="com.intellij.util.indexing.IndexableSetContributor"/>
</extensionPoints>
</idea-plugin>
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,7 @@
<idea-plugin>
<extensionPoints>
<extensionPoint name="moduleExtension" interface="com.intellij.openapi.roots.ModuleExtension" area="IDEA_MODULE"/>
<extensionPoint name="orderEnumerationHandlerFactory" interface="com.intellij.openapi.roots.OrderEnumerationHandler$Factory"/>
<extensionPoint name="filePropertyPusher" interface="com.intellij.openapi.roots.impl.FilePropertyPusher"/>
</extensionPoints>
</idea-plugin>
@@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,23 @@
<idea-plugin>
<extensionPoints>
<extensionPoint name="additionalLibraryRootsProvider" interface="com.intellij.openapi.roots.AdditionalLibraryRootsProvider"/>
<extensionPoint name="directoryIndexExcludePolicy" interface="com.intellij.openapi.roots.impl.DirectoryIndexExcludePolicy"
area="IDEA_PROJECT"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<projectService serviceInterface="com.intellij.openapi.roots.impl.DirectoryIndex"
serviceImplementation="com.intellij.openapi.roots.impl.DirectoryIndexImpl" preload="true"/>
<projectService serviceInterface="com.intellij.openapi.components.PathMacroManager"
serviceImplementation="com.intellij.openapi.components.impl.ProjectPathMacroManager"/>
<projectService serviceInterface="com.intellij.openapi.roots.impl.ModifiableModelCommitterService"
serviceImplementation="com.intellij.openapi.roots.impl.ModifiableModelCommitterServiceImpl"/>
<projectService serviceInterface="com.intellij.ide.util.PropertiesComponent"
serviceImplementation="com.intellij.ide.util.ProjectPropertiesComponentImpl"/>
<applicationService serviceInterface="com.intellij.openapi.project.ProjectLocator"
serviceImplementation="com.intellij.openapi.project.ProjectLocatorImpl"/>
<projectService serviceInterface="com.intellij.openapi.roots.FileIndexFacade"
serviceImplementation="com.intellij.openapi.roots.impl.ProjectFileIndexFacade"/>
<projectService serviceInterface="com.intellij.openapi.roots.ProjectFileIndex"
serviceImplementation="com.intellij.openapi.roots.impl.ProjectFileIndexImpl"/>
</extensions>
</idea-plugin>
@@ -6,10 +6,12 @@ import com.intellij.mock.MockComponentManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.components.PathMacroManager;
import com.intellij.openapi.components.impl.ModulePathMacroManager;
import com.intellij.openapi.extensions.ExtensionPoint;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.module.impl.ModuleEx;
import com.intellij.openapi.module.impl.ModuleScopeProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleExtension;
import com.intellij.openapi.roots.ModuleFileIndex;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.impl.ModuleFileIndexImpl;
@@ -37,6 +39,9 @@ public class CoreModule extends MockComponentManager implements ModuleEx {
myProject = project;
myPath = moduleFilePath;
//noinspection TestOnlyProblems
getExtensionArea()
.registerExtensionPoint(ModuleExtension.EP_NAME, ModuleExtension.class.getName(), ExtensionPoint.Kind.INTERFACE, parentDisposable);
initModuleExtensions();
final ModuleRootManagerImpl moduleRootManager =
@@ -0,0 +1,15 @@
<idea-plugin>
<extensionPoints>
<extensionPoint qualifiedName="Pythonid.dialectsTokenSetContributor" interface="com.jetbrains.python.PythonDialectsTokenSetContributor"/>
<extensionPoint qualifiedName="Pythonid.pyReferenceResolveProvider" interface="com.jetbrains.python.psi.resolve.PyReferenceResolveProvider"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<fileType name="Python"
language="Python"
extensions="py;pyw;"
implementationClass="com.jetbrains.python.PythonFileType"
fieldName="INSTANCE"/>
<projectService serviceInterface="com.jetbrains.python.psi.types.TypeEvalContextCache"
serviceImplementation="com.jetbrains.python.psi.types.TypeEvalContextCacheImpl"/>
</extensions>
</idea-plugin>
@@ -22,5 +22,6 @@
<orderEntry type="library" name="StreamEx" level="project" />
<orderEntry type="module" module-name="intellij.platform.projectModel.impl" />
<orderEntry type="module" module-name="intellij.platform.analysis.impl" />
<orderEntry type="module" module-name="intellij.platform.serviceContainer" />
</component>
</module>
@@ -0,0 +1,47 @@
<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude">
<id>com.intellij</id>
<name>IDEA CORE</name>
<xi:include href="/META-INF/python-psi-api.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/python-psi-impl.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/core-api.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/core-impl.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/projectModel-api.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/projectModel-impl.xml" xpointer="xpointer(/idea-plugin/*)"/>
<!-- <xi:include href="/META-INF/editor-ui-api.xml" xpointer="xpointer(/idea-plugin/*)"/>-->
<!-- <xi:include href="/META-INF/editor-ui-ex.xml" xpointer="xpointer(/idea-plugin/*)"/>-->
<xi:include href="/META-INF/analysis-api.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/analysis-impl.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/indexing-api.xml" xpointer="xpointer(/idea-plugin/*)"/>
<extensions defaultExtensionNs="com.intellij">
<!-- <projectService serviceInterface="com.intellij.openapi.roots.impl.ModifiableModelCommitterService"-->
<!-- serviceImplementation="com.intellij.openapi.roots.impl.DummyModifiableModelCommitterService"-->
<!-- overrides="true"/>-->
<!-- <applicationService serviceInterface="com.jetbrains.python.module.PyModuleService"-->
<!-- serviceImplementation="com.jetbrains.python.module.MockPyModuleService"/>-->
<applicationService serviceInterface="com.intellij.openapi.components.impl.stores.IComponentStore"
serviceImplementation="com.intellij.openapi.components.impl.stores.MockPsiComponentStore"/>
<projectService serviceInterface="com.intellij.openapi.components.impl.stores.IComponentStore"
serviceImplementation="com.intellij.openapi.components.impl.stores.MockPsiComponentStore"/>
<applicationService serviceInterface="com.intellij.openapi.vfs.encoding.EncodingManager"
serviceImplementation="com.intellij.core.CoreEncodingProjectManager"/>
<projectService serviceInterface="com.intellij.psi.PsiDocumentManager"
serviceImplementation="com.intellij.core.CorePsiDocumentManager"/>
<applicationService serviceInterface="com.intellij.openapi.progress.ProgressManager"
serviceImplementation="com.intellij.openapi.progress.impl.CoreProgressManager"/>
</extensions>
<project-components>
<component>
<interface-class>com.intellij.openapi.roots.ProjectRootManager</interface-class>
<implementation-class>com.intellij.openapi.roots.impl.ProjectRootManagerImpl</implementation-class>
<loadForDefaultProject/>
</component>
<component>
<interface-class>com.intellij.openapi.module.ModuleManager</interface-class>
<implementation-class>com.intellij.openapi.module.impl.SingleModuleManager</implementation-class>
<loadForDefaultProject/>
</component>
</project-components>
</idea-plugin>
@@ -40,6 +40,7 @@
implementationClass="com.jetbrains.python.psi.impl.PyStringLiteralExpressionManipulator"/>
<lang.elementManipulator forClass="com.jetbrains.python.psi.PyKeywordArgument"
implementationClass="com.jetbrains.python.psi.impl.PyKeywordArgumentManipulator"/>
<lang.parserDefinition language="Python" implementationClass="com.jetbrains.python.PythonParserDefinition"/>
<moduleService serviceInterface="com.jetbrains.python.psi.resolve.PythonPathCache"
serviceImplementation="com.jetbrains.python.psi.resolve.PythonModulePathCache"/>
@@ -135,8 +136,6 @@
<typeProvider implementation="com.jetbrains.python.codeInsight.typing.PyAncestorTypeProvider" order="last"/>
</extensions>
</idea-plugin>
@@ -0,0 +1,16 @@
<component>
<version major="1" minor="0" eap="true"/>
<company name="JetBrains s.r.o." url="https://www.jetbrains.com"/>
<build number="__BUILD_NUMBER__" date="__BUILD_DATE__"/>
<logo url="/artwork/xxx.png" textcolor="3e506c" />
<about url="/artwork/xxx.png" foreground="192c40" linkColor="011b7e" logoX="300" logoY="265" logoW="75" logoH="30"/>
<icon size12="/artwork/xxx.png" size16="/artwork/xxx.png" size32="/artwork/xxx.png"/>
<names product="PythonPsi"/>
<welcome-screen logo-url="/artwork/xxx.png"/>
<plugins url="https://plugins.jetbrains.com/"/>
<update-urls check="https://www.jetbrains.com/updates/updates.xml"
patches="https://download.jetbrains.com/objc/"/>
</component>
@@ -0,0 +1,233 @@
package com.intellij.openapi.application.impl
import com.intellij.ide.plugins.ContainerDescriptor
import com.intellij.ide.plugins.IdeaPluginDescriptorImpl
import com.intellij.mock.MockFileDocumentManagerImpl
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.*
import com.intellij.openapi.application.ex.ApplicationEx
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.impl.DocumentImpl
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.*
import com.intellij.serviceContainer.PlatformComponentManagerImpl
import com.intellij.testFramework.registerServiceInstance
import org.jetbrains.ide.PooledThreadExecutor
import java.awt.Component
import java.util.concurrent.Callable
import java.util.concurrent.Future
import javax.swing.JComponent
import javax.swing.SwingUtilities
class MockPsiApplication(parentDisposable: Disposable) : PlatformComponentManagerImpl(null), ApplicationEx {
private val DOCUMENT_KEY: Key<Document> = Key.create("MOCK_DOCUMENT_KEY")
init {
Disposer.register(parentDisposable, this)
myPicoContainer.registerComponentInstance(Application::class.java, this)
registerServiceInstance(FileDocumentManager::class.java,
MockFileDocumentManagerImpl({ seq: CharSequence -> DocumentImpl(seq) }, DOCUMENT_KEY))
}
override fun getContainerDescriptor(pluginDescriptor: IdeaPluginDescriptorImpl): ContainerDescriptor =
pluginDescriptor.app
override fun runReadAction(action: Runnable) {
action.run()
}
override fun <T : Any?> runReadAction(computation: Computable<T>): T = computation.compute()
override fun <T : Any?, E : Throwable?> runReadAction(computation: ThrowableComputable<T, E>): T = computation.compute()
override fun runWriteAction(action: Runnable) {
action.run()
}
override fun <T : Any?> runWriteAction(computation: Computable<T>): T = computation.compute()
override fun <T : Any?, E : Throwable?> runWriteAction(computation: ThrowableComputable<T, E>): T = computation.compute()
override fun hasWriteAction(actionClass: Class<*>): Boolean = false
override fun assertReadAccessAllowed() {
}
override fun assertWriteAccessAllowed() {
}
override fun assertIsDispatchThread() {
}
override fun addApplicationListener(listener: ApplicationListener) {
}
override fun addApplicationListener(listener: ApplicationListener, parent: Disposable) {
}
override fun removeApplicationListener(listener: ApplicationListener) {
}
override fun saveAll() {
}
override fun saveSettings() {
}
override fun exit() {
}
override fun isWriteAccessAllowed(): Boolean = false
override fun isReadAccessAllowed(): Boolean = false
override fun isDispatchThread(): Boolean = SwingUtilities.isEventDispatchThread()
override fun getInvokator(): ModalityInvokator {
throw UnsupportedOperationException()
}
override fun invokeLater(runnable: Runnable) {
}
override fun invokeLater(runnable: Runnable, expired: Condition<*>) {
}
override fun invokeLater(runnable: Runnable, state: ModalityState) {
}
override fun invokeLater(runnable: Runnable, state: ModalityState, expired: Condition<*>) {
}
override fun invokeAndWait(runnable: Runnable, modalityState: ModalityState) {
SwingUtilities.invokeAndWait(runnable)
}
override fun invokeAndWait(runnable: Runnable) {
invokeAndWait(runnable, defaultModalityState)
}
override fun getCurrentModalityState(): ModalityState = noneModalityState
override fun getModalityStateForComponent(c: Component): ModalityState = noneModalityState
override fun getDefaultModalityState(): ModalityState = noneModalityState
override fun getNoneModalityState(): ModalityState = ModalityState.NON_MODAL
override fun getAnyModalityState(): ModalityState = AnyModalityState.ANY
override fun getStartTime(): Long = 0
override fun getIdleTime(): Long = 0
override fun isUnitTestMode(): Boolean = true
override fun isHeadlessEnvironment(): Boolean = true
override fun isCommandLine(): Boolean = true
override fun executeOnPooledThread(action: Runnable): Future<*> = PooledThreadExecutor.INSTANCE.submit(action)
override fun <T : Any?> executeOnPooledThread(action: Callable<T>): Future<T> = PooledThreadExecutor.INSTANCE.submit(action)
override fun isDisposeInProgress(): Boolean = false
override fun isRestartCapable(): Boolean = false
override fun restart() {
}
override fun isActive(): Boolean = true
override fun acquireReadActionLock(): AccessToken = AccessToken.EMPTY_ACCESS_TOKEN
override fun acquireWriteActionLock(marker: Class<*>): AccessToken = AccessToken.EMPTY_ACCESS_TOKEN
override fun isInternal(): Boolean = false
override fun isEAP(): Boolean = false
override fun load(configPath: String?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun holdsReadLock(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun isWriteActionInProgress(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun isWriteActionPending(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun isSaveAllowed(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun setSaveAllowed(value: Boolean) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun runProcessWithProgressSynchronouslyInReadAction(project: Project?,
progressTitle: String,
canBeCanceled: Boolean,
cancelText: String?,
parentComponent: JComponent?,
process: Runnable): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun exit(force: Boolean, exitConfirmed: Boolean) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun restart(exitConfirmed: Boolean) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun restart(exitConfirmed: Boolean, elevate: Boolean) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun runProcessWithProgressSynchronously(process: Runnable,
progressTitle: String,
canBeCanceled: Boolean,
project: Project?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun runProcessWithProgressSynchronously(process: Runnable,
progressTitle: String,
canBeCanceled: Boolean,
project: Project?,
parentComponent: JComponent?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun runProcessWithProgressSynchronously(process: Runnable,
progressTitle: String,
canBeCanceled: Boolean,
project: Project?,
parentComponent: JComponent?,
cancelText: String?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun assertIsDispatchThread(component: JComponent?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun assertTimeConsuming() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun tryRunReadAction(action: Runnable): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
@@ -0,0 +1,34 @@
package com.intellij.openapi.components.impl.stores
import com.intellij.configurationStore.StateStorageManager
import com.intellij.openapi.components.PersistentStateComponent
import com.intellij.openapi.components.ServiceDescriptor
import com.intellij.util.messages.MessageBus
class MockPsiComponentStore: IComponentStore {
override val storageManager: StateStorageManager
get() = throw UnsupportedOperationException()
override fun setPath(path: String) {
}
override fun initComponent(component: Any, serviceDescriptor: ServiceDescriptor?) {
}
override fun initPersistencePlainComponent(component: Any, key: String) {
}
override fun reloadStates(componentNames: Set<String>, messageBus: MessageBus) {
}
override fun reloadState(componentClass: Class<out PersistentStateComponent<*>>) {
}
override fun isReloadPossible(componentNames: Set<String>): Boolean = false
override suspend fun save(forceSavingAllSettings: Boolean) {
}
override fun saveComponent(component: PersistentStateComponent<*>) {
}
}
@@ -0,0 +1,87 @@
package com.intellij.openapi.module.impl
import com.intellij.core.CoreModule
import com.intellij.openapi.module.*
import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ModuleFileIndex
import com.intellij.util.graph.Graph
import java.io.FileNotFoundException
import java.util.*
class SingleModuleManager(private val myProject: Project): ModuleManager(), ModifiableModuleModel {
private var myModule: CoreModule? = null
override fun newModule(filePath: String, moduleTypeId: String): Module {
if (myModule == null) {
myModule = object: CoreModule(myProject, myProject, filePath) {
init {
registerService(ModuleFileIndex::class.java, createModuleFileIndex())
}
}
}
return myModule!!
}
override fun loadModule(filePath: String): Module = myModule ?: throw FileNotFoundException()
override fun disposeModule(module: Module) {
myModule?.dispose()
}
override fun getModules(): Array<Module> = myModule?.let { arrayOf<Module>(it) } ?: emptyArray()
override fun findModuleByName(name: String): Module? = if (name == myModule?.name) myModule else null
override fun getSortedModules(): Array<Module> = myModule?.let { arrayOf<Module>(it) } ?: emptyArray()
override fun moduleDependencyComparator(): Comparator<Module> = throw UnsupportedOperationException()
override fun getModuleDependentModules(module: Module): MutableList<Module> = mutableListOf()
override fun isModuleDependent(module: Module, onModule: Module): Boolean = false
override fun moduleGraph(): Graph<Module> = moduleGraph(true)
override fun moduleGraph(includeTests: Boolean): Graph<Module> = throw UnsupportedOperationException()
override fun getModifiableModel(): ModifiableModuleModel = this
override fun getModuleGroupPath(module: Module): Array<String>? = null
override fun hasModuleGroups(): Boolean = false
override fun getAllModuleDescriptions(): MutableCollection<ModuleDescription> = mutableListOf()
override fun getUnloadedModuleDescriptions(): MutableCollection<UnloadedModuleDescription> = mutableListOf()
override fun getUnloadedModuleDescription(moduleName: String): UnloadedModuleDescription? = throw UnsupportedOperationException()
override fun getModuleGrouper(model: ModifiableModuleModel?): ModuleGrouper = throw UnsupportedOperationException()
override fun setUnloadedModules(unloadedModuleNames: MutableList<String>) {
}
override fun newModule(filePath: String, moduleTypeId: String, options: MutableMap<String, String>?): Module = newModule(filePath, moduleTypeId)
override fun dispose() {
}
override fun isChanged(): Boolean = false
override fun commit() {
}
override fun renameModule(module: Module, newName: String) {
}
override fun getModuleToBeRenamed(newName: String): Module? = null
override fun getNewName(module: Module): String? = null
override fun getActualName(module: Module): String = myModule?.name ?: ""
override fun setModuleGroupPath(module: Module, groupPath: Array<out String>?) {
}
override fun getProject(): Project = myProject
}
@@ -0,0 +1,51 @@
package com.intellij.openapi.project.impl
import com.intellij.ide.plugins.ContainerDescriptor
import com.intellij.ide.plugins.IdeaPluginDescriptorImpl
import com.intellij.mock.MockApplication
import com.intellij.mock.MockProject
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.Application
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.extensions.impl.ExtensionsAreaImpl
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.serviceContainer.NonInjectable
import com.intellij.serviceContainer.PlatformComponentManagerImpl
import com.intellij.testFramework.registerComponentInstance
class MockPsiProject(application: Application, parentDisposable: Disposable = application) : PlatformComponentManagerImpl(application), Project {
init {
Disposer.register(parentDisposable, this)
myPicoContainer.registerComponentInstance(Project::class.java, this)
}
constructor() : this(ApplicationManager.getApplication())
override fun getContainerDescriptor(pluginDescriptor: IdeaPluginDescriptorImpl): ContainerDescriptor =
pluginDescriptor.project
override fun getName(): String = ""
override fun getBaseDir(): VirtualFile? = null
override fun getBasePath(): String? = null
override fun getProjectFile(): VirtualFile? = null
override fun getProjectFilePath(): String? = null
override fun getWorkspaceFile(): VirtualFile? = null
override fun getLocationHash(): String = "mockPsi"
override fun save() {
}
override fun isOpen(): Boolean = false
override fun isInitialized(): Boolean = true
override fun isDefault(): Boolean = false
}
@@ -0,0 +1,10 @@
package com.intellij.openapi.roots.impl
import com.intellij.openapi.module.ModifiableModuleModel
import com.intellij.openapi.roots.ModifiableRootModel
class DummyModifiableModelCommitterService: ModifiableModelCommitterService {
override fun multiCommit(rootModels: MutableCollection<out ModifiableRootModel>, moduleModel: ModifiableModuleModel) {
}
}
@@ -0,0 +1,131 @@
package com.intellij.openapi.vfs
import com.intellij.openapi.util.text.StringUtil
import java.io.*
import java.nio.charset.Charset
import java.nio.file.Files
private const val TEST_LOCAL_FS_PROTOCOL = "test_local"
class TestLocalVirtualFileSystem: VirtualFileSystem() {
private val myRoots: MutableMap<String, TestVirtualFile> = mutableMapOf()
override fun getProtocol(): String = TEST_LOCAL_FS_PROTOCOL
override fun findFileByPath(path: String): VirtualFile? {
var normalized = path.replace(File.separatorChar, '/')
var file = resolveRoot(normalized)
if (StringUtil.startsWithChar(normalized, '/')) normalized = normalized.substring(1)
for (component in StringUtil.split(normalized, "/")) {
file = file.getOrCreate(component)
}
return file
}
private fun resolveRoot(path: String): TestVirtualFile {
val rootPath = path.split('/', limit = 2)[0] + File.separatorChar
return myRoots.getOrPut(rootPath) { TestVirtualFile(File(rootPath), null) }
}
override fun refresh(asynchronous: Boolean) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun refreshAndFindFileByPath(path: String): VirtualFile? =
findFileByPath(path)
override fun addVirtualFileListener(listener: VirtualFileListener) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun removeVirtualFileListener(listener: VirtualFileListener) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun deleteFile(requestor: Any?, vFile: VirtualFile) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun moveFile(requestor: Any?, vFile: VirtualFile, newParent: VirtualFile) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun renameFile(requestor: Any?, vFile: VirtualFile, newName: String) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun createChildFile(requestor: Any?, vDir: VirtualFile, fileName: String): VirtualFile {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun createChildDirectory(requestor: Any?, vDir: VirtualFile, dirName: String): VirtualFile {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun copyFile(requestor: Any?, virtualFile: VirtualFile, newParent: VirtualFile, copyName: String): VirtualFile {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun isReadOnly(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
private inner class TestVirtualFile(private val myDelegate: File, private val myParent: TestVirtualFile?): VirtualFile() {
private val myChildren: MutableMap<String, TestVirtualFile> = mutableMapOf()
private val myPath = myDelegate.absolutePath.replace(File.pathSeparatorChar, '/')
private var myContent: String? = if (myDelegate.exists() && !myDelegate.isDirectory) myDelegate.readText(charset) else null
private var myLastModified: Long = myDelegate.lastModified()
fun getOrCreate(path: String): TestVirtualFile = myChildren.getOrPut(path) { TestVirtualFile(myDelegate.resolve(path), this) }
override fun getName(): String = myDelegate.name
override fun getFileSystem(): VirtualFileSystem = this@TestLocalVirtualFileSystem
override fun getPath(): String = myPath
override fun isWritable(): Boolean = true
override fun isDirectory(): Boolean = myDelegate.isDirectory
override fun isValid(): Boolean = myDelegate.exists()
override fun getParent(): VirtualFile? = myParent
override fun getChildren(): Array<VirtualFile> {
return myChildren.values.toTypedArray()
}
override fun getOutputStream(requestor: Any?, newModificationStamp: Long, newTimeStamp: Long): OutputStream =
VfsUtilCore.outputStreamAddingBOM(object: ByteArrayOutputStream() {
override fun close() {
try {
myContent = toString(charset.name())
myLastModified = newModificationStamp
} catch (e: UnsupportedEncodingException) {
throw RuntimeException(e)
}
}
}, this)
override fun contentsToByteArray(): ByteArray = myContent?.toByteArray(charset) ?: byteArrayOf()
override fun getModificationStamp(): Long = myLastModified
override fun getTimeStamp(): Long = 0L
override fun getLength(): Long = contentsToByteArray().size.toLong()
override fun refresh(asynchronous: Boolean, recursive: Boolean, postRunnable: Runnable?) {
}
override fun getInputStream(): InputStream = VfsUtilCore.byteStreamSkippingBOM(contentsToByteArray(), this)
override fun findFileByRelativePath(relPath: String): VirtualFile? = findFileByPath("$myPath/$relPath")
override fun getCharset(): Charset = Charset.defaultCharset()
}
}
@@ -0,0 +1,16 @@
package com.jetbrains.python.fixtures
import com.intellij.psi.PsiElement
import com.jetbrains.python.psi.PyFunction
class PyPsiResolveTest : PyPsiResolveTestCase() {
protected fun resolve(): PsiElement? {
val ref = configureByFile("resolve/" + getTestName(false) + ".py")
return ref?.resolve()
}
fun testFunc() {
val targetElement = resolve()
assertTrue(targetElement is PyFunction)
}
}
@@ -0,0 +1,44 @@
package com.jetbrains.python.fixtures
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.TestLocalVirtualFileSystem
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.psi.PsiManager
import com.intellij.psi.PsiReference
import com.intellij.testFramework.TestDataFile
import com.jetbrains.python.PythonTestUtil
import org.jetbrains.annotations.NonNls
import java.io.File
import java.io.IOException
@NonNls
internal const val MARKER = "<ref>"
open class PyPsiResolveTestCase : PyPsiTestCase() {
private val myFileSystem = TestLocalVirtualFileSystem()
protected fun configureByFile(@TestDataFile filePath: String): PsiReference? {
val testDataRoot = myFileSystem.refreshAndFindFileByPath(PythonTestUtil.getTestDataPath())
val file = testDataRoot!!.findFileByRelativePath(filePath)
assertNotNull(file)
val fileText: String =
try {
StringUtil.convertLineSeparators(VfsUtilCore.loadText(file!!))
}
catch (e: IOException) {
throw RuntimeException(e)
}
val offset = fileText.indexOf(MARKER)
assertTrue(offset >= 0)
val finalText = fileText.substring(0, offset) + fileText.substring(offset + MARKER.length)
VfsUtil.saveText(file, finalText)
val psiFile = PsiManager.getInstance(myProject).findFile(file)
return psiFile?.findReferenceAt(offset)
}
}
@@ -0,0 +1,65 @@
package com.jetbrains.python.fixtures
import com.intellij.core.CoreFileTypeRegistry
import com.intellij.ide.plugins.IdeaPluginDescriptorImpl
import com.intellij.ide.plugins.PluginManagerCore
import com.intellij.idea.IdeaTestApplication
import com.intellij.mock.MockApplication
import com.intellij.mock.MockFileTypeManager
import com.intellij.mock.MockProject
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.impl.MockPsiApplication
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.extensions.impl.ExtensionsAreaImpl
import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.openapi.fileTypes.FileTypeRegistry
import com.intellij.openapi.project.impl.MockPsiProject
import com.intellij.openapi.util.Getter
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.psi.PsiManager
import com.intellij.psi.PsiReference
import com.intellij.testFramework.PlatformTestUtil
import com.intellij.testFramework.TestDataFile
import com.intellij.util.PlatformUtils
import com.jetbrains.python.PythonFileType
import com.jetbrains.python.PythonTestUtil.getTestDataPath
import junit.framework.TestCase
import org.jetbrains.annotations.NonNls
import java.io.File
import java.io.IOException
open class PyPsiTestCase : TestCase() {
private val myParentDisposable: Disposable = TestDisposable()
private val myFileTypeManager = MockFileTypeManager(PythonFileType.INSTANCE)
private val myApplication: MockPsiApplication = MockPsiApplication(myParentDisposable)
.also { ApplicationManager.setApplication(it, Getter { myFileTypeManager }, myParentDisposable) }
protected val myProject: MockPsiProject = MockPsiProject(myApplication)
init {
System.setProperty(PlatformUtils.PLATFORM_PREFIX_KEY, "PythonPsi")
val loadedPlugins = PluginManagerCore.getLoadedPlugins(PyPsiTestCase::class.java.classLoader)
myApplication.registerComponents(loadedPlugins)
myApplication.picoContainer.registerComponentInstance(FileTypeManager::class.java, myFileTypeManager)
myProject.registerComponents(loadedPlugins)
}
protected fun getTestName(lowercaseFirstLetter: Boolean): String =
name?.let { PlatformTestUtil.getTestName(it, lowercaseFirstLetter) } ?: ""
inner class TestDisposable: Disposable {
@Volatile
private var myDisposed: Boolean = false
override fun dispose() {
myDisposed = true
}
override fun toString(): String {
val testName = getTestName(false)
return this@PyPsiTestCase.javaClass.name + if (StringUtil.isEmpty(testName)) "" else ".test$testName"
}
}
}
@@ -0,0 +1,16 @@
package com.jetbrains.python.module
import com.intellij.ide.util.projectWizard.ModuleBuilder
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.platform.DirectoryProjectGenerator
import com.jetbrains.python.PythonMockSdk
import com.jetbrains.python.fixtures.PyTestCase
class MockPyModuleService: PyModuleService() {
private val mySdk = PythonMockSdk.create(PyTestCase.PYTHON_3_MOCK_SDK)
override fun findPythonSdk(module: Module): Sdk? = mySdk
override fun createPythonModuleBuilder(generator: DirectoryProjectGenerator<*>?): ModuleBuilder = throw UnsupportedOperationException()
}
+1 -11
View File
@@ -6,6 +6,7 @@
<module value="com.intellij.modules.python"/>
<xi:include href="/META-INF/python-psi-api.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/python-psi-impl.xml" xpointer="xpointer(/idea-plugin/*)"/>
<!-- Enable command-line language -->
@@ -18,18 +19,12 @@
<nameSuggestionProvider implementation="com.jetbrains.python.refactoring.PyNameSuggestionProvider"/>
<methodNavigationOffsetProvider implementation="com.jetbrains.python.codeInsight.PyMethodNavigationOffsetProvider"/>
<copyPastePreProcessor implementation="com.jetbrains.python.editor.PythonCopyPasteProcessor"/>
<fileType name="Python"
language="Python"
extensions="py;pyw;"
implementationClass="com.jetbrains.python.PythonFileType"
fieldName="INSTANCE"/>
<fileType name="Qt UI file" extensions="ui" implementationClass="com.jetbrains.pyqt.QtUIFileType" fieldName="INSTANCE"/>
<fileType name="XML" language="XML" extensions="qrc"/>
<fileTypeDetector implementation="com.jetbrains.python.PyFileTypeDetector"/>
<editorHighlighterProvider filetype="Python" implementationClass="com.jetbrains.python.PyEditorHighlighterProvider"/>
<lang.syntaxHighlighterFactory language="Python" implementationClass="com.jetbrains.python.highlighting.PySyntaxHighlighterFactory"/>
<lang.braceMatcher language="Python" implementationClass="com.jetbrains.python.PyBraceMatcher"/>
<lang.parserDefinition language="Python" implementationClass="com.jetbrains.python.PythonParserDefinition"/>
<lang.commenter language="Python" implementationClass="com.jetbrains.python.PythonCommenter"/>
<lang.foldingBuilder language="Python" implementationClass="com.jetbrains.python.PythonFoldingBuilder"/>
<lang.findUsagesProvider language="Python" implementationClass="com.jetbrains.python.findUsages.PythonFindUsagesProvider"/>
@@ -107,9 +102,6 @@
<projectService serviceImplementation="com.jetbrains.python.configuration.PyConfigurableInterpreterList"/>
<projectService serviceInterface="com.jetbrains.python.psi.types.TypeEvalContextCache"
serviceImplementation="com.jetbrains.python.psi.types.TypeEvalContextCacheImpl"/>
<projectService serviceImplementation="com.jetbrains.python.inspections.PyCompatibilityInspectionAdvertiserSettings"/>
<projectService serviceImplementation="com.jetbrains.python.packaging.PyPackagingSettings"/>
<projectService serviceImplementation="com.jetbrains.python.findUsages.PyFindUsagesOptions"/>
@@ -670,7 +662,6 @@
<extensionPoint qualifiedName="Pythonid.knownDecoratorProvider" interface="com.jetbrains.python.psi.PyKnownDecoratorProvider"/>
<extensionPoint qualifiedName="Pythonid.documentationLinkProvider" interface="com.jetbrains.python.documentation.PythonDocumentationLinkProvider"/>
<extensionPoint qualifiedName="Pythonid.importCandidateProvider" interface="com.jetbrains.python.codeInsight.imports.PyImportCandidateProvider"/>
<extensionPoint qualifiedName="Pythonid.dialectsTokenSetContributor" interface="com.jetbrains.python.PythonDialectsTokenSetContributor"/>
<extensionPoint qualifiedName="Pythonid.runConfigurationExtension" interface="com.jetbrains.python.run.PythonRunConfigurationExtension"/>
<extensionPoint qualifiedName="Pythonid.remoteInterpreterManager" interface="com.jetbrains.python.remote.PythonRemoteInterpreterManager"/>
<extensionPoint qualifiedName="Pythonid.remoteSkeletonGeneratorFactory" interface="com.jetbrains.python.remote.PyRemoteSkeletonGeneratorFactory"/>
@@ -678,7 +669,6 @@
<extensionPoint qualifiedName="Pythonid.remoteConsoleProcessCreator" interface="com.jetbrains.python.console.PythonConsoleRemoteProcessCreator"/>
<extensionPoint qualifiedName="Pythonid.keywordArgumentProvider" interface="com.jetbrains.python.psi.impl.PyKeywordArgumentProvider"/>
<extensionPoint qualifiedName="Pythonid.canonicalPathProvider" interface="com.jetbrains.python.psi.resolve.PyCanonicalPathProvider"/>
<extensionPoint qualifiedName="Pythonid.pyReferenceResolveProvider" interface="com.jetbrains.python.psi.resolve.PyReferenceResolveProvider"/>
<extensionPoint qualifiedName="Pythonid.breakpointHandler" interface="com.jetbrains.python.debugger.PyBreakpointHandlerFactory"/>
<extensionPoint qualifiedName="Pythonid.consoleOptionsProvider" interface="com.jetbrains.python.console.PyConsoleOptionsProvider"/>
<extensionPoint qualifiedName="Pythonid.pyRootTypeProvider" interface="com.jetbrains.python.module.PyRootTypeProvider"/>