mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Add initial platform independent tests for Python PSI
GitOrigin-RevId: bf0ff97f9d3a8f54cbadd91e6f68191bc18341cc
This commit is contained in:
committed by
intellij-monorepo-bot
parent
431b3e0037
commit
b3d4556fd2
@@ -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>
|
||||
+1
-2
@@ -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>
|
||||
+233
@@ -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.
|
||||
}
|
||||
}
|
||||
+34
@@ -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
|
||||
}
|
||||
+10
@@ -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()
|
||||
}
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user