<idea-plugin visibility="internal">
  <dependencies>
    <module name="intellij.xml.impl"/>
    <module name="intellij.css.backend"/>
    <module name="intellij.javascript.ultimate"/>
    <plugin id="HtmlTools"/>
    <plugin id="intellij.webpack"/>

    <!-- TODO remove this dependency (see org.angular2.cli.config.AngularLintConfiguration ) -->
    <plugin id="tslint"/>
  </dependencies>

  <extensionPoints>
    <extensionPoint qualifiedName="org.angular2.templateScopesProvider"
                    interface="org.angular2.codeInsight.template.Angular2TemplateScopesProvider"
                    dynamic="true"/>
    <extensionPoint qualifiedName="org.angular2.frameworkHandler"
                    interface="org.angular2.entities.Angular2FrameworkHandler"
                    dynamic="true"/>
    <extensionPoint qualifiedName="org.angular2.configProvider"
                    interface="org.angular2.cli.config.AngularConfigProvider"
                    dynamic="true"/>
    <extensionPoint qualifiedName="org.angular2.entitiesSource"
                    interface="org.angular2.entities.Angular2EntitiesSource"
                    dynamic="true"/>
    <extensionPoint qualifiedName="org.angular2.jsHandlersFactory"
                    interface="org.angular2.codeInsight.Angular2JSHandlersFactory"
                    dynamic="true"/>
    <extensionPoint qualifiedName="org.angular2.importsHandler"
                    interface="org.angular2.codeInsight.imports.Angular2ImportsHandler"
                    dynamic="true"/>
  </extensionPoints>

  <extensions defaultExtensionNs="com.intellij">
    <additionalTextAttributes scheme="IntelliJ Light" file="colorSchemes/Angular2IntelliJLight.xml"/>
    <additionalTextAttributes scheme="Darcula" file="colorSchemes/Angular2Darcula.xml"/>
    <additionalTextAttributes scheme="High contrast" file="colorSchemes/Angular2HighContrast.xml"/>
    <additionalTextAttributes scheme="Light" file="colorSchemes/Angular2Light.xml"/>
    <additionalTextAttributes scheme="Dark" file="colorSchemes/Angular2Dark.xml"/>

    <!-- Angular 2 contributions -->
    <polySymbols.framework id="angular" implementation="org.angular2.Angular2Framework"/>

    <projectService serviceInterface="org.angular2.cli.AngularCliSchematicsRegistryService"
                    serviceImplementation="org.angular2.cli.AngularCliSchematicsRegistryServiceImpl"/>
    <javascript.names.suggester implementation="org.angular2.naming.Angular2NamesSuggester"/>

    <projectService serviceInterface="org.angular2.refactoring.extractComponent.Angular2CliComponentGenerator"
                    serviceImplementation="org.angular2.refactoring.extractComponent.Angular2CliComponentGeneratorImpl"
    />
    <platform.backend.documentation.psiTargetProvider
      implementation="org.angular2.codeInsight.documentation.Angular2ElementDocumentationTargetFactory"/>

    <javascript.rename.extension implementation="org.angular2.refactoring.Angular2RenameExtension"/>
    <localInspection implementationClass="org.angular2.inspections.AngularCliAddDependencyInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="WARNING" language="JSON"
                     key="angular.inspection.install-with-ng-add.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularIncorrectTemplateDefinitionInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="TypeScript"
                     key="angular.inspection.invalid-template-definition.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularMissingOrInvalidDeclarationInModuleInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="TypeScript"
                     key="angular.inspection.invalid-declaration-in-module.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularInvalidImportedOrDeclaredSymbolInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="TypeScript"
                     key="angular.inspection.wrong-entity-type.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularRecursiveModuleImportExportInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="TypeScript"
                     key="angular.inspection.cyclic-module-dependency.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularUndefinedModuleExportInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="TypeScript"
                     key="angular.inspection.undefined-export.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularInvalidEntryComponentInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="TypeScript"
                     key="angular.inspection.invalid-entry-component.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularInvalidSelectorInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR"
                     key="angular.inspection.invalid-directive-selector.name"
                     bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularNonStandaloneComponentImportsInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="TypeScript"
                     key="angular.inspection.non-standalone-component-imports.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularInaccessibleSymbolInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR"
                     key="angular.inspection.inaccessible-symbol.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularUncalledSignalLengthPropertyAccessInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="WARNING" language="TypeScript"
                     key="angular.inspection.uncalled-signal-length-property-access.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularUnusedComponentImportInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="TypeScript"
                     key="angular.inspection.unused-component-import.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularIncorrectLetUsageInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="Angular2"
                     key="angular.inspection.incorrect-let-usage.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularUnsupportedSyntaxInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" level="ERROR" language="Angular2"
                     key="angular.inspection.unsupported-syntax-inspection.name" bundle="messages.Angular2Bundle"/>

    <intentionAction>
      <language>Angular2</language>
      <className>org.angular2.intentions.AngularIntroduceLetVariableIntention</className>
      <bundleName>messages.Angular2Bundle</bundleName>
      <categoryKey>angular.intention.category</categoryKey>
    </intentionAction>
    <intentionAction>
      <language>TypeScript</language>
      <className>org.angular2.intentions.AngularInlineComponentTemplate</className>
      <bundleName>messages.Angular2Bundle</bundleName>
      <categoryKey>angular.intention.category</categoryKey>
    </intentionAction>
    <intentionAction>
      <language>TypeScript</language>
      <className>org.angular2.intentions.AngularExtractComponentTemplate</className>
      <bundleName>messages.Angular2Bundle</bundleName>
      <categoryKey>angular.intention.category</categoryKey>
    </intentionAction>
    <usageFilteringRuleProvider implementation="org.angular2.findUsages.Angular2UsageFilteringRuleProvider"/>
    <inlineActionHandler implementation="org.angular2.refactoring.inline.Angular2InlineHandler" id="Angular2Inline"
                         order="before genericJSInline"/>
    <directoryProjectGenerator implementation="org.angular2.cli.AngularCliProjectGenerator"/>
    <projectTemplatesFactory implementation="org.angular2.AngularProjectTemplatesFactory"/>
    <!-- works in new IDEA wizard -->
    <moduleBuilder builderClass="org.angular2.AngularCLIModuleBuilder"/>
    <directoryProjectConfigurator implementation="org.angular2.cli.Angular2ProjectConfigurator"/>
    <framework.detector implementation="org.angular2.cli.Angular2CliFrameworkDetector"/>
    <registryKey key="angular.detect.cli.configuration" defaultValue="false" description="Enables framework detection for Angular CLI"/>

    <stubIndex implementation="org.angular2.index.Angular2TemplateUrlIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2SymbolIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2SourcePipeIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2SourceDirectiveIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2SourceModuleIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2IvyPipeIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2IvyDirectiveIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2IvyModuleIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2CustomCssPropertyInJsIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2CustomCssPropertyInHtmlAttributeIndex"/>
    <findUsagesHandlerFactory implementation="org.angular2.findUsages.Angular2FindUsagesHandlerFactory" order="before JavaScript"/>
    <psi.referenceContributor language="TypeScript" implementation="org.angular2.codeInsight.refs.Angular2TSReferencesContributor"/>
    <psi.referenceContributor language="HtmlCompatible" implementation="org.angular2.codeInsight.refs.Angular2HtmlReferencesContributor"/>
    <polySymbols.psiReferenceProvider hostElementClass="org.angular2.lang.html.psi.Angular2HtmlNgContentSelector"
                                      hostLanguage="Angular2Html"
                                      implementationClass="org.angular2.web.references.Angular2SelectorReferenceProvider$NgContentSelectorProvider"/>
    <polySymbols.psiReferenceProvider hostElementClass="com.intellij.lang.javascript.psi.JSLiteralExpression"
                                      hostLanguage="TypeScript"
                                      implementationClass="org.angular2.web.references.Angular2SelectorReferenceProvider$NgDecoratorSelectorProvider"/>
    <polySymbols.psiReferenceProvider hostElementClass="com.intellij.lang.javascript.psi.JSLiteralExpression"
                                      hostLanguage="TypeScript"
                                      implementationClass="org.angular2.web.references.Angular2DirectivePropertyLiteralReferenceProvider"/>
    <polySymbols.psiReferenceProvider hostElementClass="org.angular2.lang.html.psi.Angular2HtmlBlock"
                                      hostLanguage="Angular2Html"
                                      implementationClass="org.angular2.codeInsight.blocks.Angular2BlockReferenceProvider"/>
    <polySymbols.declarationProvider implementation="org.angular2.web.declarations.Angular2SelectorDeclarationProvider"/>
    <polySymbols.declarationProvider implementation="org.angular2.web.declarations.Angular2DirectiveExportAsDeclarationProvider"/>
    <polySymbols.declarationProvider implementation="org.angular2.web.declarations.Angular2DirectivePropertyDeclarationProvider"/>
    <polySymbols.declarationProvider implementation="org.angular2.web.declarations.Angular2DirectiveAttributeDeclarationProvider"/>
    <polySymbols.declarationProvider implementation="org.angular2.web.declarations.Angular2CustomCssPropertyDeclarationProvider"/>
    <polySymbols.webTypes.symbolFactory namespace="html" kindName="ng-blocks"
                                        implementation="org.angular2.codeInsight.blocks.Angular2HtmlBlockSymbol$Factory"/>
    <polySymbols.webTypes.symbolFactory namespace="html" kindName="ng-block-parameters"
                                        implementation="org.angular2.codeInsight.blocks.Angular2BlockParameterSymbol$Factory"/>
    <polySymbols.webTypes.symbolFactory namespace="html" kindName="ng-block-parameter-prefixes"
                                        implementation="org.angular2.codeInsight.blocks.Angular2BlockParameterPrefixSymbol$Factory"/>
    <polySymbols.psiSourcedSymbolProvider implementation="org.angular2.web.findUsages.Angular2PsiSourcedPolySymbolProvider"/>
    <polySymbols.documentationCustomizer implementation="org.angular2.web.Angular2SymbolDocumentationCustomizer"/>
    <polySymbols.highlightingCustomizer id="angular2"
                                        implementation="org.angular2.web.Angular2SymbolHighlightingCustomizer"
                                        order="before js, before html"/>
    <elementDescriptionProvider
      order="first"
      implementation="org.angular2.refactoring.Angular2ElementDescriptionProvider"/>
    <searcher forClass="com.intellij.psi.search.searches.ReferencesSearch$SearchParameters"
              implementationClass="org.angular2.findUsages.Angular2ComponentClassInTemplateUsageSearcher"/>
    <referencesSearch implementation="org.angular2.findUsages.Angular2ReferenceSearcher"/>
    <gotoSymbolContributor implementation="org.angular2.navigation.Angular2GotoSymbolContributor"/>
    <gotoRelatedProvider implementation="org.angular2.navigation.Angular2GotoRelatedProvider"/>
    <typedHandler implementation="org.angular2.codeInsight.blocks.Angular2HtmlBlocksTypedHandler"/>
    <typedHandler implementation="org.angular2.editor.Angular2BracesInterpolationTypedHandler"/>
    <moveFileHandler implementation="org.angular2.refactoring.Angular2MoveFileHandler" order="first"/>
    <completion.htmlInTextCompletionPopupExtension
      implementation="org.angular2.codeInsight.blocks.Angular2HtmlBlocksInTextCompletionPopupExtension"/>

    <liveTemplateContext contextId="Angular" implementation="org.angular2.liveTemplate.Angular2BaseLiveTemplateContextType"/>
    <liveTemplateContext contextId="ANGULAR_TOP_LEVEL_STATEMENT" baseContextId="Angular"
                         implementation="com.intellij.lang.javascript.liveTemplates.typescript.TypeScriptTopLevelStatementContextType"/>
    <liveTemplateContext contextId="ANGULAR_EXPRESSION" baseContextId="Angular"
                         implementation="com.intellij.lang.javascript.liveTemplates.typescript.TSExpressionContextType"/>
    <liveTemplateContext contextId="ANGULAR_CLASS" baseContextId="Angular"
                         implementation="com.intellij.lang.javascript.liveTemplates.typescript.TSClassContextType"/>
    <liveTemplateContext contextId="ANGULAR_STATEMENT" baseContextId="Angular"
                         implementation="com.intellij.lang.javascript.liveTemplates.typescript.TSStatementContextType"/>
    <liveTemplateContext contextId="ANGULAR_TEMPLATE" baseContextId="Angular"
                         implementation="org.angular2.liveTemplate.Angular2TemplateContextType"/>
    <defaultLiveTemplates file="liveTemplates/Angular2"/>
    <lang.importOptimizer language="TypeScript" id="Angular2"
                          implementationClass="org.angular2.codeInsight.imports.Angular2TypeScriptImportsOptimizer"
                          order="before TypeScript"/>
    <codeInsight.parameterInfo language="Angular2"
                               implementationClass="org.angular2.codeInsight.attributes.Angular2TemplateBindingsParameterInfoHandler"/>
    <codeInsight.parameterInfo language="Angular2Html"
                               implementationClass="org.angular2.codeInsight.attributes.Angular2TemplateBindingsParameterInfoHandler"/>
    <codeInsight.parameterInfo language="Angular2" implementationClass="org.angular2.codeInsight.blocks.Angular2BlockParameterInfoHandler"/>
    <codeInsight.parameterInfo language="Angular2Html"
                               implementationClass="org.angular2.codeInsight.blocks.Angular2BlockParameterInfoHandler"/>

    <!-- Angular 2 HTML template contributions -->
    <fileType name="Angular2Html" implementationClass="org.angular2.lang.html.Angular2HtmlFileType" fieldName="INSTANCE"
              language="Angular2Html"/>
    <fileType name="Angular17Html" implementationClass="org.angular2.lang.html.Angular17HtmlFileType" fieldName="INSTANCE"
              language="Angular17Html"/>
    <fileType name="Angular181Html" implementationClass="org.angular2.lang.html.Angular181HtmlFileType" fieldName="INSTANCE"
              language="Angular181Html"/>
    <fileType name="Angular20Html" implementationClass="org.angular2.lang.html.Angular20HtmlFileType" fieldName="INSTANCE"
              language="Angular20Html"/>
    <langCodeStyleSettingsProvider implementation="org.angular2.options.Angular2HtmlCodeStyleSettingsProvider"/>
    <fileIndentOptionsProvider implementation="org.angular2.lang.html.psi.formatter.Angular2HtmlFileIndentOptionsProvider"
                               id="angular2html" order="before html"/>
    <extendWordSelectionHandler implementation="org.angular2.editor.AngularBlockExtendWordSelectionHandler"/>
    <quoteHandler className="com.intellij.codeInsight.editorActions.HtmlQuoteHandler" fileType="Angular2Html"/>
    <lang.rearranger language="Angular2Html" implementationClass="org.angular2.lang.html.psi.arrangement.Angular2HtmlRearranger"/>
    <multiHostInjector implementation="org.angular2.editor.Angular2Injector" order="after JSCommentInjector, before JSConfigurationInjector"
                       id="angular2"/>
    <xml.xmlExtension implementation="org.angular2.codeInsight.Angular2HtmlExtension" order="before html, before poly-symbols-react"
                      id="angular2"/>
    <lang.parserDefinition language="Angular2Html" implementationClass="org.angular2.lang.html.Angular2HtmlParserDefinition"/>
    <languageStubDefinition language="Angular2Html" implementationClass="org.angular2.lang.stubs.Angular2HtmlLanguageStubDefinition"/>
    <lang.parserDefinition language="Angular17Html" implementationClass="org.angular2.lang.html.Angular17HtmlParserDefinition"/>
    <lang.parserDefinition language="Angular181Html" implementationClass="org.angular2.lang.html.Angular181HtmlParserDefinition"/>
    <lang.parserDefinition language="Angular20Html" implementationClass="org.angular2.lang.html.Angular20HtmlParserDefinition"/>
    <braceMatcher filetype="Angular17Html" implementationClass="org.angular2.lang.html.Angular17HtmlBraceMatcher"/>
    <braceMatcher filetype="Angular181Html" implementationClass="org.angular2.lang.html.Angular17HtmlBraceMatcher"/>
    <braceMatcher filetype="Angular20Html" implementationClass="org.angular2.lang.html.Angular17HtmlBraceMatcher"/>
    <tree.CustomLanguageASTComparator language="Angular2Html"
                                      implementationClass="org.angular2.lang.expr.parser.Angular2HtmlASTComparator"/>
    <lang.syntaxHighlighterFactory language="Angular2Html"
                                   implementationClass="org.angular2.lang.html.Angular2HtmlSyntaxHighlighterFactory"/>
    <lang.syntaxHighlighterFactory language="Angular17Html"
                                   implementationClass="org.angular2.lang.html.Angular17HtmlSyntaxHighlighterFactory"/>
    <lang.syntaxHighlighterFactory language="Angular181Html"
                                   implementationClass="org.angular2.lang.html.Angular181HtmlSyntaxHighlighterFactory"/>
    <lang.syntaxHighlighterFactory language="Angular20Html"
                                   implementationClass="org.angular2.lang.html.Angular20HtmlSyntaxHighlighterFactory"/>
    <completion.contributor language="Angular2Html" implementationClass="org.angular2.codeInsight.Angular2HtmlCompletionContributor"
                            id="Angular2HtmlCompletionContributor"/>
    <lookup.charFilter implementation="org.angular2.editor.Angular2LookupCharFilter" order="before xml"/>
    <localInspection implementationClass="org.angular2.inspections.AngularMissingEventHandlerInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.missing-event-handler.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularInsecureBindingToEventInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="WARNING" key="angular.inspection.insecure-binding-to-event.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularNonEmptyNgContentInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.ng-content-with-content.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularMultipleStructuralDirectivesInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.multiple-structural-directives.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularNgOptimizedImageInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="WEAK WARNING" key="angular.inspection.ng-optimized-image.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularInvalidAnimationTriggerAssignmentInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.animation-trigger-assignment.name"
                     bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularInvalidTemplateReferenceVariableInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.invalid-template-ref-var.name"
                     bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularUndefinedBindingInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.undefined-binding.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularInvalidI18nAttributeInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="WARNING" key="angular.inspection.i18n.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularAmbiguousComponentTagInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.ambiguous-component-tag.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularMissingRequiredDirectiveInputBindingInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.missing-required-directive-input.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularUndefinedTagInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.undefined-tag.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularBindingTypeMismatchInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.invalid-binding-type.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularIncorrectBlockUsageInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="Angular2Html"
                     level="ERROR" key="angular.inspection.incorrect-block-usage.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularForBlockNonIterableVarInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="Angular2Html"
                     level="ERROR" key="angular.inspection.for-block-non-iterable.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularDeferBlockOnTriggerInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="Angular2Html"
                     level="ERROR" key="angular.inspection.defer-block-on-trigger.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularUnresolvedPipeInspection"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.unresolved-pipe.name" bundle="messages.Angular2Bundle"/>
    <localInspection implementationClass="org.angular2.inspections.AngularIllegalForLoopTrackAccess"
                     groupKey="angular.inspection.group.name" enabledByDefault="true" language="HtmlCompatible"
                     level="ERROR" key="angular.inspection.illegal-for-loop-access.name" bundle="messages.Angular2Bundle"/>
    <errorQuickFixProvider implementation="org.angular2.inspections.Angular2ErrorQuickFixProvider"/>
    <idIndexer filetype="Angular2Html" implementationClass="org.angular2.lang.html.index.Angular2HtmlIdIndexer"/>
    <todoIndexer filetype="Angular2Html" implementationClass="org.angular2.lang.html.index.Angular2HtmlTodoIndexer"/>
    <idIndexer filetype="Angular17Html" implementationClass="org.angular2.lang.html.Angular17HtmlIdIndexer"/>
    <todoIndexer filetype="Angular17Html" implementationClass="org.angular2.lang.html.Angular17HtmlTodoIndexer"/>
    <idIndexer filetype="Angular181Html" implementationClass="org.angular2.lang.html.Angular181HtmlIdIndexer"/>
    <todoIndexer filetype="Angular181Html" implementationClass="org.angular2.lang.html.Angular181HtmlTodoIndexer"/>
    <idIndexer filetype="Angular20Html" implementationClass="org.angular2.lang.html.Angular20HtmlIdIndexer"/>
    <todoIndexer filetype="Angular20Html" implementationClass="org.angular2.lang.html.Angular20HtmlTodoIndexer"/>
    <lang.formatter language="Angular2Html" implementationClass="org.angular2.lang.html.psi.formatter.Angular2HtmlFormattingModelBuilder"/>
    <lang.foldingBuilder language="Angular2Html" implementationClass="org.angular2.editor.Angular2HtmlFoldingBuilder"/>
    <gotoDeclarationHandler implementation="org.angular2.editor.Angular2GotoDeclarationHandler" order="first"/>
    <typeDeclarationProvider implementation="org.angular2.editor.Angular2TypeDeclarationProvider" order="first"/>
    <lang.symbolTypeProvider implementation="org.angular2.editor.Angular2TypeDeclarationProvider"/>
    <html.attributeValueProvider implementation="org.angular2.codeInsight.attributes.Angular2AttributeValueProvider"/>
    <colorSettingsPage implementation="org.angular2.lang.html.highlighting.Angular2ColorsAndFontsPage"/>
    <xml.xmlSuppressionProvider implementation="org.angular2.inspections.Angular2HtmlSuppressionProvider" order="first"/>
    <html.embeddedContentSupport implementation="org.angular2.lang.html.lexer.Angular2HtmlEmbeddedContentSupport"/>
    <copyPastePostProcessor implementation="org.angular2.codeInsight.imports.Angular2DeclarationsCopyPasteProcessor"/>
    <copyPastePostProcessor implementation="org.angular2.codeInsight.imports.Angular2ExpressionsCopyPasteProcessor"/>
    <platform.backend.documentation.linkHandler implementation="org.angular2.codeInsight.documentation.Angular2DocumentationLinkHandler"/>

    <polySymbols.webTypes enableByDefault="true" source="web-types/angular-base@0.0.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@2.0.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@10.0.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@14.2.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@16.0.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="true" source="web-types/angular@17.0.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@18.0.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@18.1.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@19.0.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@19.2.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@20.0.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@20.1.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="false" source="web-types/angular@20.2.0.web-types.json"/>
    <polySymbols.webTypes enableByDefault="true" source="web-types/angular-hacks.web-types.json"/>
    <polySymbols.webTypes enableByDefault="true" source="web-types/hammerjs.web-types.json"/>

    <polySymbols.queryScopeContributor implementation="org.angular2.web.Angular2SymbolQueryScopeContributor"/>
    <polySymbols.queryConfigurator implementation="org.angular2.web.Angular2SymbolQueryConfigurator"/>
    <polySymbols.queryResultsCustomizerFactory implementation="org.angular2.web.Angular2SymbolQueryResultsCustomizer$Factory"/>
    <polySymbols.codeCompletionItemCustomizer implementation="org.angular2.web.Angular2CodeCompletionItemCustomizer"/>
    <polySymbols.context kind="framework" name="angular" implementation="org.angular2.cli.AngularCliContextProvider"/>
    <completion.confidence language="Angular2Html" implementationClass="org.angular2.editor.Angular2PreventCompletionAutoPopupOnImport"/>

    <!-- Angular 2 SVG contributions -->
    <lang.parserDefinition language="Angular2Svg" implementationClass="org.angular2.lang.svg.Angular2SvgParserDefinition"/>
    <lang.parserDefinition language="Angular17Svg" implementationClass="org.angular2.lang.svg.Angular17SvgParserDefinition"/>
    <lang.parserDefinition language="Angular181Svg" implementationClass="org.angular2.lang.svg.Angular181SvgParserDefinition"/>
    <lang.parserDefinition language="Angular20Svg" implementationClass="org.angular2.lang.svg.Angular20SvgParserDefinition"/>
    <fileType name="Angular2Svg" implementationClass="org.angular2.lang.svg.Angular2SvgFileType" fieldName="INSTANCE"
              language="Angular2Svg"/>
    <fileType name="Angular17Svg" implementationClass="org.angular2.lang.svg.Angular17SvgFileType" fieldName="INSTANCE"
              language="Angular17Svg"/>
    <fileType name="Angular181Svg" implementationClass="org.angular2.lang.svg.Angular181SvgFileType" fieldName="INSTANCE"
              language="Angular181Svg"/>
    <fileType name="Angular20Svg" implementationClass="org.angular2.lang.svg.Angular20SvgFileType" fieldName="INSTANCE"
              language="Angular20Svg"/>
    <braceMatcher filetype="Angular17Svg" implementationClass="org.angular2.lang.html.Angular17HtmlBraceMatcher"/>
    <braceMatcher filetype="Angular181Svg" implementationClass="org.angular2.lang.html.Angular17HtmlBraceMatcher"/>
    <braceMatcher filetype="Angular20Svg" implementationClass="org.angular2.lang.html.Angular17HtmlBraceMatcher"/>
    <quoteHandler className="com.intellij.codeInsight.editorActions.HtmlQuoteHandler" fileType="Angular2Svg"/>

    <!-- Angular 2 Expression Language contributions -->
    <lang.syntaxHighlighter language="Angular2"
                            implementationClass="org.angular2.lang.expr.Angular2SyntaxHighlighter"/>
    <lang.syntaxHighlighter language="Angular20"
                            implementationClass="org.angular2.lang.expr.Angular20SyntaxHighlighter"/>
    <lang.formatter language="Angular2" implementationClass="org.angular2.lang.expr.formatter.Angular2FormattingModelBuilder"/>
    <codeInsight.template.postfixTemplateProvider language="Angular2"
                                                  implementationClass="com.intellij.codeInsight.template.postfix.templates.EmptyPostfixTemplateProvider"/>
    <lang.parserDefinition language="Angular2" implementationClass="org.angular2.lang.expr.Angular2ParserDefinition"/>
    <lang.parserDefinition language="Angular20" implementationClass="org.angular2.lang.expr.Angular20ParserDefinition"/>
    <stubElementRegistryExtension implementation="org.angular2.lang.Angular2StubRegistryExtension"/>
    <completion.contributor language="any" implementationClass="org.angular2.codeInsight.Angular2CompletionContributor"
                            id="Angular2CompletionContributor"
                            order="before JSPatternBasedCompletionContributor, before JSCompletionContributor, before xmlNonFirst, before cssClassOrIdReferenceCompletionContributor, before TypeScriptServiceCompletionContributor"/>
    <lang.braceMatcher language="Angular2" implementationClass="com.intellij.lang.javascript.highlighting.JSBraceMatcher"/>

    <implicitUsageProvider implementation="org.angular2.codeInsight.refs.Angular2ImplicitUsageProvider"/>
    <renamePsiElementProcessor implementation="org.angular2.refactoring.Angular2PipeRenameProcessor" order="first"/>
    <codeInsight.parameterInfo language="Angular2" implementationClass="com.intellij.lang.typescript.hint.TypeScriptParameterInfoHandler"/>
    <codeInsight.parameterNameHints language="Angular2Html"
                                    implementationClass="org.angular2.editor.Angular2InlayParameterHintsProvider"/>
    <highlightVisitor implementation="org.angular2.lang.expr.highlighting.Angular2RainbowVisitor"/>
    <polySymbols.psiReferenceProvider hostElementClass="org.angular2.lang.expr.psi.Angular2BlockParameter"
                                      hostLanguage="Angular2"
                                      implementationClass="org.angular2.codeInsight.blocks.Angular2BlockParameterReferenceProvider"/>
    <polySymbols.psiReferenceProvider hostElementClass="org.angular2.lang.expr.psi.Angular2TemplateBindingKey"
                                      hostLanguage="Angular2"
                                      implementationClass="org.angular2.codeInsight.attributes.Angular2TemplateBindingKeyReferenceProvider"/>

    <!-- CSS support -->
    <css.inclusionContext implementation="org.angular2.css.Angular2CssInclusionContext"/>
    <css.embeddedCssProvider implementation="org.angular2.codeInsight.Angular2EmbeddedCssProvider"/>
    <css.classOrIdUsagesProvider implementation="org.angular2.css.findUsages.Angular2CssClassOrIdUsagesProvider"/>
    <psi.fileReferenceHelper order="before JsCss" implementation="org.angular2.css.refs.Angular2CssFileReferenceHelper" />

    <!-- Angular2 metadata JSON contributions -->
    <stubElementTypeHolder class="org.angular2.entities.metadata.Angular2MetadataElementTypes" externalIdPrefix="NG-META:"/>
    <stubIndex implementation="org.angular2.index.Angular2MetadataPipeIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2MetadataClassNameIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2MetadataDirectiveIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2MetadataNodeModuleIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2MetadataFunctionIndex"/>
    <stubIndex implementation="org.angular2.index.Angular2MetadataModuleIndex"/>
    <fileType name="Angular Metadata JSON" implementationClass="org.angular2.entities.metadata.Angular2MetadataFileType"
              fieldName="INSTANCE"/>
    <filetype.stubBuilder filetype="Angular Metadata JSON" implementationClass="org.angular2.lang.metadata.MetadataJsonStubBuilder"/>
    <fileType.fileViewProviderFactory filetype="Angular Metadata JSON"
                                      implementationClass="org.angular2.lang.metadata.MetadataJsonFileViewProviderFactory"/>
    <lang.elementManipulator forClass="org.angular2.lang.html.psi.Angular2HtmlNgContentSelector"
                             implementationClass="org.angular2.lang.html.psi.impl.Angular2HtmlNgContentSelectorManipulator"/>
    <notificationGroup id="Angular CLI" displayType="BALLOON" isLogByDefault="false"
                       bundle="messages.Angular2Bundle" key="angular.description.angular-cli"/>

    <!-- we store settings under ts since there are only ts server specific options there -->
    <projectConfigurable parentId="settings.typescriptcompiler"
                         instance="org.angular2.options.AngularConfigurable"
                         id="settings.angularservice"
                         bundle="messages.Angular2Bundle"
                         key="angular.configurable.service.title"
                         nonDefaultProject="true"
    />

    <advancedSetting default="false"
                     id="angular.gtr.toolbar.enable"
                     groupKey="advanced.setting.angular"
                     bundle="messages.Angular2Bundle"
    />

    <!-- ReactiveForms support contributions -->
    <polySymbols.queryResultsCustomizerFactory
      implementation="org.angular2.library.forms.Angular2FormsPolySymbolQueryResultsCustomizer$Factory"/>
    <polySymbols.queryScopeContributor implementation="org.angular2.library.forms.Angular2FormsSymbolQueryScopeContributor"/>
    <polySymbols.codeCompletionItemCustomizer
      implementation="org.angular2.library.forms.Angular2FormsCodeCompletionItemCustomizer"/>
    <polySymbols.problemQuickFixProvider
      implementation="org.angular2.library.forms.quickFixes.Angular2FormsProblemQuickFixProvider"/>
    <annotator language="Angular2Html" implementationClass="org.angular2.library.forms.Angular2FormsAnnotator"/>
    <annotator language="TypeScript" implementationClass="org.angular2.library.forms.Angular2FormsAnnotator"/>
    <editorFloatingToolbarProvider implementation="org.angular2.navigation.Angular2GotoRelatedToolbarProvider"/>
    <openInBrowserFloatingToolbarSuppressor implementation="org.angular2.navigation.BrowsersToolbarSuppressor"/>
  </extensions>

  <extensions defaultExtensionNs="JavaScript">
    <jsDocCustomTagsHandler implementation="org.angular2.lang.Angular2JSDocTagsHandler" version="0"/>

    <tsConfigCustomizer implementation="org.angular2.codeInsight.config.Angular2TypeScriptConfigCustomizer"/>

    <!-- Angular2 HTML language contributions -->
    <dialectSpecificHandlersFactory language="Angular2Html" implementationClass="org.angular2.codeInsight.Angular2SpecificHandlersFactory"/>

    <!-- Angular 2 Expression language contributions -->
    <frameworkIndexingHandler implementation="org.angular2.index.Angular2IndexingHandler" version="25"/>
    <frameworkSpecificHandler language="Angular2" implementationClass="org.angular2.lang.expr.Angular2JSFrameworkSpecificHandler"/>
    <elementScopeProvider implementation="org.angular2.codeInsight.Angular2ResolveScopeProvider"/>
    <dialectSpecificHandlersFactory language="Angular2" implementationClass="org.angular2.codeInsight.Angular2SpecificHandlersFactory"/>
    <analysisHandlersFactory language="Angular2" implementationClass="org.angular2.inspections.Angular2AnalysisHandlersFactory"/>
    <highlightingHandlersFactory language="Angular2" implementationClass="org.angular2.inspections.Angular2HighlightingHandlersFactory"/>
    <inheritedLanguagesConfigurableProvider language="Angular2"
                                            implementationClass="org.angular2.codeInsight.Angular2LanguageConfigurableProvider"/>
    <handlersFactory language="Angular2" implementationClass="org.angular2.codeInsight.Angular2HandlersFactory"/>
    <importCandidatesFactory implementation="org.angular2.codeInsight.imports.Angular2GlobalImportCandidatesProvider$Factory"/>
    <unresolvedReferenceErrorUpdater implementation="org.angular2.inspections.Angular2UnresolvedReferenceErrorUpdater"
                                     order="last"/>

    <!-- Angular2 metadata JSON contributions -->
    <nodeModulesIndexableFileNamesProvider implementation="org.angular2.index.Angular2IndexableFileNamesProvider"/>
    <scanningFileListenerContributor implementation="org.angular2.Angular2ExcludeContributor"/>

    <!-- Angular2 TypeScript contributions -->
    <frameworkSpecificHandler language="TypeScript" implementationClass="org.angular2.lang.Angular2TSFrameworkSpecificHandler"/>
    <languageServiceProvider implementation="org.angular2.lang.expr.service.Angular2LanguageServiceProvider" order="first"/>
    <languageServiceQuickFixProvider implementation="org.angular2.lang.expr.service.Angular2LanguageServiceQuickFixProvider"/>
    <commonHandlersFactory language="Angular2" implementationClass="org.angular2.lang.expr.formatter.Angular2CommonHandlersFactory"/>
  </extensions>

  <extensions defaultExtensionNs="org.angular2">
    <templateScopesProvider implementation="org.angular2.codeInsight.template.Angular2StandardSymbolsScopesProvider"
                            id="standardSymbols"/>
    <templateScopesProvider implementation="org.angular2.codeInsight.template.Angular2TemplateElementsScopeProvider"
                            id="templateElements" order="after standardSymbols"/>
    <templateScopesProvider implementation="org.angular2.codeInsight.template.Angular2ComponentScopeProvider"
                            id="component" order="after templateElements"/>
    <configProvider implementation="org.angular2.cli.config.AngularCliConfigProvider"/>
    <entitiesSource implementation="org.angular2.entities.source.Angular2SourceEntitiesSource" id="source"/>
    <entitiesSource implementation="org.angular2.entities.ivy.Angular2IvyEntitiesSource" id="ivy"
                    order="after source"/>
    <entitiesSource implementation="org.angular2.entities.metadata.Angular2MetadataEntitiesSource" id="metadata"
                    order="after ivy"/>
    <jsHandlersFactory implementation="org.angular2.codeInsight.DefaultAngular2HandlersFactory"
                       id="default" order="last"/>
    <importsHandler implementation="org.angular2.codeInsight.imports.Angular2ClassBasedEntityImportsHandler"/>
  </extensions>

  <actions resource-bundle="messages.Angular2Bundle">
    <action class="org.angular2.cli.actions.AngularCliGenerateAction" id="angularCliGenerate"
            icon="/icons/angular2.svg">
      <add-to-group group-id="NewWebDevelopment" anchor="before" relative-to-action="NewJavaScriptFile"/>
    </action>
    <action class="org.angular2.cli.actions.AngularCliAddDependencyAction" id="angularCliAdd"
            icon="/icons/angular2.svg">
      <add-to-group group-id="NewWebDevelopment" anchor="before" relative-to-action="NewJavaScriptFile"/>
    </action>
    <action id="Angular2ExtractComponentAction"
            icon="/icons/angular2.svg"
            class="org.angular2.refactoring.extractComponent.Angular2ExtractComponentAction">
      <add-to-group group-id="IntroduceActionsGroup"/>
    </action>
    <action id="Angular2VisualizeGeneratedTcbAction"
            internal="true"
            class="org.angular2.lang.expr.service.tcb.Angular2VisualizeGeneratedTcbAction">
      <add-to-group group-id="Internal"/>
    </action>
  </actions>

  <applicationListeners>
    <listener class="org.angular2.cli.config.AngularConfigFileListener" topic="com.intellij.openapi.vfs.newvfs.BulkFileListener"/>
    <listener class="org.angular2.navigation.Angular2GotoRelatedToolbarSettingsListener" topic="com.intellij.openapi.options.advanced.AdvancedSettingsChangeListener"/>
  </applicationListeners>
</idea-plugin>
