<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<!--
 #=============================================================================#
 # Copyright (c) 2006, 2020 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.nico.core.NicoPreferenceInitializer"/>
<!--
      <scope
            name="nico.instance">
            class="org.eclipse.statet.nico.core.-must extend EclipsePreferences-"
      </scope>
-->
   </extension>

   <extension
         point="org.eclipse.core.expressions.propertyTesters">
      <propertyTester
            id="org.eclipse.statet.nico.expressionProperties.Tool"
            class="org.eclipse.statet.internal.nico.core.ToolPropertyTester"
            namespace="org.eclipse.statet.nico"
            properties="isMainType,isProvidingFeatureSet,isTerminated"
            type="org.eclipse.core.runtime.IAdaptable"/>
   </extension>
   
   <extension
         point="org.eclipse.debug.core.processFactories">
      <processFactory
            id="org.eclipse.statet.nico.LogRuntimeProcessFactory"
            class="org.eclipse.statet.nico.core.runtime.LogRuntimeProcessFactory">
      </processFactory>
   </extension>

</plugin>
