<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<!--
 #=============================================================================#
 # Copyright (c) 2005, 2021 Stephan Wahlbrink and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 # which is available at https://www.apache.org/licenses/LICENSE-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 # 
 # Contributors:
 #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
 #=============================================================================#
-->

<plugin>
   
   <extension
         point="org.eclipse.core.runtime.preferences">
      <initializer class="org.eclipse.statet.internal.r.core.RCorePreferenceInitializer"/>
   </extension>
   
   <extension
         point="org.eclipse.core.resources.natures"
         id="org.eclipse.statet.r.resourceProjects.R"
         name="R&#x2002;[StatET]">
      <runtime>
         <run class="org.eclipse.statet.internal.r.core.RProjectNature"/>
      </runtime>
      <requires-nature
            id="org.eclipse.statet.ide.resourceProjects.Statet"/>
      <builder
            id="org.eclipse.statet.r.resourceProjects.RBuilder"/>
   </extension>
   <extension
         point="org.eclipse.core.resources.natures"
         id="org.eclipse.statet.r.resourceProjects.RPkg"
         name="R-Package&#x2002;[StatET]">
      <runtime>
         <run class="org.eclipse.statet.internal.r.core.RPkgProjectNature"/>
      </runtime>
      <requires-nature
            id="org.eclipse.statet.r.resourceProjects.R"/>
   </extension>
   <extension
         point="org.eclipse.core.contenttype.contentTypes">
      <content-type
            id="org.eclipse.statet.r.contentTypes.R"
            base-type="org.eclipse.core.runtime.text"
            name="%contentTypes.R.name"
            file-extensions="R,Rhistory"
            priority="normal">
         <property name="org.eclipse.core.runtime.bom"/>
         <property name="org.eclipse.core.runtime.charset"/>
      </content-type>
      <content-type
            id="org.eclipse.statet.r.contentTypes.Rd"
            base-type="org.eclipse.core.runtime.text"
            describer="org.eclipse.statet.internal.r.core.RdTextContentDescriber"
            name="%contentTypes.Rd.name"
            file-extensions="Rd"
            priority="normal">
         <property name="org.eclipse.core.runtime.charset"/>
      </content-type>
      <content-type
            id="org.eclipse.statet.r.contentTypes.RData"
            name="%contentTypes.RData.name"
            file-extensions="RData"
            priority="normal">
      </content-type>
      <content-type
            id="org.eclipse.statet.r.contentTypes.RTranscript"
            base-type="org.eclipse.core.runtime.text"
            name="%contentTypes.RTranscript.name"
            file-extensions="Rtr"
            priority="normal">
         <property name="org.eclipse.core.runtime.bom"/>
         <property name="org.eclipse.core.runtime.charset"/>
      </content-type>
      <content-type
            id="org.eclipse.statet.r.contentTypes.RPkgDescription"
            base-type="org.eclipse.core.runtime.text"
            name="%contentTypes.RPkgDescription.name"
            file-names="DESCRIPTION"
            priority="normal"
            default-charset="US-ASCII">
         <property name="org.eclipse.core.runtime.bom"/>
         <property name="org.eclipse.core.runtime.charset"/>
         <describer
               class="org.eclipse.statet.internal.r.core.RPkgDescriptionTextContentDescriber">
         </describer>
      </content-type>
      <content-type
            id="org.eclipse.statet.r.contentTypes.RPkgNamespace"
            base-type="org.eclipse.core.runtime.text"
            name="%contentTypes.RPkgNamespace.name"
            file-names="NAMESPACE"
            priority="normal">
         <property name="org.eclipse.core.runtime.bom"/>
         <property name="org.eclipse.core.runtime.charset"/>
      </content-type>
   </extension>
   
   <extension
         point="org.eclipse.core.resources.markers"
         id="org.eclipse.statet.r.resourceMarkers.Tasks"
         name="%resourceMarkers_Task_name">
      <super type="org.eclipse.core.resources.taskmarker"/>
      <persistent value="true"/>
   </extension>
   
   <extension
         point="org.eclipse.core.resources.markers"
         id="org.eclipse.statet.r.resourceMarkers.BuildpathProblem"
         name="%resourceMarkers_BuildpathProblem_name">
      <super type="org.eclipse.core.resources.problemmarker"/>
      <super type="org.eclipse.core.resources.textmarker"/>
      <persistent value="true"/>
   </extension>
   <extension
         point="org.eclipse.core.resources.markers"
         id="org.eclipse.statet.r.resourceMarkers.RModelProblem"
         name="%resourceMarkers_RModelProblem_name">
      <super type="org.eclipse.core.resources.problemmarker"/>
      <super type="org.eclipse.core.resources.textmarker"/>
      <persistent value="true"/>
   </extension>
   
   <extension
         point="org.eclipse.core.resources.builders"
         id="org.eclipse.statet.r.resourceProjects.RBuilder"
         name="%resourceProjects_RInternalBuilder_name">
      <builder hasNature="true">
         <run class="org.eclipse.statet.internal.r.core.RSupportBuilder"/>
      </builder>
   </extension>
   <extension
         point="org.eclipse.team.core.fileTypes">
      <fileTypes
            extension="R"
            type="text"/>
      <fileTypes
            extension="Rd"
            type="text"/>
      <fileTypes
            extension="RData"
            type="binary">
      </fileTypes>
      <fileTypes
            extension="Rtr"
            type="text">
      </fileTypes>
      <fileTypes
            extension="Rhistory"
            type="text">
      </fileTypes>
   </extension>
   
   <extension
         point="org.eclipse.statet.ltk.ModelTypes">
      <modelType
            id="R">
      </modelType>
      <contentType
            contentTypeId="org.eclipse.statet.r.contentTypes.R"
            modelTypeId="R">
      </contentType>
      <unitType
            modelTypeId="R"
            contextKey="persistence.default"
            unitFactory="org.eclipse.statet.internal.r.core.RSourceUnitFactory">
      </unitType>
   </extension>
   <!--extension
         point="org.eclipse.statet.ltk.ModelAdapters">
      <adapterFactory
            modelTypeId="R"
            class="org.eclipse.statet.r.internal.core.RModelAdapterFactory">
      </adapterFactory>
   </extension-->
   
   <extension
         point="org.eclipse.core.filebuffers.documentSetup">
      <participant
            class="org.eclipse.statet.r.core.source.RDocumentSetupParticipant"
            contentTypeId="org.eclipse.statet.r.contentTypes.R"/>
   </extension>
   
   <extension
         point="org.eclipse.ltk.core.refactoring.deleteParticipants">
      <deleteParticipant
            id="org.eclipse.statet.r.refactoring.RModelDeleteParticipant"
            class="org.eclipse.statet.internal.r.core.refactoring.RModelDeleteParticipant"
            name="%refactoring_RModelDeleteParticipant_name">
         <enablement>
            <with
                  variable="affectedNatures">
               <iterate
                     operator="or">
                  <equals
                        value="org.eclipse.statet.r.resourceProjects.R">
                  </equals>
               </iterate>
            </with>
         </enablement>
      </deleteParticipant>
   </extension>
   
</plugin>
