intellij-plugin/educational-core/resources/META-INF/educational-core.xml (473 lines of code) (raw):

<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude"> <!--suppress PluginXmlValidity --> <dependencies> <plugin id="com.intellij.modules.lang"/> <!-- The vcs module is needed to be sure that IgnoreFileType, PatternCache exist which are used for .courseignore support --> <plugin id="com.intellij.modules.vcs"/> </dependencies> <resource-bundle>messages.EduCoreBundle</resource-bundle> <applicationListeners> <listener class="com.jetbrains.edu.learning.EduDynamicPluginListener" topic="com.intellij.ide.plugins.DynamicPluginListener"/> <listener class="com.jetbrains.edu.learning.InitializationListener" topic="com.intellij.ide.AppLifecycleListener"/> <listener class="com.jetbrains.edu.learning.InitializationListener" topic="com.intellij.ide.plugins.DynamicPluginListener"/> <listener class="com.jetbrains.edu.learning.RecentPreviewCourseListener" topic="com.intellij.openapi.project.ProjectManagerListener"/> <listener class="com.jetbrains.edu.learning.RecentPreviewCourseListener" topic="com.intellij.ide.AppLifecycleListener"/> </applicationListeners> <projectListeners> <listener class="com.jetbrains.edu.learning.checker.FixModuleForRunConfigurationsListener" topic="com.intellij.execution.RunManagerListener"/> <listener class="com.jetbrains.edu.learning.checker.PreventRunConfigurationsRenameListener" topic="com.intellij.execution.RunManagerListener"/> <listener class="com.jetbrains.edu.learning.checker.FixModuleForRunConfigurationsListener" topic="com.intellij.openapi.roots.ModuleRootListener"/> <listener class="com.jetbrains.edu.learning.yaml.YamlLoadingErrorManager$Listener" topic="com.jetbrains.edu.learning.yaml.YamlListener"/> <listener class="com.jetbrains.edu.learning.taskToolWindow.EduFileEditorManagerListener" topic="com.intellij.openapi.fileEditor.FileEditorManagerListener"/> <listener class="com.jetbrains.edu.learning.taskToolWindow.EduFileEditorManagerListener" topic="com.intellij.openapi.fileEditor.FileEditorManagerListener$Before"/> <listener class="com.jetbrains.edu.learning.storage.LearningObjectsPersister" topic="com.jetbrains.edu.learning.CourseSetListener"/> <listener class="com.jetbrains.edu.learning.marketplace.lti.LTICourseSetListener" topic="com.jetbrains.edu.learning.CourseSetListener"/> </projectListeners> <extensionPoints> <extensionPoint qualifiedName="Educational.configurator" beanClass="com.jetbrains.edu.learning.configuration.EducationalExtensionPoint" dynamic="true"> <with attribute="implementationClass" implements="com.jetbrains.edu.learning.configuration.EduConfigurator"/> </extensionPoint> <extensionPoint qualifiedName="Educational.compatibilityProvider" beanClass="com.jetbrains.edu.learning.compatibility.CourseCompatibilityProviderEP" dynamic="true"> <with attribute="implementationClass" implements="com.jetbrains.edu.learning.compatibility.CourseCompatibilityProvider"/> </extensionPoint> <extensionPoint qualifiedName="Educational.remoteTaskChecker" interface="com.jetbrains.edu.learning.checker.remote.RemoteTaskChecker" dynamic="true"/> <extensionPoint qualifiedName="Educational.checkListener" interface="com.jetbrains.edu.learning.checker.CheckListener" dynamic="true"/> <extensionPoint qualifiedName="Educational.submissionsProvider" interface="com.jetbrains.edu.learning.submissions.provider.SubmissionsProvider" dynamic="true"/> <extensionPoint qualifiedName="Educational.communitySubmissionsProvider" interface="com.jetbrains.edu.learning.submissions.provider.CommunitySubmissionsProvider" dynamic="true"/> <extensionPoint qualifiedName="Educational.optionsProvider" beanClass="com.intellij.openapi.options.ConfigurableEP" dynamic="true"> <with attribute="instance" implements="com.jetbrains.edu.learning.settings.OptionsProvider"/> </extensionPoint> <extensionPoint qualifiedName="Educational.coursesPlatformProviderFactory" interface="com.jetbrains.edu.learning.newproject.ui.CoursesPlatformProviderFactory" dynamic="true"/> <extensionPoint qualifiedName="Educational.pathMacroProvider" interface="com.jetbrains.edu.learning.courseGeneration.macro.EduMacroProvider" dynamic="true"/> <extensionPoint qualifiedName="Educational.postToGithub" interface="com.jetbrains.edu.learning.github.PostToGithubActionProvider" dynamic="true"/> <extensionPoint qualifiedName="Educational.taskNavigationExtension" interface="com.jetbrains.edu.learning.navigation.TaskNavigationExtension" dynamic="true"/> <extensionPoint qualifiedName="Educational.navigateToConfigEntryForEduFile" interface="com.jetbrains.edu.learning.navigation.NavigateToConfigEntryForEduFileExtension" dynamic="true"/> <extensionPoint qualifiedName="Educational.revertTaskExtension" interface="com.jetbrains.edu.learning.actions.RevertTaskAction$RevertTaskExtension" dynamic="true"/> <extensionPoint qualifiedName="Educational.yamlActionsHelper" interface="com.jetbrains.edu.coursecreator.actions.YamlActionsHelper" dynamic="true"/> <extensionPoint qualifiedName="Educational.courseViewPaneCustomization" interface="com.jetbrains.edu.learning.projectView.CourseViewPaneCustomization" dynamic="true"/> <extensionPoint qualifiedName="Educational.studyItemRefactoringHandler" interface="com.jetbrains.edu.coursecreator.handlers.StudyItemRefactoringHandler" dynamic="true"/> <extensionPoint qualifiedName="Educational.courseMetadataProcessor" interface="com.jetbrains.edu.learning.newproject.CourseMetadataProcessor" dynamic="true"/> </extensionPoints> <actions> <action id="Educational.Agreement.ShowUserAgreementDialog" class="com.jetbrains.edu.learning.agreement.action.ShowUserAgreementDialog" internal="true"/> <action id="Educational.Agreement.ResetUserAgreementSettings" class="com.jetbrains.edu.learning.agreement.action.ResetUserAgreementSettings" internal="true"/> <action id="Educational.ImportLocalCourse" class="com.jetbrains.edu.learning.actions.ImportLocalCourseAction"/> <action id="Educational.Check" class="com.jetbrains.edu.learning.actions.CheckAction"/> <action id="Educational.Run" class="com.jetbrains.edu.learning.actions.RunTaskAction" icon="AllIcons.Actions.Execute"/> <action id="Educational.AssignRunConfigurationToTask" class="com.jetbrains.edu.learning.actions.AssignRunConfigurationToTask"> <add-to-group group-id="RunConfiguration.Group" anchor="before" relative-to-action="DeleteRunConfiguration"/> <!-- top right --> </action> <action id="Educational.Retry" class="com.jetbrains.edu.learning.actions.RetryAction"/> <action id="Educational.PrevPlaceholder" class="com.jetbrains.edu.learning.actions.PrevPlaceholderAction" icon="AllIcons.Actions.Back"/> <action id="Educational.NextPlaceholder" class="com.jetbrains.edu.learning.actions.NextPlaceholderAction" icon="AllIcons.Actions.Forward"/> <action id="Educational.PreviousTask" class="com.jetbrains.edu.learning.actions.PreviousTaskAction" icon="AllIcons.Actions.Back"/> <action id="Educational.NextTask" class="com.jetbrains.edu.learning.actions.NextTaskAction" icon="AllIcons.Actions.Forward"/> <action id="Educational.RefreshTask" class="com.jetbrains.edu.learning.actions.RevertTaskAction" icon="com.jetbrains.edu.EducationalCoreIcons.Actions.ResetTask"/> <action id="Educational.LeaveFeedbackAction" class="com.jetbrains.edu.learning.actions.LeaveFeedbackAction" icon="com.jetbrains.edu.EducationalCoreIcons.Actions.CommentTask"/> <action id="Educational.OpenTaskOnSiteAction" class="com.jetbrains.edu.learning.actions.OpenTaskOnSiteAction"/> <action id="Educational.CompareWithAnswer" class="com.jetbrains.edu.learning.actions.CompareWithAnswerAction" icon="AllIcons.Actions.Diff"/> <action id="Educational.RefreshAnswerPlaceholder" class="com.jetbrains.edu.learning.actions.RefreshAnswerPlaceholder" icon="AllIcons.Actions.Refresh"> <add-to-group group-id="EditorPopupMenu" anchor="last"/> </action> <action id="Educational.SwitchTaskDescriptionPanel" class="com.jetbrains.edu.learning.actions.SwitchTaskPanelAction"> </action> <action id="Educational.UpdateCoursePreview" class="com.jetbrains.edu.coursecreator.actions.CCUpdateCoursePreview" internal="true"/> <!-- IMPORTANT: don't change the action id, it's used in monorepo--> <action id="Educational.BrowseCourses" class="com.jetbrains.edu.learning.newproject.BrowseCoursesAction"/> <action id="Educational.ToggleRestServices" class="com.jetbrains.edu.learning.actions.ToggleRestServicesAction" internal="true"/> <!--educator actions--> <action id="Educational.Educator.InsertShortcut" class="com.jetbrains.edu.coursecreator.actions.InsertShortcutAction"> <add-to-group group-id="EditorPopupMenu" anchor="first"/> </action> <action id="Educational.Educator.NewCourse" class="com.jetbrains.edu.coursecreator.actions.CCNewCourseAction"/> <action id="Educational.CCEditTaskDescription" class="com.jetbrains.edu.coursecreator.actions.CCEditTaskDescription"/> <action id="LessonCard-left" class="com.intellij.openapi.actionSystem.EmptyAction" use-shortcut-of="EditorLeft"/> <action id="LessonCard-right" class="com.intellij.openapi.actionSystem.EmptyAction" use-shortcut-of="EditorRight"/> <group id="Educational.Educator.NewFile"> <action id="Educational.Educator.CreateTask" class="com.jetbrains.edu.coursecreator.actions.studyItem.CCCreateTask"/> <action id="Educational.Educator.CreateLesson" class="com.jetbrains.edu.coursecreator.actions.studyItem.CCCreateLesson"/> <action id="Educational.Educator.CreateSection" class="com.jetbrains.edu.coursecreator.actions.studyItem.CCCreateSection"/> <separator/> <!-- Adding to necessary action groups happens in com.jetbrains.edu.learning.InitializationListener --> </group> <action id="Educational.Educator.ChangeCourseInfo" class="com.jetbrains.edu.coursecreator.actions.CCChangeCourseInfo"/> <action id="Educational.Educator.CheckAllTasks" class="com.jetbrains.edu.coursecreator.actions.checkAllTasks.CCCheckAllTasksAction"/> <action class="com.jetbrains.edu.coursecreator.actions.CCCreateCoursePreview" id="Educational.Educator.CreateCoursePreview"/> <action id="Educational.Educator.RegenerateDuplicateIds" class="com.jetbrains.edu.coursecreator.actions.marketplace.RegenerateDuplicateIds"/> <group id="Educational.Educator.CourseCreator.FrameworkLesson" popup="false" class="com.jetbrains.edu.coursecreator.actions.CCFrameworkLessonActionGroup"> <action id="Educational.Educator.SyncChangesWithNextTasks" class="com.jetbrains.edu.coursecreator.actions.CCSyncChangesWithNextTasks" icon="com.jetbrains.edu.EducationalCoreIcons.Actions.SyncChanges"> </action> <action id="Educational.Educator.AllowFileToSyncChanges" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCAllowFileSyncChanges" icon="AllIcons.Actions.Show"/> <action id="Educational.Educator.IgnoreFilePropagation" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCIgnoreFileInSyncChanges" icon="com.jetbrains.edu.EducationalCoreIcons.Actions.IgnoreSyncFile"/> <action id="Educational.Educator.ShowUnsyncedChanges" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCShowUnsyncedChanges" icon="AllIcons.Actions.Diff" internal="true"> </action> <separator/> <!-- Adding to necessary action groups happens in com.jetbrains.edu.learning.InitializationListener --> </group> <group id="Educational.Educator.CourseCreator.Menu" popup="true" class="com.jetbrains.edu.coursecreator.actions.CCProjectViewActionGroup"> <action id="Educational.Educator.ShowToStudent" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCMakeVisibleToLearner"/> <action id="Educational.Educator.HideFromStudent" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCHideFromLearner"/> <action id="Educational.Educator.ShowPreview" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCShowPreview"> <add-to-group group-id="EditorTabPopupMenu"/> </action> <action id="Educational.Educator.CCWrapWithSection" class="com.jetbrains.edu.coursecreator.actions.studyItem.CCWrapWithSection"/> <action id="Educational.Educator.CCRemoveSection" class="com.jetbrains.edu.coursecreator.actions.studyItem.CCRemoveSection"/> <action id="Educational.Educator.IncludeIntoTask" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCIncludeIntoTask"/> <action id="Educational.Educator.ExcludeFromTask" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCExcludeFromTask"/> <action id="Educational.Educator.IncludeIntoArchive" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCIncludeIntoArchive"/> <action id="Educational.Educator.ExcludeFromArchive" class="com.jetbrains.edu.coursecreator.actions.taskFile.CCExcludeFromArchive"/> <separator/> <reference ref="Educational.Educator.CreateCoursePreview"/> <reference ref="Educational.Educator.ChangeCourseInfo"/> <reference ref="Educational.Educator.CheckAllTasks"/> <action id="Educational.Educator.PackCourse" class="com.jetbrains.edu.coursecreator.actions.CCCreateCourseArchiveAction"/> <!-- Adding to necessary action groups happens in com.jetbrains.edu.learning.InitializationListener --> </group> <action id="Educational.Educator.ExportStepikIds" class="com.jetbrains.edu.coursecreator.actions.stepik.ExportStepikIds"/> <group id="Educational.Educator.AnswerPlaceholder"> <action id="Educational.Educator.AddAnswerPlaceholder" class="com.jetbrains.edu.coursecreator.actions.placeholder.CCAddAnswerPlaceholder"/> <group id="Educational.Educator.ModifyAnswerPlaceholder" popup="true" text="Answer Placeholder" class="com.jetbrains.edu.coursecreator.CCAnswerPlaceholderActionGroup"> <action id="Educational.Educator.EditAnswerPlaceholder" class="com.jetbrains.edu.coursecreator.actions.placeholder.CCEditAnswerPlaceholder"/> <action id="Educational.Educator.RemoveDependency" class="com.jetbrains.edu.coursecreator.actions.placeholder.CCRemoveDependency"/> <action id="Educational.Educator.DeleteAnswerPlaceholder" class="com.jetbrains.edu.coursecreator.actions.placeholder.CCDeleteAnswerPlaceholder"/> <action id="Educational.Educator.DeleteAllPlaceholders" class="com.jetbrains.edu.coursecreator.actions.placeholder.CCDeleteAllAnswerPlaceholdersAction"/> <separator/> </group> <separator/> <add-to-group group-id="EditorPopupMenu" anchor="first"/> </group> <action id="Educational.Educator.EditCourseFromArchive" class="com.jetbrains.edu.coursecreator.actions.CCEditCourseArchive"/> <action id="Educational.Educator.StepikChangeHost" class="com.jetbrains.edu.learning.stepik.changeHost.StepikChangeHost" internal="true"/> <action id="Educational.Hyperskill.InstallHyperskillPlugin" class="com.jetbrains.edu.learning.stepik.hyperskill.actions.InstallHyperskillPluginAction"/> <group id="Educational.LearnAndTeachFileMenu" class="com.jetbrains.edu.learning.newproject.LearnAndTeachFileMenuGroup" popup="true" icon="com.jetbrains.edu.EducationalCoreIcons.Actions.EduCourse"> <reference ref="Educational.BrowseCourses"/> <reference ref="Educational.Educator.NewCourse"/> <!-- Adding to necessary action groups happens in com.jetbrains.edu.learning.InitializationListener --> </group> <action id="Educational.WatchTutorial" class="com.jetbrains.edu.learning.actions.LearnMoreAction"> <add-to-group group-id="HelpMenu" anchor="before" relative-to-action="HelpTopics"/> </action> <action id="Educational.SolveAllTasksBefore" class="com.jetbrains.edu.coursecreator.actions.CCSolveAllTasksBeforeAction"/> <action id="Educational.CreateNewIssue" class="com.jetbrains.edu.learning.actions.CreateNewYouTrackIssue" icon="com.jetbrains.edu.EducationalCoreIcons.Actions.EduCourse"> <add-to-group group-id="HelpMenu" anchor="after" relative-to-action="ReportProblem"/> </action> <action id="Educational.Student.ApplyCode" class="com.jetbrains.edu.learning.actions.ApplyCodeAction" icon="com.jetbrains.edu.EducationalCoreIcons.Actions.ApplyCode"> <add-to-group group-id="Diff.ViewerToolbar"/> <keyboard-shortcut keymap="$default" first-keystroke="control alt shift A" /> </action> <action id="Educational.Educator.OpenEducatorHelp" class="com.jetbrains.edu.coursecreator.ui.CCOpenEducatorHelp"/> <group id="Educational.CourseView.SecondaryActions"> <action id="Educational.HideSolvedLessons" class="com.jetbrains.edu.learning.projectView.CourseViewPane$HideSolvedLessonsAction"/> </group> <!-- Actions located in the right corner of the Course View header --> <group id="Educational.CourseView.Header.Right"> <reference ref="Educational.Educator.CreateCoursePreview"/> <reference ref="Educational.Educator.OpenEducatorHelp"/> </group> <action id="Educational.LeaveInIdeFeedbackAction" class="com.jetbrains.edu.learning.actions.LeaveInIdeFeedbackAction" icon="com.jetbrains.edu.EducationalCoreIcons.Actions.CommentTask"/> <group id="Educational.CheckPanel.Left"> <reference ref="Educational.Run"/> </group> <group id="Educational.CheckPanel.Right"> <reference ref="Educational.RefreshTask"/> <reference ref="Educational.LeaveInIdeFeedbackAction"/> <reference ref="Educational.LeaveFeedbackAction"/> </group> <!-- Actions located in the right corner of Task tool window --> <group id="Educational.TaskToolWindowView.TitleActions"> <reference ref="Educational.CCEditTaskDescription"/> <reference ref="Educational.PreviousTask"/> <reference ref="Educational.NextTask"/> </group> </actions> <extensions defaultExtensionNs="com.intellij"> <applicationService serviceImplementation="com.jetbrains.edu.learning.agreement.UserAgreementSettings"/> <applicationService serviceInterface="com.jetbrains.edu.learning.EduBrowser" serviceImplementation="com.jetbrains.edu.learning.EduBrowser" testServiceImplementation="com.jetbrains.edu.learning.MockEduBrowser"/> <applicationService serviceInterface="com.jetbrains.edu.learning.stepik.api.StepikConnector" serviceImplementation="com.jetbrains.edu.learning.stepik.api.StepikConnectorImpl" testServiceImplementation="com.jetbrains.edu.learning.stepik.api.MockStepikConnector"/> <applicationService serviceImplementation="com.jetbrains.edu.coursecreator.settings.CCSettings"/> <applicationService serviceImplementation="com.jetbrains.edu.learning.ai.terms.TheoryLookupSettings"/> <applicationService serviceInterface="com.jetbrains.edu.learning.courseGeneration.ProjectOpener" serviceImplementation="com.jetbrains.edu.learning.courseGeneration.ProjectOpenerImpl" testServiceImplementation="com.jetbrains.edu.learning.MockProjectOpener"/> <projectService serviceInterface="com.jetbrains.edu.learning.taskToolWindow.ui.TaskToolWindowView" serviceImplementation="com.jetbrains.edu.learning.taskToolWindow.ui.TaskToolWindowViewImpl" testServiceImplementation="com.jetbrains.edu.learning.taskToolWindow.ui.MockTaskToolWindowView"/> <projectService serviceInterface="com.jetbrains.edu.learning.checker.details.CheckDetailsView" serviceImplementation="com.jetbrains.edu.learning.checker.details.CheckDetailsViewImpl" headlessImplementation="com.jetbrains.edu.learning.checker.details.MockCheckDetailsView" testServiceImplementation="com.jetbrains.edu.learning.checker.details.MockCheckDetailsView"/> <projectService serviceInterface="com.jetbrains.edu.learning.framework.FrameworkLessonManager" serviceImplementation="com.jetbrains.edu.learning.framework.impl.FrameworkLessonManagerImpl"/> <!-- Courseignore lang --> <fileType language="CourseIgnore" fileNames=".courseignore" fieldName="INSTANCE" name="CourseIgnore file" implementationClass="com.jetbrains.edu.coursecreator.courseignore.CourseIgnoreFileType"/> <lang.parserDefinition language="CourseIgnore" implementationClass="com.intellij.openapi.vcs.changes.ignore.lang.IgnoreParserDefinition"/> <codeInsight.lineMarkerProvider language="CourseIgnore" implementationClass="com.intellij.openapi.vcs.changes.ignore.codeInsight.IgnoreDirectoryMarkerProvider"/> <lang.braceMatcher language="CourseIgnore" implementationClass="com.intellij.openapi.vcs.changes.ignore.lang.IgnoreBraceMatcher"/> <lang.commenter language="CourseIgnore" implementationClass="com.intellij.openapi.vcs.changes.ignore.lang.IgnoreCommenter"/> <!--END of Courseignore lang--> <postStartupActivity implementation="com.jetbrains.edu.learning.EduProjectActivity"/> <postStartupActivity implementation="com.jetbrains.edu.learning.agreement.UserAgreementProjectActivity"/> <registryKey key="edu.task.description.update.delay" description="The delay in ms before loading page by Task Description view. \nRequires project reopening" defaultValue="300"/> <applicationConfigurable groupId="tools" instance="com.jetbrains.edu.learning.settings.EduConfigurable" id="Educational" key="settings.education" bundle="messages.EduCoreBundle"/> <registryKey key="edu.marketplace.solutions.sharing.prompt.default.delay" description="Delay of prompting second banner (in millis). Default value is equal to 14 days." defaultValue="1209600000"/> <registryKey key="edu.marketplace.PostMarketplaceProjectToGitHub.completion.condition" description="Course completion percentage, which should prompt the student to publish the project on GitHub" defaultValue="80"/> <registryKey key="edu.learning.objects.storage.type" description="Controls the way the original author data is stored in the project. This setting does not affect existing course projects, it affects only newly created projects" defaultValue="[SQLite*|YAML]"/> <toolWindow id="Task" anchor="right" order="first" factoryClass="com.jetbrains.edu.learning.taskToolWindow.ui.TaskToolWindowFactory" icon="com.jetbrains.edu.EducationalCoreIcons.TaskToolWindow.CourseToolWindow"/> <toolWindow id="Educational.CheckDetails" anchor="bottom" canCloseContents="true" doNotActivateOnStart="true" factoryClass="com.jetbrains.edu.learning.checker.details.CheckDetailsToolWindowFactory" icon="com.jetbrains.edu.EducationalCoreIcons.CheckPanel.CheckDetailsToolWindow"/> <!-- placeholders --> <editorFactoryListener implementation="com.jetbrains.edu.learning.editor.EduEditorFactoryListener"/> <highlightingPassFactory implementation="com.jetbrains.edu.learning.placeholder.PlaceholderHighlightingPassFactory"/> <additionalTextAttributes scheme="Default" file="colorScheme/EduDefault.xml"/> <additionalTextAttributes scheme="Darcula" file="colorScheme/EduDarcula.xml"/> <registryKey key="edu.placeholder.highlighting.pass" defaultValue="false" restartRequired="true" description="Render answer placeholders in JetBrains Academy courses using highlighting API"/> <!-- should be last, otherwise project tree will be changed with GradleTreeStructureProvider --> <highlightErrorFilter implementation="com.jetbrains.edu.learning.editor.EduHighlightErrorFilter"/> <!-- Rename --> <renamePsiElementProcessor implementation="com.jetbrains.edu.learning.handlers.rename.SectionRenameProcessor" order="first"/> <renamePsiElementProcessor implementation="com.jetbrains.edu.learning.handlers.rename.LessonRenameProcessor" order="first"/> <renamePsiElementProcessor implementation="com.jetbrains.edu.learning.handlers.rename.TaskRenameProcessor" order="first"/> <renamePsiElementProcessor implementation="com.jetbrains.edu.learning.handlers.rename.EduTaskFileRenameProcessor" order="first"/> <!-- Move --> <refactoring.moveHandler implementation="com.jetbrains.edu.learning.handlers.EduMoveDelegate" order="first"/> <!-- Notifications --> <editorNotificationProvider implementation="com.jetbrains.edu.learning.placeholderDependencies.UnsolvedDependenciesNotificationProvider"/> <editorNotificationProvider implementation="com.jetbrains.edu.learning.stepik.UpdateCourseNotificationProvider"/> <editorNotificationProvider implementation="com.jetbrains.edu.learning.editor.EduTaskFileNotificationProvider"/> <editorNotificationProvider implementation="com.jetbrains.edu.learning.yaml.YamlConfigNotificationProvider"/> <editorNotificationProvider implementation="com.jetbrains.edu.coursecreator.framework.editor.SyncChangesEditorNotificationsProvider"/> <editorNotificationProvider implementation="com.jetbrains.edu.learning.agreement.UserAgreementEditorNotificationsProvider"/> <editorNotificationProvider implementation="com.jetbrains.edu.learning.stepik.hyperskill.InstallHyperskillPluginEditorNotificationsProvider"/> <!-- com.jetbrains.edu.learning.notification.EduNotificationManager.JETBRAINS_ACADEMY_GROUP_ID --> <notificationGroup id="JetBrains Academy" displayType="BALLOON" bundle="messages.EduCoreBundle" key="notification.group.edu.tools"/> <!--suppress PluginXmlValidity --> <statistics.applicationUsagesCollector implementation="com.jetbrains.edu.learning.statistics.EduStateUsagesCollector"/> <statistics.counterUsagesCollector implementationClass="com.jetbrains.edu.learning.statistics.EduCounterUsageCollector"/> <applicationService serviceImplementation="com.jetbrains.edu.learning.EduSettings"/> <applicationService serviceImplementation="com.jetbrains.edu.learning.coursera.CourseraSettings"/> <httpRequestHandler implementation="com.jetbrains.edu.learning.stepik.builtInServer.StepikRestService"/> <httpRequestHandler implementation="com.jetbrains.edu.learning.taskToolWindow.ui.EduToolsResourcesRequestHandler"/> <registryKey key="edu.course.update.check.interval" description="Sets is course up to date check interval in seconds" defaultValue="18000"/> <!--for educators--> <xml.xmlSuppressionProvider implementation="com.jetbrains.edu.coursecreator.taskDescription.ShortcutInTaskDescriptionSuppressionProvider"/> <fileEditorProvider implementation="com.jetbrains.edu.coursecreator.framework.editor.EduSplitFileEditorProvider" order="first"/> <!-- Rename --> <renamePsiElementProcessor implementation="com.jetbrains.edu.coursecreator.handlers.rename.CCDescriptionFileRenameProcessor" order="first"/> <!-- Move --> <refactoring.moveHandler implementation="com.jetbrains.edu.coursecreator.handlers.move.CCSectionMoveHandlerDelegate" order="first"/> <refactoring.moveHandler implementation="com.jetbrains.edu.coursecreator.handlers.move.CCLessonMoveHandlerDelegate" order="first"/> <refactoring.moveHandler implementation="com.jetbrains.edu.coursecreator.handlers.move.CCTaskMoveHandlerDelegate" order="first"/> <highlightErrorFilter implementation="com.jetbrains.edu.coursecreator.CCHighlightErrorFilter"/> <projectViewPane implementation="com.jetbrains.edu.learning.projectView.CourseViewPane"/> <editorActionHandler action="EditorBackSpace" implementationClass="com.jetbrains.edu.learning.editor.EduTypedHandler" order="first"/> <editorActionHandler action="EditorDelete" implementationClass="com.jetbrains.edu.learning.editor.EduTypedHandler" order="first"/> <editorActionHandler action="EditorCut" implementationClass="com.jetbrains.edu.learning.editor.EduCutTypedHandler" order="first"/> <editorActionHandler action="EditorCutLineEnd" implementationClass="com.jetbrains.edu.learning.editor.EduTypedLineHandler"/> <editorActionHandler action="EditorCutLineBackward" implementationClass="com.jetbrains.edu.learning.editor.EduTypedLineHandler"/> <editorActionHandler action="EditorDeleteToLineEnd" implementationClass="com.jetbrains.edu.learning.editor.EduTypedLineHandler"/> <editorActionHandler action="EditorDeleteToLineStart" implementationClass="com.jetbrains.edu.learning.editor.EduTypedLineHandler"/> <editorActionHandler action="EditorDeleteLine" implementationClass="com.jetbrains.edu.learning.editor.EduTypedLineHandler"/> <experimentalFeature id="edu.course.creator.split.editor" percentOfUsers="100" internalFeature="true"> <description>Enables previous task view for guided projects</description> </experimentalFeature> <liveTemplateContext implementation="com.jetbrains.edu.coursecreator.taskDescription.HintTemplateContextType"/> <defaultLiveTemplates file="liveTemplates/hint.xml"/> <editorNotificationProvider implementation="com.jetbrains.edu.learning.yaml.GeneratedRemoteInfoNotificationProvider"/> <registryKey key="edu.course.creator.solve.all" description="Enables `Solve All Tasks Before` action" defaultValue="false"/> <writingAccessProvider implementation="com.jetbrains.edu.learning.editor.EditableFileProvider"/> <trailingSpacesOptionsProvider implementation="com.jetbrains.edu.learning.editor.TrailingSpacesOptionsAnswerTaskProvider"/> <experimentalFeature id="edu.course.sql" percentOfUsers="100" internalFeature="true"> <description>Enables support for SQL courses</description> </experimentalFeature> <experimentalFeature id="edu.course.update.new" percentOfUsers="100"> <description>Enable the new course update functionality to provide more efficient course updates</description> </experimentalFeature> <experimentalFeature id="edu.educator.help" percentOfUsers="100"> <description>Open educator help for newly created CC courses; add Help button to the toolbar above course view</description> </experimentalFeature> <registryKey key="edu.course.creator.fl.sync.changes.merging.timespan" description="The delay in ms before task file synchronization in the guided project for Course Creator.\nChanging the field requires reopening the project" defaultValue="1000"/> <iconMapper mappingFile="EduToolsIconMappings.json"/> <themeMetadataProvider path="JetBrainsAcademyPlugin.themeMetadata.json"/> <coursesStorageProvider implementation="com.jetbrains.edu.learning.newproject.coursesStorage.JetBrainsAcademyCoursesStorageProvider"/> <registryKey key="edu.network.request.assertion.policy" description="Assertion policy for network requests from EDT in JetBrains Academy plugin" defaultValue="[OFF|LOG_ERROR*|EXCEPTION]"/> </extensions> <extensions defaultExtensionNs="Educational"> <!-- Only for development purposes --> <configurator language="TEXT" implementationClass="com.jetbrains.edu.learning.configuration.PlainTextConfigurator"/> <optionsProvider instance="com.jetbrains.edu.learning.stepik.StepikOptions"/> <optionsProvider instance="com.jetbrains.edu.learning.coursera.CourseraOptions"/> <checkListener implementation="com.jetbrains.edu.learning.statistics.PostFeedbackCheckListener"/> <checkListener implementation="com.jetbrains.edu.coursecreator.validation.ValidationCheckListener"/> <coursesPlatformProviderFactory id="Marketplace" order="first" implementation="com.jetbrains.edu.learning.marketplace.newProjectUI.MarketplacePlatformProviderFactory"/> <coursesPlatformProviderFactory id="Hyperskill" order="after Marketplace" implementation="com.jetbrains.edu.learning.stepik.hyperskill.newProjectUI.HyperskillInstallPluginPlatformProviderFactory"/> <coursesPlatformProviderFactory id="Coursera" order="after Hyperskill" implementation="com.jetbrains.edu.learning.coursera.CourseraPlatformProviderFactory"/> <remoteTaskChecker implementation="com.jetbrains.edu.learning.coursera.CourseraTaskChecker"/> <!-- Course compatibility providers --> <compatibilityProvider language="JAVA" implementationClass="com.jetbrains.edu.learning.compatibility.JCourseCompatibilityProvider"/> <compatibilityProvider language="kotlin" implementationClass="com.jetbrains.edu.learning.compatibility.KtCourseCompatibilityProvider"/> <compatibilityProvider language="Scala" environment="Gradle" implementationClass="com.jetbrains.edu.learning.compatibility.ScalaGradleCourseCompatibilityProvider"/> <compatibilityProvider language="Scala" environment="sbt" implementationClass="com.jetbrains.edu.learning.compatibility.ScalaSbtCourseCompatibilityProvider"/> <compatibilityProvider language="kotlin" environment="Android" implementationClass="com.jetbrains.edu.learning.compatibility.AndroidCourseCompatibilityProvider"/> <compatibilityProvider language="Python" implementationClass="com.jetbrains.edu.learning.compatibility.PyCourseCompatibilityProvider"/> <compatibilityProvider language="Python" environment="unittest" implementationClass="com.jetbrains.edu.learning.compatibility.PyCourseCompatibilityProvider"/> <compatibilityProvider language="JavaScript" implementationClass="com.jetbrains.edu.learning.compatibility.JsCourseCompatibilityProvider"/> <compatibilityProvider language="Rust" implementationClass="com.jetbrains.edu.learning.compatibility.RsCourseCompatibilityProvider"/> <compatibilityProvider language="go" implementationClass="com.jetbrains.edu.learning.compatibility.GoCourseCompatibilityProvider"/> <compatibilityProvider language="PHP" implementationClass="com.jetbrains.edu.learning.compatibility.PhpCourseCompatibilityProvider"/> <compatibilityProvider language="SQL" implementationClass="com.jetbrains.edu.learning.compatibility.SqlGradleCourseCompatibilityProvider"/> <compatibilityProvider language="Shell Script" implementationClass="com.jetbrains.edu.learning.compatibility.ShellCourseCompatibilityProvider"/> <!--educator--> <optionsProvider instance="com.jetbrains.edu.coursecreator.settings.CCOptions"/> <pathMacroProvider implementation="com.jetbrains.edu.learning.checker.TaskRunConfigurationPathMacroProvider"/> <courseMetadataProcessor implementation="com.jetbrains.edu.learning.marketplace.lti.LtiCourseMetadataProcessor"/> <courseMetadataProcessor implementation="com.jetbrains.edu.learning.statistics.metadata.CoursePageExperimentMetadataProcessor"/> <courseMetadataProcessor implementation="com.jetbrains.edu.learning.statistics.metadata.EntryPointMetadataProcessor"/> <courseMetadataProcessor implementation="com.jetbrains.edu.learning.marketplace.metadata.OpenOnSiteLinkMetadataProcessor"/> </extensions> <xi:include href="/META-INF/Marketplace.xml" xpointer="xpointer(/idea-plugin/*)"/> <xi:include href="/META-INF/LTI.xml" xpointer="xpointer(/idea-plugin/*)"/> <xi:include href="/META-INF/course-storage.xml" xpointer="xpointer(/idea-plugin/*)"/> <extensions defaultExtensionNs="Educational"> <optionsProvider instance="com.jetbrains.edu.learning.agreement.UserAgreementOptions"/> </extensions> </idea-plugin>