<!--
  ~  Licensed to the Apache Software Foundation (ASF) under one
  ~  or more contributor license agreements.  See the NOTICE file
  ~  distributed with this work for additional information
  ~  regarding copyright ownership.  The ASF licenses this file
  ~  to you under the Apache License, Version 2.0 (the
  ~  "License"); you may not use this file except in compliance
  ~  with the License.  You may obtain a copy of the License at
  ~
  ~       http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~  Unless required by applicable law or agreed to in writing, software
  ~  distributed under the License is distributed on an "AS IS" BASIS,
  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~  See the License for the specific language governing permissions and
  ~  limitations under the License.
  ~
  ~
  -->

<!DOCTYPE idea-plugin PUBLIC "Plugin/DTD" "http://plugins.intellij.net/plugin.dtd">
<idea-plugin>
  <id>org.apache.zest</id>
  <name>qidea</name>
  <description>Apache Zest™ idea plugin</description>
  <version>0.1</version>
  <vendor>codedragons</vendor>
  <idea-version since-build="8000"/>

  <depends>com.intellij.javaee</depends>

  <application-components>
    <component>
      <implementation-class>org.apache.zest.ide.plugin.idea.ZestApplicationComponent</implementation-class>
    </component>
  </application-components>

  <actions>
    <action id="CreateConcernFromMixinTypeOrCompositeAction"
            class="org.apache.zest.ide.plugin.idea.concerns.actions.create.CreateConcernFromMixinTypeOrCompositeAction"
            text="New Concern" description="Create new Zest™ concern">
      <add-to-group group-id="CodeMenu" anchor="last"/>
    </action>

    <group id="Zest" class="org.apache.zest.ide.plugin.idea.common.actions.ZestCreateActionGroup" text="Zest™">
      <action id="Zest.NewConcernOf"
              class="org.apache.zest.ide.plugin.idea.concerns.actions.create.inPackage.CreateConcernOfInPackageAction"
              text="New Concern" description="Create new Zest concern">
      </action>
      <add-to-group group-id="NewGroup" anchor="last"/>
    </group>
  </actions>
</idea-plugin>