<?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.27"
  author="jglick@netbeans.org"
>

  &api-questions;


<!--
        <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>
            The main uses of the Ant integration module are self-contained and do
            not interact directly with other modules: the user selects a target
            in an Ant script and runs it. Nonetheless, there are a few
            significant ways other modules can interact with this module:
        </p>
        <ol>
            <li>
                <api group="java" name="AntLogger" type="export" category="stable" url="@TOP@/org/apache/tools/ant/module/spi/AntLogger.html">
                    <p>
                        Permits customization of the way Ant output is displayed.
                    </p>
                </api>
            </li>
            <li>
                <api group="java.io.File" name="register-defs" type="export" category="stable" url="@TOP@/org/apache/tools/ant/module/spi/package-summary.html#register-defs">
                    <p>
                    Registering custom Ant task and type definitions (when these
                    can be run inside the NetBeans JVM only). Typically used to
                    add special tasks which somehow script the IDE, such as
                    connecting the JPDA debugger to a process launched by Ant.
                    </p>
                </api>
            </li>
            <li>
                <api group="java" name="AutomaticExtraClasspathProvider" type="export" category="stable" url="@TOP@/org/apache/tools/ant/module/spi/AutomaticExtraClasspathProvider.html">
                    <p>
                        Permits additions to the default Ant classpath.
                    </p>
                </api>
            </li>
            <li>
                <api group="java" name="IntrospectedInfo" type="export" category="stable" url="@TOP@/org/apache/tools/ant/module/api/IntrospectedInfo.html">
                    <p>
                    Examining cached and introspected data about which tasks and
                    types are known to be defined in the user's Ant scripts, and
                    what their design-time structure is. Used by XML code
                    completion, for example.
                    </p>
                </api>
            </li>
            <li>
                <api group="java" name="AntTargetExecutor" type="export" category="stable" url="@TOP@/org/apache/tools/ant/module/api/AntTargetExecutor.html">
                    <p>
                    Running named targets in specified Ant scripts. Can be used
                    by modules which provide a different UI for initiating Ant
                    execution. <code>ActionUtils</code> provides a more convenient
                    wrapper around this functionality.
                    </p>
                </api>
            </li>
        </ol>
    </answer>



<!--
        <question id="arch-quality" when="init">
            How the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
            of your code will be tested and 
            how future regressions are going to be prevented?
            <hint>
            What kind of testing
            you want to use? What/how much area of functionality
            should be covered by the tests? 
            </hint>
        </question>
-->
    <answer id="arch-quality">
        <p>
            Currently a fair amount of the module is covered by functional tests.
            There are some unit tests, especially for newer code.
        </p>
    </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 the work should be 
            ready.
            </hint>
        </question>
-->
    <answer id="arch-time">
        <p>
            N/A; already implemented.
        </p>
    </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 at
            what circumstances and what will be the typical code to write
            to use the module.
        </question>
-->
    <answer id="arch-usecases">
        <p>
            The principal use cases for the API are covered in the overall API architecture.
        </p>
    </answer>



<!--
        <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">
        <p>
            The Ant integration module recognizes Ant build scripts, facilitates
            editing them as text or structurally, lets the user run targets or
            create shortcuts to them, etc.
        </p>
    </answer>



<!--
        <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/org-openide-modules/org/openide/modules/doc-files/i18n-branding.html">
            NetBeans I18N pages</a>.
            </hint>
        </question>
-->
    <answer id="compat-i18n">
        <p>
            Visible strings directly represented by the module are
            internationalized. However Ant itself is not, and so messages coming
            from Ant will appear only in English.
        </p>
    </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">
        <p>
            Insofar as Ant can be considered a standard, it implements the
            standard behavior of running an Ant script. The implementation should
            behave quite similarly to what the normal Ant command-line usage does
            (since it delegates to the Ant library internally and only replaces
            the command-line wrapper with an IDE wrapper). Since the Ant project
            does not publish a formal specification of how Ant should behave,
            there is no objective criterion for judging the fidelity.
        </p>
        <p>
            Likely areas of difference between command-line and IDE usage:
            obscure class loader scenarios (since the IDE must load Ant in a
            special class loader, whereas the command-line tool may do it
            differently); system properties set in the IDE but not on the command
            line; etc. Generally, well-written scripts and tasks are not affected
            by these differences, but occasionally problems arise (they are
            treated as bugs).
        </p>
    </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">
        <p>
            Loading older settings is generally supported for compatibility.
        </p>
    </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">
        <p>
            JRE 1.5 is required.
        </p>
    </answer>



<!--
        <question id="dep-jrejdk" when="final">
            Do you require the JDK or is the JRE enough?
        </question>
-->
    <answer id="dep-jrejdk">
        <p>
            The module itself requires only the JRE, but Ant requires the JDK in
            order to do anything useful such as compile Java classes.
        </p>
    </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 API 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='here'/>
    </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">
        <ol>
            <li>
                <api group="java" name="Ant" type="import" category="third" url="https://ant.apache.org">
                    Ant itself, of course.
                    1.8.0+ is required, 1.10.17 recommended (and currently bundled); some features may be limited to newer versions.
                </api>
            </li>
        </ol>
    </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">
        <p>
            Should be as platform-independent as Ant itself is. Ant uses some
            platform-specific tricks to normalize pathnames, launch
            platform-dependent tools, etc., but the user is shielded from the
            details wherever possible.
        </p>
    </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">
        <p>
            The module itself is contained in a regular module JAR. The bundled
            Ant installation is contained in <code>ant/lib/*.jar</code> in the
            NetBeans installation. (It is necessary for the Ant libraries to be
            loaded explicitly and not be accessible directly from the module.)
            There is also a bridge JAR <code>ant/nblib/bridge.jar</code> which
            communicates between Ant itself and the module.
        </p>
    </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">
        <p>
            Yes.
        </p>
    </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">
        <p>
            Yes, only official packages are exported.
        </p>
    </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">
        <p>
            Should not matter where. <code>InstalledFileLocator</code> is used.
        </p>
    </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">
        <p>
            Yes, several class loaders are created:
        </p>
        <ol>
            <li>
                <p>
                    Ant itself is loaded from a class loader containing just
                    <code>ant/lib/*.jar</code> (or generally from
                    <code>lib/*.jar</code> in a user-specified Ant installation
                    directory), plus any user-specified additional classpath
                    entries and entries from <code>AutomaticExtraClasspathProvider</code>.
                </p>
                <p>
                    <code>InstalledFileLocator</code> is used to find
                    <code>ant/lib/ant.jar</code> and the default Ant installation
                    is taken to be the parent directory of the containing directory
                    of this (e.g. <code>ide/ant/</code>).
                </p>
                <p>
                    If any files <code>ant/patches/*.jar</code> exist, they are
                    loaded at the front of the classpath, to permit an IDE distribution
                    to bundle a version of Ant with patches (e.g. for #47708).
                </p>
            </li>
            <li>
                <p>
                    <code>ant/nblib/bridge.jar</code> is loaded from a class
                    loader delegating to both the main Ant loader, and the Ant
                    module's class loader.
                </p>
            </li>
            <li>
                <p>
                    Each module with a custom definition JAR in
                    <code>ant/nblib/*.jar</code> gets a class loader delegating
                    to both the main Ant loader, and that module's class loader.
                </p>
            </li>
        </ol>
    </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">
        <p>
            No.
        </p>
    </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">
        <p>
            Yes, internally (not at the API level). Loading and introspecting
            task classes, loading Ant itself, checking for different Ant
            versions, etc. all require some use of reflection.
        </p>
    </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">
        <p>
            No.
        </p>
    </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">
        <p>
            Of course, Ant is run (as a VM-internal process). Ant itself handles
            platform issues for the most part. Output is sent by Ant directly to
            NetBeans-specific <code>AntLogger</code>s.
        </p>
    </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">
        <p>
            Generally not except for <a
            href="https://ant.apache.org/manual/running.html#sysprops">properties
            interpreted by Ant itself</a> and the following:
        </p>
        <ul>
            <li>
                <api group="systemproperty" name="logger.max.line.length" type="export" category="private">
                    <p>
                        If a longer message is logged the ant logger will handle the message as plain text and will not try to hyperlink, color, fold, etc. 
                        If not set by the user a default value of <b>3000</b> will be used.
                    </p>
                </api>
            </li>
        </ul>
    </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">
        <p>
            Yes, see <a href="#answer-exec-introspection">introspection</a> for details.
        </p>
    </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">
        <p>
            <code>IntrospectedInfo</code> should be thread-safe and fires changes
            asynchronously. Other API-visible classes are generally thread-safe
            unless otherwise noted. Internal classes follow natural Datasystems,
            Nodes, etc. threading models. Running an Ant target uses the
            execution engine, which spawns a fresh thread.
            <code>AntLogger</code>s are stateless and must be reentrant for multiple threads;
            <code>AntSession</code>s and so on are thread-safe.
        </p>
    </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">
        <p>
            None.
        </p>
    </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">
        <p>
            None.
        </p>
    </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">
        <p>
            Reads Ant scripts, of course. Also understands Ant 1.6's
            <code>antlib.xml</code> syntax in custom task/type definition JARs.
        </p>
    </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">
        <p>
            Uses various <code>getDefault</code> methods on standard helper
            classes. Looks for all <code>ModuleInfo</code> instances in default
            lookup to know in which enabled modules to search for custom
            definitions.
            Looks for instances of <code>AutomaticExtraClasspathProvider</code>
            and <code>AntLogger</code> in default lookup.
        </p>
    </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">
        <p>
            Just a MIME resolver.
            Also a default <code>AntLogger</code> is registered.
        </p>
    </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">
        <p>
            No.
        </p>
    </answer>



<!--
        <question id="perf-exit" when="final">
            Does your module run any code on exit?
        </question>
-->
    <answer id="perf-exit">
        <p>
            Cleans up stray editor annotations.
        </p>
    </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">
        <p>
            The Ant Shortcut Wizard contains several panels. Otherwise all
            dialogs are pretty small.
        </p>
    </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">
        <p>
            None known.
        </p>
    </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">
        <p>
            The main question is how much memory a build consumes as it runs. Can
            be substantial - will easily keep a default 96Mb heap filled - but
            does not appear to leak. Ant itself mostly uses memory linearly (i.e.
            allocates and soon releases it), except for deeply nested build
            scripts. Tasks which are likely to consume a lot of heap (e.g.
            Javadoc) are typically run as external processes by default.
        </p>
    </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">
        <p>
            The <b>Run&nbsp;Target...</b> context menu on a build script is
            calculated from the script's targets.
        </p>
        <p>
            Menu items which are Ant shortcuts are enabled or not according to
            whether the script is well-formed.
        </p>
    </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">
        <p>
            Running Ant processes are put in the execution engine but not displayed by it.
        </p>
        <p>
            Loading introspected info for the Ant installation is a
            once-per-session hit of perhaps half a second. This would typically
            occur when first running an Ant script, or first getting code
            completion, etc.
        </p>
    </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">
        <p>
            Most interesting criteria relate to performance of Ant itself, which
            seems fine.
        </p>
        <p>
            Adding an extra module with custom task definitions add a small
            overhead (10msec?) to launching an Ant script. The time is largely
            spent in Ant itself so is difficult to optimize out.
        </p>
        <p>
            Adding new <code>AntLogger</code>s will slow down Ant output a little
            bit, but it seems not significantly compared to typical overhead of
            Ant tasks themselves.
        </p>
    </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 fast and will not
            negatively influence the performance of your own module?
            </hint>
        </question>
-->
    <answer id="perf-spi">
        <p>
            Nothing special is done in this regard for most SPIs.
            <code>AntLogger</code> has a number of mask methods which permit the
            Ant module to exclude some loggers from consideration for delivery
            of a given event.
        </p>
    </answer>



<!--
        <question id="perf-startup" when="final">
            Does your module run any code on startup?
        </question>
-->
    <answer id="perf-startup">
        <p>
            No.
        </p>
    </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">
        <p>
            No.
        </p>
    </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">
        <p>
            <code>java.io.File</code> is used by Ant itself, so the module uses
            it too when appropriate. The Filesystems API is used where ability to
            execute a script is irrelevant; or where the ability to refresh file
            objects is needed.
        </p>
    </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">
        <p>
            Yes; the layer includes templates, editor annotation
            definitions, etc.
        </p>
    </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">
        <p>
            No.
        </p>
    </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">
        <api category="devel" group="layer" name="layer-actions" type="export">
            <p>
                Context menu actions are read from the layer folder
                <code>Loaders/text/x-ant+xml/Actions</code>.
            </p>
        </api>
    </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">
        <p>
            Yes, running Ant creates several class loaders to which all permissions
            are granted. A wide variety of permissions are needed by various tasks.
        </p>
    </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">
        <p>
            No policy file modifications needed. All permissions granted.
        </p>
    </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">
        <p>
            No.
        </p>
    </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>
