<?xml version="1.0" encoding="UTF-8"?>
<!--

    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 api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "../nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [
  <!ENTITY api-questions SYSTEM "../nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml">
]>

<api-answers
  question-version="1.25"
  author="mroskanin@netbeans.org"
>

  &api-questions;


<!--
        <question id="arch-what" when="init">
            What is this project good for?
            <hint>
            Please provide here a few lines describing the project,
            what problem it should solve, provide links to documentation,
            specifications, etc.
            </hint>
        </question>
-->
<answer id="arch-what">
Code Templates allow to paste various code snippets by using parametrized text.
The parameters of the same name will share the same default value and if that value
gets changed by user's typing the new value gets replicated into all the parameter's
occurrences.
<br/>
Code Templates replace the original abbreviations functionality.

<p>
Code template's example
</p>
<pre>
for (Iterator ${iterator} = ${collection instanceof="java.util.Collection"}.iterator(); ${iterator}.hasNext();) {
    ${cursor}${iterator}.next();"
}
</pre>
Each parameter can have additional hints of what values
can be assigned to it.
The hint has a form
<pre>
${param hint=value}
</pre>
or just
<pre>
${param hint}
</pre>
which translates to
<pre>
${param hint="true"}
</pre>

<p>
If necessary the value of the hint can be enclosed
in quotes to allow to write whitespace or <code>{</code> or <code>}</code>
into the value. The quote can be written by using <code>\"</code>.
</p>

<h4>Reserved parameter names</h4>
<p>
<code>${cursor}</code> defines position where the caret will be located
after the editing of the code template default values will finish.
</p>

<h4>Reserved hint names</h4>
<p>
<code>${param <b>editable</b>=false}</code> can be used to make the parameter to be skipped
from user's editing. This may be useful e.g. with using java-specific <code>type</code>
hint (described below).
</p>

<p>
Java:
<br/>
<code>${ind <b>index</b>}</code> defines that the default value of the parameter
  should be an unused variable in the given context named <code>i</code>.
  If <code>i</code> is already used then <code>j</code> is attempted
  or then <code>k</code> etc. until <code>z</code>.
  Then <code>i0</code>, <code>i1</code> etc. are attempted.
<br/>
<code>${param <b>type</b>="java.util.Collection"}</code> defines
  java type that the parameter must be instance of.
  Besides class names there can be array e.g. <code>String[]</code>
  or generics <code>java.util.List&lt;String&gt;</code>
<br/>
<code>${param <b>array</b>}</code> defines parameter of array type (including
arrays of primitive data types).
<br/>
<code>${param <b>type</b>="java.util.Iterator"}</code> defines
  that the parameter has the given java type. The template processing infrastructure
  will use short name <code>Iterator</code> and import <code>java.util.Iterator</code>.
</p>

</answer>
  
  
<!--
        <question id="arch-overall" when="init">
            Describe the overall architecture. 
            <hint>
            What will be API for 
            <a href="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi">
                clients and what support API</a>? 
            What parts will be pluggable?
            How will plug-ins be registered? Please use <code>&lt;api type="export"/&gt;</code>
            to describe your general APIs.
            If possible please provide 
            simple diagrams. 
            </hint>
        </question>
-->
<answer id="arch-overall">

<p>
It is a module located under <a href="http://www.netbeans.org/source/browse/editor/codetemplates/#dirlist">/cvs/editor/codetemplates</a> directory.
</p>

It consists of
<ul>
    <li>API in <a href="http://www.netbeans.org/source/browse/editor/codetemplates/src/org/netbeans/lib/editor/codetemplates/api/Attic/">org.netbeans.lib.editor.codetemplates.api</a></li>
    <li>SPI in <a href="http://www.netbeans.org/source/browse/editor/codetemplates/src/org/netbeans/lib/editor/codetemplates/spi/Attic/">org.netbeans.lib.editor.codetemplates.spi</a></li>
    <li>Implementation in <a href="http://www.netbeans.org/source/browse/editor/codetemplates/src/org/netbeans/lib/editor/codetemplates/Attic/">org.netbeans.lib.editor.codetemplates</a></li>
</ul>

<p>
Code Templates define <api name="CodeTemplatesAPI" group="java" type="export" category="stable"/>.
</p>

</answer>



<!--
        <question id="arch-quality" when="init">
            How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
            of your code be tested and 
            how are future regressions going to be prevented?
            <hint>
            What kind of testing do
            you want to use? How much functionality, in which areas,
            should be covered by the tests? 
            </hint>
        </question>
-->
<answer id="arch-quality">
The unit tests are available in <a href="http://www.netbeans.org/source/browse/editor/codetemplates/test/">cvs/editor/codetemplates/test</a>.
<p/>
The following scenarios are tested:
<ul>
    <li> Correctness of the template parameters parsing. </li>
    <li> Correctness of the parameter's hints parsing. </li>
</ul>

</answer>



<!--
        <question id="arch-time" when="init">
            What are the time estimates of the work?
            <hint>
            Please express your estimates of how long the design, implementation,
            stabilization are likely to last. How many people will be needed to
            implement this and what is the expected milestone by which the work should be 
            ready?
            </hint>
        </question>
-->
<answer id="arch-time">
The work is expected to be finished into NetBeans 4.2.
</answer>



<!--
        <question id="arch-usecases" when="init">
            Describe the main <a href="http://openide.netbeans.org/tutorial/api-design.html#usecase">
            use cases</a> of the new API. Who will use it under
            what circumstances? What kind of code would typically need to be written
            to use the module?
        </question>
-->
<answer id="arch-usecases">

<usecase id="code-template-parameters" name="Code Template Parameters">
One of the main benefits of the code templates is their parametrization
which allows to substitute the default values for the parameters
before the final insertion and it also allows the user to modify
these default values explicitly after the code template gets inserted
into the document.
<br/>
The parameters are marked in the code template's text by <code>${...}</code>.
<br/>
Parameters of the same name benefit from automatic replication. Once the template
gets pasted into the document all the parameter's occurrences
get replaced by parameter's default value.
<br/>
The first parameter's occurrence gets selected.
<br/>
The user can now replace the default value. If the user does so the new value
gets replicated to all the other occurrences of this parameter automatically.
</usecase>

<usecase id="mime-type-specific-operation" name="Mime-type specific operation">
Each code template needs to find the default values for its parameters
before it gets inserted into the text.
<br/>
Sometimes it's enough to just specify the default value in the template's text
but usually the default value gets determined from the context of insertion.
<br/>
There is an intent to create a mime-type specific code template processor
that would be registered per mime-type. There could be even more than one
such processors processing the template in a specific order.
</usecase>

<usecase id="parameter-hints" name="Parameter hints">
Besides parameter's name the template processors may need additional
hints of how to find a default value for the parameter.
<br/>
For example java code template's parameter may be an <code>index</code>
parameter which means that the infrastructure should fill in
a fresh index variable e.g. <code>i</code>.
<br/>
Or the parameter can only be of a certain java type such
as in the case of iterating through a collection
the type must be subtype of <code>java.util.Collection</code>.
<br/>
These requirements could be specified as additional hints
to the parameters e.g. <code>${i index}</code>
or <code>${c instanceof=java.util.Collection}</code>.
<br/>
The hints allow string literals to support arbitrary
explicit default values specifications
e.g. <code>${x default="Hello world"}</code>.
<br/>
The '{' and '}' have no special meaning inside the string literal.
<br/>
The '"' char is allowed to be used by escaping
<code>${x default="\"quoted string\""}</code>.
</usecase>

<usecase id="temporary-code-templates" name="Temporary Code Templates">
The Code Completion functionality allows to build temporary
Code Templates functionality if it could build a temporary template
for completing of the method parameters. The parameters could
be completed one by one by tabbing and the Code Templates framework
would fill in proper default values just like it does for regular templates.
<pre>
    JTextComponent pane = ...
    String tempCodeTemplateText = ...
    CodeTemplate ct = CodeTemplateManager.get(pane.getDocument()).createTemporary(tempCodeTemplateText);
    ct.insert(pane);
</pre>
</usecase>

<usecase id="insert-text" name="Insert Text Building and Updating">
The parametrized text of the code template first gets parsed
and the parameters get their default values which by default are
the names of the parameters.
The code template processor are then called to update this default
value.
<br/>
The new java infrastructure being developed would benefit
from the possibility to obtain the full string containing
the skeleton of the code template (without parameters)
with the present default values. It can take that string
and locally parse it to find out types of local variables
used in the particular template and fill in dependent
variable types.
</usecase>

<usecase id="parameter-editability" name="Parameter Editability">
Certain part of the code template may change text but it should
not be edited by the user. For example when iterating over collection
given as a parameter the collection may be generics-ed
by additional type. The iterator's variable type then also
needs to generics-ed with the same type.
<br/>
The iterator's type parameter should not be editable because
this operation may be done automatically
by the java code template processor.
<br/>
There should be a hint <code>editable</code> having
<code>true</code>/<code>false</code>.
</usecase>


</answer>






<!--
        <that until the processor processes question id="compat-i18n" when="impl">
            Is your module correctly internationalized?
            <hint>
            Correct internationalization means that it obeys instructions 
            at <a href="http://www.netbeans.org/download/dev/javadoc/OpenAPIs/org/openide/doc-files/i18n-branding.html">
            NetBeans I18N pages</a>.
            </hint>
        </question>
-->
<answer id="compat-i18n">
Yes.
</answer>



<!--
        <question id="compat-standards" when="init">
            Does the module implement or define any standards? Is the 
            implementation exact or does it deviate somehow?
        </question>
-->
<answer id="compat-standards">
No implemented standards.
</answer>



<!--
        <question id="compat-version" when="impl">
            Can your module coexist with earlier and future
            versions of itself? Can you correctly read all old settings? Will future
            versions be able to read your current settings? Can you read
            or politely ignore settings stored by a future version?
            
            <hint>
            Very helpful for reading settings is to store version number
            there, so future versions can decide whether how to read/convert
            the settings and older versions can ignore the new ones.
            </hint>
        </question>
-->
<answer id="compat-version">
There will be default code templates provided by distribution
and the user can create its own. They will be stored in xml files.
</answer>



<!--
        <question id="dep-jre" when="final">
            Which version of JRE do you need (1.2, 1.3, 1.4, etc.)?
            <hint>
            It is expected that if your module runs on 1.x that it will run 
            on 1.x+1 if no, state that please. Also describe here cases where
            you run different code on different versions of JRE and why.
            </hint>
        </question>
-->
<answer id="dep-jre">
JDK1.4 and higher can be used.
</answer>



<!--
        <question id="dep-jrejdk" when="final">
            Do you require the JDK or is the JRE enough?
        </question>
-->
<answer id="dep-jrejdk">
JRE is sufficient.
</answer>



<!--
        <question id="dep-nb" when="init">
            What other NetBeans projects and modules does this one depend on?
            <hint>
            If you want, describe such projects as imported APIs using
            the <code>&lt;api name="identification" type="import or export" category="stable" url="where is the description" /&gt;</code>
            </hint>
        </question>
-->
<answer id="dep-nb">
    <defaultanswer generate="none"/>
    <ul>
         <li><api type='import' group='java' category='devel' name='EditorModuleAPI' url='@org-netbeans-modules-editor@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                1.24
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='CodeCompletionAPI' url='../org-netbeans-modules-editor-completion/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            </api>
</li>            
<li><api type='import' group='java' category='devel' name='EditorHyperlinkSPI' url='@org-netbeans-modules-editor-lib@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                1.3
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='MimeLookupAPI' url='../org-netbeans-modules-editor-mimelookup/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            </api>
</li>            
<li><api type='import' group='java' category='official' name='EditorSettingsAPI' url='@org-netbeans-modules-editor-settings@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            </api>
</li>            
<li><api type='import' group='java' category='friend' name='EditorUtilitiesAPI' url='@org-netbeans-modules-editor-util@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                1.5
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='private' name='org.netbeans.spi.editor.hints'>
            The module is needed for compilation. 
        
            The module is used during runtime. 
            </api>
</li>            
<li><api type='import' group='java' category='official' name='FilesystemsAPI' url='../org-openide-filesystems/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                7.0
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='ModulesAPI' url='../org-openide-modules/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                6.2
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='private' name='org.openide.options' url='../org-openide-options/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                6.2
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='EditorAPI' url='../org-openide-text/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                6.16
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='UtilitiesAPI' url='../org-openide-util/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                6.2
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='WindowSystemAPI' url='../org-openide-windows/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                6.7
                is required.
            </api>
</li>            
    </ul>
</answer>



<!--
        <question id="dep-non-nb" when="init">
            What other projects outside NetBeans does this one depend on?
            
            <hint>
            Some non-NetBeans projects are packaged as NetBeans modules
            (see <a href="http://libs.netbeans.org/">libraries</a>) and
            it is preferred to use this approach when more modules may
            depend on such third-party library.
            </hint>
        </question>
-->
<answer id="dep-non-nb">
No other projects.
</answer>



<!--
        <question id="dep-platform" when="init">
            On which platforms does your module run? Does it run in the same
            way on each?
            <hint>
            If your module is using JNI or deals with special differences of
            OSes like filesystems, etc. please describe here what they are.
            </hint>
        </question>
-->
<answer id="dep-platform">
All platforms.
</answer>



<answer id="deploy-dependencies">
Nothing.
</answer>



<!--
        <question id="deploy-jar" when="impl">
            Do you deploy just module JAR file(s) or other files as well?
            <hint>
            If your module consists of just one module JAR file, just confirm that.
            If it uses more than one JAR, describe where they are located, how
            they refer to each other. 
            If it consist of module JAR(s) and other files, please describe
            what is their purpose, why other files are necessary. Please 
            make sure that installation/uninstallation leaves the system 
            in state as it was before installation.
            </hint>
        </question>
-->
<answer id="deploy-jar">
No additional files.
</answer>



<!--
        <question id="deploy-nbm" when="impl">
            Can you deploy an NBM via the Update Center?
            <hint>
            If not why?
            </hint>
        </question>
-->
<answer id="deploy-nbm">
Yes.
</answer>



<!--
        <question id="deploy-packages" when="init">
            Are packages of your module made inaccessible by not declaring them
            public?
            
            <hint>
            NetBeans module system allows restriction of access rights to
            public classes of your module from other modules. This prevents
            unwanted dependencies of others on your code and should be used
            whenever possible (<a href="http://www.netbeans.org/download/javadoc/OpenAPIs/org/openide/doc-files/upgrade.html#3.4-public-packages">
            public packages
            </a>). If you do not restrict access to your classes you are
            making it too easy for other people to misuse your implementation
            details, that is why you should have good reason for not 
            restricting package access.
            </hint>
        </question>
-->
<answer id="deploy-packages">
Yes, only the API and SPI are public. The implementation is not public.
</answer>



<!--
        <question id="deploy-shared" when="final">
            Do you need to be installed in the shared location only, or in the user directory only,
            or can your module be installed anywhere?
            <hint>
            Installation location shall not matter, if it does explain why.
            Consider also whether <code>InstalledFileLocator</code> can help.
            </hint>
        </question>
-->
<answer id="deploy-shared">
Anywhere.
</answer>



<!--
        <question id="exec-classloader" when="impl">
            Does your code create its own class loader(s)?
            <hint>
            A bit unusual. Please explain why and what for.
            </hint>
        </question>
-->
<answer id="exec-classloader">
No.
</answer>



<!--
        <question id="exec-component" when="impl">
            Is execution of your code influenced by any (string) property
            of any of your components?
            
            <hint>
            Often <code>JComponent.getClientProperty</code>, <code>Action.getValue</code>
            or <code>PropertyDescriptor.getValue</code>, etc. are used to influence
            a behavior of some code. This of course forms an interface that should
            be documented. Also if one depends on some interface that an object
            implements (<code>component instanceof Runnable</code>) that forms an
            API as well.
            </hint>
        </question>
-->
<answer id="exec-component">
No.
</answer>



<!--
        <question id="exec-introspection" when="impl">
            Does your module use any kind of runtime type information (<code>instanceof</code>,
            work with <code>java.lang.Class</code>, etc.)?
            <hint>
            Check for cases when you have an object of type A and you also
            expect it to (possibly) be of type B and do some special action. That
            should be documented. The same applies on operations in meta-level
            (Class.isInstance(...), Class.isAssignableFrom(...), etc.).
            </hint>
        </question>
-->
<answer id="exec-introspection">
No.
</answer>



<!--
        <question id="exec-privateaccess" when="final">
            Are you aware of any other parts of the system calling some of 
            your methods by reflection?
            <hint>
            If so, describe the "contract" as an API. Likely private or friend one, but
            still API and consider rewrite of it.
            </hint>
        </question>
-->
<answer id="exec-privateaccess">
No.
</answer>



<!--
        <question id="exec-process" when="impl">
            Do you execute an external process from your module? How do you ensure
            that the result is the same on different platforms? Do you parse output?
            Do you depend on result code?
            <hint>
            If you feed an input, parse the output please declare that as an API.
            </hint>
        </question>
-->
<answer id="exec-process">
No.
</answer>



<!--
        <question id="exec-property" when="impl">
            Is execution of your code influenced by any environment or
            Java system (<code>System.getProperty</code>) property?
            
            <hint>
            If there is a property that can change the behavior of your 
            code, somebody will likely use it. You should describe what it does 
            and the <a href="http://openide.netbeans.org/tutorial/api-design.html#life">stability category</a>
            of this API. You may use
            <pre>
                &lt;api type="export" group="property" name="id" category="private" url="http://..."&gt;
                    description of the property, where it is used, what it influence, etc.
                &lt;/api&gt;            
            </pre>
            </hint>
        </question>
-->
<answer id="exec-property">
No.
</answer>



<!--
        <question id="exec-reflection" when="impl">
            Does your code use Java Reflection to execute other code?
            <hint>
            This usually indicates a missing or insufficient API in the other
            part of the system. If the other side is not aware of your dependency
            this contract can be easily broken.
            </hint>
        </question>
-->
<answer id="exec-reflection">
No.
</answer>



<!--
        <question id="exec-threading" when="impl">
            What threading models, if any, does your module adhere to?
            <hint>
                If your module calls foreign APIs which have a specific threading model,
                indicate how you comply with the requirements for multithreaded access
                (synchronization, mutexes, etc.) applicable to those APIs.
                If your module defines any APIs, or has complex internal structures
                that might be used from multiple threads, declare how you protect
                data against concurrent access, race conditions, deadlocks, etc.,
                and whether such rules are enforced by runtime warnings, errors, assertions, etc.
                Examples: a class might be non-thread-safe (like Java Collections); might
                be fully thread-safe (internal locking); might require access through a mutex
                (and may or may not automatically acquire that mutex on behalf of a client method);
                might be able to run only in the event queue; etc.
                Also describe when any events are fired: synchronously, asynchronously, etc.
                Ideas: <a href="http://core.netbeans.org/proposals/threading/index.html#recommendations">Threading Recommendations</a> (in progress)
            </hint>
        </question>
-->
<answer id="exec-threading">
No special threading models used.
</answer>



<!--
        <question id="format-clipboard" when="impl">
            Which data flavors (if any) does your code read from or insert to
            the clipboard (by access to clipboard on means calling methods on <code>java.awt.datatransfer.Transferable</code>?
            
            <hint>
            Often Node's deal with clipboard by usage of <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
            Check your code for overriding these methods.
            </hint>
        </question>
-->
<answer id="format-clipboard">
No clipboard support.
</answer>



<!--
        <question id="format-dnd" when="impl">
            Which protocols (if any) does your code understand during Drag &amp; Drop?
            <hint>
            Often Node's deal with clipboard by usage of <code>Node.drag, Node.getDropType</code>. 
            Check your code for overriding these methods. Btw. if they are not overridden, they
            by default delegate to <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
            </hint>
        </question>
-->
<answer id="format-dnd">
No D&amp;D.
</answer>



<!--
        <question id="format-types" when="impl">
            Which protocols and file formats (if any) does your module read or write on disk,
            or transmit or receive over the network?
        </question>
-->
<answer id="format-types">
No files read or written to the disk.
</answer>



<!--
        <question id="lookup-lookup" when="init">
            Does your module use <code>org.openide.util.Lookup</code>
            or any similar technology to find any components to communicate with? Which ones?
            
            <hint>
            Please describe the interfaces you are searching for, where 
            are defined, whether you are searching for just one or more of them,
            if the order is important, etc. Also classify the stability of such
            API contract.
            </hint>
        </question>
-->
<answer id="lookup-lookup">
Yes, it searches for Code Template Processors for particular mime-type by using
<api group="lookup" name="org.netbeans.api.editor.mimelookup.MimeLookup" type="import" category="official">
</api>
</answer>



<!--
        <question id="lookup-register" when="final">
            Do you register anything into lookup for other code to find?
            <hint>
            Do you register using layer file or using <code>META-INF/services</code>?
            Who is supposed to find your component?
            </hint>
        </question>
-->
<answer id="lookup-register">
No.
</answer>



<!--
        <question id="lookup-remove" when="final">
            Do you remove entries of other modules from lookup?
            <hint>
            Why? Of course, that is possible, but it can be dangerous. Is the module
            your are masking resource from aware of what you are doing?
            </hint>
        </question>
-->
<answer id="lookup-remove">
No.
</answer>



<!--
        <question id="perf-exit" when="final">
            Does your module run any code on exit?
        </question>
-->
<answer id="perf-exit">
No.
</answer>



<!--
        <question id="perf-huge_dialogs" when="final">
            Does your module contain any dialogs or wizards with a large number of
            GUI controls such as combo boxes, lists, trees, or text areas?
        </question>
-->
<answer id="perf-huge_dialogs">
No.
</answer>



<!--
        <question id="perf-limit" when="init">
            Are there any hard-coded or practical limits in the number or size of
            elements your code can handle?
        </question>
-->
<answer id="perf-limit">
No limits.
</answer>



<!--
        <question id="perf-mem" when="final">
            How much memory does your component consume? Estimate
            with a relation to the number of windows, etc.
        </question>
-->
<answer id="perf-mem">
Proportional to number of Code Templates which range
from zero up to several tens for a typical mime-type.
</answer>



<!--
        <question id="perf-menus" when="final">
            Does your module use dynamically updated context menus, or
            context-sensitive actions with complicated enablement logic?
        </question>
-->
<answer id="perf-menus">
No.
</answer>



<!--
        <question id="perf-progress" when="final">
            Does your module execute any long-running tasks?
            
            <hint>Long running tasks should never block 
            AWT thread as it badly hurts the UI
            <a href="http://performance.netbeans.org/responsiveness/issues.html">
            responsiveness</a>.
            Tasks like connecting over
            network, computing huge amount of data, compilation
            be done asynchronously (for example
            using <code>RequestProcessor</code>), definitively it should 
            not block AWT thread.
            </hint>
        </question>
-->
<answer id="perf-progress">
The code template processor may need to consult the context which can take
considerable amount of time.
<br/>
For example the java processor may need to consult MDR.
<br/>
Still, once the user has requested pasting of the code template
the the user will wait for the template to be pasted and will do
no other typing.
<br/>
Therefore there is no plan to reschedule the processor work
into other threads than AWT.
</answer>



<!--
        <question id="perf-scale" when="init">
            Which external criteria influence the performance of your
            program (size of file in editor, number of files in menu, 
            in source directory, etc.) and how well your code scales?
            <hint>
            Please include some estimates, there are other more detailed 
            questions to answer in later phases of implementation. 
            </hint>
        </question>
-->
<answer id="perf-scale">
Size and number of parameters of the code template.
<br/>
Size of the editor's document slightly.
</answer>



<!--
        <question id="perf-spi" when="init">
            How the performance of the plugged in code will be enforced?
            <hint>
            If you allow foreign code to be plugged into your own module, how
            do you enforce that it will behave correctly and quickly and will not
            negatively influence the performance of your own module?
            </hint>
        </question>
-->
<answer id="perf-spi">
The only plugged code should be code template processors that should
just check the parameter's hints and possibly update the default value
of the parameter.
</answer>



<!--
        <question id="perf-startup" when="final">
            Does your module run any code on startup?
        </question>
-->
<answer id="perf-startup">
No.
</answer>



<!--
        <question id="perf-wakeup" when="final">
            Does any piece of your code wake up periodically and do something
            even when the system is otherwise idle (no user interaction)?
        </question>
-->
<answer id="perf-wakeup">
No.
</answer>



<!--
        <question id="resources-file" when="final">
            Does your module use <code>java.io.File</code> directly?
            
            <hint>
            NetBeans provide a logical wrapper over plain files called 
            <code>org.openide.filesystems.FileObject</code> that
            provides uniform access to such resources and is the preferred
            way that should be used. But of course there can be situations when
            this is not suitable.
            </hint>
        </question>
-->
<answer id="resources-file">
No.
</answer>



<!--
        <question id="resources-layer" when="final">
            Does your module provide own layer? Does it create any files or
            folders in it? What it is trying to communicate by that and with which 
            components?
            
            <hint>
            NetBeans allows automatic and declarative installation of resources 
            by module layers. Module register files into appropriate places
            and other components use that information to perform their task
            (build menu, toolbar, window layout, list of templates, set of
            options, etc.). 
            </hint>
        </question>
-->
<answer id="resources-layer">
No.
</answer>



<!--
        <question id="resources-mask" when="final">
            Does your module mask/hide/override any resources provided by other modules in
            their layers?
            
            <hint>
            If you mask a file provided by another module, you probably depend
            on that and do not want the other module to (for example) change
            the file's name. That module shall thus make that file available as an API
            of some stability category.
            </hint>
        </question>
-->
<answer id="resources-mask">
No.
</answer>



<!--
        <question id="resources-read" when="final">
            Does your module read any resources from layers? For what purpose?
            
            <hint>
            As this is some kind of intermodule dependency, it is a kind of API.
            Please describe it and classify according to 
            <a href="http://openide.netbeans.org/tutorial/api-design.html#categories">
            common stability categories</a>.
            </hint>
        </question>
-->
<answer id="resources-read">
No.
</answer>



<!--
        <question id="security-grant" when="final">
            Does your code grant addition rights to some code?
            <hint>Avoid using a classloder that adds some extra
            permissions to loaded code unless realy necessary.
            Also note that your API implementation
            can also expose unneeded permissions to enemy code by
            AccessController.doPrilileged() calls.</hint>
        </question>
-->
<answer id="security-grant">
No.
</answer>



<!--
        <question id="security-policy" when="final">
            Does your functionality require standard policy file modification?
            <hint>Your code may pass control to third party code not
            coming from trusted domain. It covers code downloaded over
            network or code coming from libraries that are not bundled
            with NetBeans. Which permissions it needs to grant to which domain?</hint>
        </question>
-->
<answer id="security-policy">
No.
</answer>


<!--
        <question id="exec-ant-tasks" when="impl">
            Do you define or register any ant tasks that other can use?
            
            <hint>
            If you provide an ant task that users can use, you need to be very
            careful about its syntax and behaviour, as it most likely forms an
	          API for end users and as there is a lot of end users, their reaction
            when such API gets broken can be pretty strong.
            </hint>
        </question>
-->
<answer id="exec-ant-tasks">
No.
</answer>


<!--
        <question id="arch-where" when="init">
            Where one can find sources for your module?
            <hint>
                Please provide link to the CVS web client at
                http://www.netbeans.org/download/source_browse.html
                or just use tag defaultanswer generate='here'
            </hint>
        </question>
-->
<answer id="arch-where">
<defaultanswer generate='here'/>
</answer>

</api-answers>
