<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<templates>
    <template autoinsert="true" context="org.scala-ide.sdt.core.templates" deleted="false"
              description="New App template for the new file wizard" enabled="true"
              id="org.scalaide.core.templates.wizards.app" name="wizard_app">/*
        * 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.
        */
        ${package_name}

        object ${type_name} extends App {
        ${cursor}
        }
    </template>
    <template autoinsert="true" context="org.scala-ide.sdt.core.templates" deleted="false"
              description="New class template for the new file wizard" enabled="true"
              id="org.scalaide.core.templates.wizards.class" name="wizard_class">/*
        * 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.
        */
        ${package_name}

        class ${type_name} {
        ${cursor}
        }
    </template>
    <template autoinsert="true" context="org.scala-ide.sdt.core.templates" deleted="false"
              description="New empty file template for the new file wizard" enabled="true"
              id="org.scalaide.core.templates.wizards.empty" name="wizard_empty">/*
        * 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.
        */
    </template>
    <template autoinsert="true" context="org.scala-ide.sdt.core.templates" deleted="false"
              description="New object template for the new file wizard" enabled="true"
              id="org.scalaide.core.templates.wizards.object" name="wizard_object">/*
        * 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.
        */
        ${package_name}

        object ${type_name} {
        ${cursor}
        }
    </template>
    <template autoinsert="true" context="org.scala-ide.sdt.core.templates" deleted="false"
              description="New package object template for the new file wizard" enabled="true"
              id="org.scalaide.core.templates.wizards.packageObject" name="wizard_package_object">/*
        * 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.
        */
        ${package_name}

        package object ${type_name} {
        ${cursor}
        }
    </template>
    <template autoinsert="true" context="org.scala-ide.sdt.core.templates" deleted="false"
              description="New trait template for the new file wizard" enabled="true"
              id="org.scalaide.core.templates.wizards.trait" name="wizard_trait">/*
        * 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.
        */
        ${package_name}

        trait ${type_name} {
        ${cursor}
        }
    </template>
</templates>