<!--
  ~ Copyright (c) 2010-2020 BSI Business Systems Integration AG.
  ~ All rights reserved. This program and the accompanying materials
  ~ are made available under the terms of the Eclipse Public License v1.0
  ~ which accompanies this distribution, and is available at
  ~ http://www.eclipse.org/legal/epl-v10.html
  ~
  ~ Contributors:
  ~     BSI Business Systems Integration AG - initial API and implementation
  -->
<idea-plugin allow-bundled-update="true" require-restart="true">
  <id>org.eclipse.scout.sdk.s2i</id>
  <name>Eclipse Scout</name>
  <version>10.0.0.9999999999</version>

  <vendor url="https://www.eclipse.org/scout/">Eclipse Scout Project</vendor>

  <description><![CDATA[
      <p>
      Eclipse Scout integration for IntelliJ IDEA
      </p>
      <p>
      Includes:
        <br>
        <ul>
          <li>Derived resource update for FormData and PageData</li>
          <li>@ClassId validation inspections (missing, duplicates)</li>
          <li>Editor for Scout nls files</li>
          <li>Inspection for missing translations</li>
          <li>Code completion for Scout nls keys in Java, JavaScript and HTML</li>
          <li>Java code completion for Scout elements like FormFields, Menus, KeyStrokes, Codes and much more.</li>
        </ul>
        </p>
  ]]></description>

  <change-notes><![CDATA[
        <ul>
          <li>Adds an editor for Scout nls files.</li>
          <li>Adds a quick-fix for the 'Missing translation' inspection.</li>
          <li>Adds code completion for Scout nls keys in Java, JavaScript and HTML.</li>
          <li>Adds Java code completion for Scout elements like FormFields, Menus, KeyStrokes, Codes and much more.</li>
        </ul>
  ]]></change-notes>

  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
  <idea-version since-build="192.6817.14"/>

  <depends>com.intellij.modules.platform</depends>
  <depends>com.intellij.modules.lang</depends>
  <depends>com.intellij.modules.java</depends>
  <depends>org.jetbrains.idea.maven</depends>
  <depends>com.intellij.copyright</depends>
  <depends>com.intellij.properties</depends>
  <depends optional="true" config-file="withJavaScript.xml">JavaScript</depends>

  <extensions defaultExtensionNs="com.intellij">
    <postStartupActivity implementation="org.eclipse.scout.sdk.s2i.IdeaLogger"/>
    <postStartupActivity implementation="org.eclipse.scout.sdk.s2i.nls.IdeaTranslationStoreSupplier"/>
    <postStartupActivity implementation="org.eclipse.scout.sdk.s2i.IdeaSettingsCommentGenerator"/>
    <postStartupActivity implementation="org.eclipse.scout.sdk.s2i.IdeaMavenRunner"/>
    <postStartupActivity implementation="org.eclipse.scout.sdk.s2i.classid.AutoCreateClassIdStartup"/>
    <postStartupActivity implementation="org.eclipse.scout.sdk.s2i.EclipseScoutBundle"/>
    <projectService serviceInterface="org.eclipse.scout.sdk.s2i.derived.DerivedResourceManager"
                    serviceImplementation="org.eclipse.scout.sdk.s2i.derived.impl.DerivedResourceManagerImplementor"/>
    <projectService serviceInterface="org.eclipse.scout.sdk.s2i.classid.ClassIdCache"
                    serviceImplementation="org.eclipse.scout.sdk.s2i.classid.ClassIdCacheImplementor"/>
    <projectConfigurable groupId="language" displayName="Scout" id="preferences.ScoutSettings"
                         instance="org.eclipse.scout.sdk.s2i.settings.ScoutSettings"/>
    <macro implementation="org.eclipse.scout.sdk.s2i.IdeaHomePathMacro"/>
    <localInspection language="JAVA" shortName="MissingClassId" groupName="Scout" enabledByDefault="false" level="ERROR" key="missing.classid.annotation"
                     implementationClass="org.eclipse.scout.sdk.s2i.classid.MissingClassIdInspection"/>
    <localInspection language="JAVA" shortName="DuplicateClassId" groupName="Scout" enabledByDefault="false" level="ERROR" key="duplicate.classid.inspection.displayName"
                     implementationClass="org.eclipse.scout.sdk.s2i.classid.DuplicateClassIdInspection"/>
    <localInspection shortName="MissingTranslation" groupName="Scout" enabledByDefault="true" level="WARNING" key="missing.translation.inspection.displayName"
                     implementationClass="org.eclipse.scout.sdk.s2i.nls.inspection.MissingTranslationInspection"/>
    <fileType name="Scout National Language Support" extensions="nls" fieldName="INSTANCE" implementationClass="org.eclipse.scout.sdk.s2i.nls.NlsFileType"/>
    <fileEditorProvider implementation="org.eclipse.scout.sdk.s2i.nls.editor.NlsFileEditorProvider"/>
    <completion.contributor language="JAVA" implementationClass="org.eclipse.scout.sdk.s2i.nls.completion.NlsCompletionContributorForJava" id="scoutNlsCompletionJava" order="before propertiesCompletion"/>
    <completion.contributor language="HTML" implementationClass="org.eclipse.scout.sdk.s2i.nls.completion.NlsCompletionContributorForHtml" id="scoutNlsCompletionHtml" order="before html"/>
    <completion.contributor language="JAVA" implementationClass="org.eclipse.scout.sdk.s2i.template.TemplateCompletionContributor" id="scoutTemplateCompletionJava" order="first"/>
    <lang.documentationProvider language="JAVA" implementationClass="org.eclipse.scout.sdk.s2i.nls.doc.NlsDocumentationProviderForJava" id="scoutNlsKeyDocumentationJava" order="first"/>
    <lang.documentationProvider language="HTML" implementationClass="org.eclipse.scout.sdk.s2i.nls.doc.NlsDocumentationProviderForHtml" id="scoutNlsKeyDocumentationHtml" order="first"/>
    <liveTemplateMacro implementation="org.eclipse.scout.sdk.s2i.template.DescendantAbstractClassesEnumMacro"/>
    <liveTemplateMacro implementation="org.eclipse.scout.sdk.s2i.nls.NlsKeysEnumMacro"/>
    <liveTemplateMacro implementation="org.eclipse.scout.sdk.s2i.template.PsiExpressionEnumMacro"/>
  </extensions>

  <actions>
    <group id="org.eclipse.scout.sdk.s2i.ScoutMenu" text="Scout">
      <add-to-group group-id="MainMenu" relative-to-action="ToolsMenu" anchor="after"/>
      <action id="org.eclipse.scout.sdk.s2i.UpdateAllDerivedResourcesMenu"
              class="org.eclipse.scout.sdk.s2i.derived.impl.UpdateAllDerivedResourcesMenu"/>
    </group>
  </actions>

  <resource-bundle>messages.EclipseScoutBundle</resource-bundle>
</idea-plugin>
