<?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.29"
  author="vstejskal@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 and specify their
            <a href="http://openide.netbeans.org/tutorial/api-design.html#category-private">
            stability categories</a>.
            If possible please provide simple diagrams.
            </hint>
        </question>
-->
 <answer id="arch-overall">
  <p>
  The Editor Braces Matching module provides the
  <api name="BracesMatchingSPI" group="java" type="export" category="devel" url="@org-netbeans-modules-editor-bracesmatching@/overview-summary.html"/>
  for registering services capable of finding matching
  areas of text in a document. These areas can be pretty much anything and the rules
  for finding them are solely up to the implementors. A typical usecase and the main
  motivation for this SPI is to be able to implement language specific matchers
  for finding pairs of braces, highlighting them and allowing users to move a caret
  (navigate) from one to the other. The matching areas can also be for example
  XML, HTML or JSP tags.
  </p>

  <p>
  The Braces Matching SPI is a replacement for the old SPI in
  <code>org.netbeans.editor.ExtSyntaxSupport</code>.
  </p>
  
  <h3>The infrastructure overview</h3>
  
  <p>
  The following paragraphs give an overview of the infrastructure used for braces
  matching and explain the essential terminology and ideas behind it.
  </p>
  
  <h4>Original and matching areas</h4>
  
  <p>
  The whole task of finding matching areas can be split in two parts. First we need
  to determine if the caret is positioned over a character or an area that could
  possibly have another matching areas. And if so, then we need to find those areas.
  For the purpose of this SPI we call the area at the caret the <b>original area</b>
  and the other areas are simply the <b>matching areas</b>.
  </p>
  
  <pre><![CDATA[
    for(int i = 0; i < 10; i++) ]]><span style="background-color : #C0FFC0;">{</span><![CDATA[
        System.out.println(i);
    ]]><span style="background-color : #FFC0C0;">}</span><![CDATA[|

    | - the caret
    ]]><span style="background-color : #FFC0C0;">&nbsp;</span><![CDATA[ - original area
    ]]><span style="background-color : #C0FFC0;">&nbsp;</span><![CDATA[ - matching area
  ]]></pre>

  <p>
  There is always only one original area, if there is any at all. On the other hand
  the matchers are free to report as many matching areas as they like. In most
  cases, however, the matchers will only report none or one matching are as well.
  </p>
  
  <h4>Caret Bias</h4>
  
  <p>
  Normally when typing or moving a caret in the editor one of the characters is
  always considered to lay 'under' a caret. The decision if it is the character
  on the left hand side or right hand side of a caret depends on the shape of
  the caret. Although the visual appearance of a caret can vary, there are generaly
  only two shapes to consider. The I-beam caret and the block caret.
  </p>

  <p>
  The I-beam caret normally looks like a vertical line placed on a position
  between characters in text. However, when typing it is generally accepted that
  the left hand side character is the one under the I-beam caret. The I-beam caret
  is used in Netbeans editor when editing text in the normal mode.
  </p>
  
  <p>
  The block caret on the other hand may look like a little square or vertical line
  placed beneath or under a character. This type of caret makes it visually very clear
  what character is 'under' the caret. It is the right hand side character. In
  Netbeans editor the block caret is used for the overwrite mode.
  </p>
  
  <p>
  When searching for the original area the search has always to start at the
  character 'under' a caret - the <b>important character</b>. In order not
  to tie the braces matching infrastructure to a praticular implementation of
  a caret we use the parameter <b>caret bias</b> to describe on which side of
  a caret the important character lies. Obviously the caret bias can only have
  two values - <b>backward</b> or <b>forward</b> - designating positions on the
  left or right hand side of the caret.
  </p>

  <p>
  Because the search for the original area always starts with the important character
  the result of this search is directly influenced by the caret bias. 
  The search could result in two different original areas depending on the value
  of the caret bias, even if the actual position of the caret was not changed.
  </p>
  
  <p>
  The caret bias is not only used for searching for the original area, but it is also
  used when navigating (jumping) between matching areas. The navigation is always done
  in a way to make the matching area where we are navigating to to appear on the
  same side of the caret as is the side of the caret bias. This makes sure that
  the matching area will be recognized as the next original area. (Strictly speaking
  this also depends on the particular matcher implementation that was used for
  finding the areas.)
  </p>
  
  <h4>Search direction</h4>
  
  <p>
  In general when looking for the original area we not only want to look right
  next to a caret, but we also want to search <i>a little bit further</i>. Looking
  a little bit further makes it easier for users to see the matching areas and
  navigate between them. They don't have to position the caret right at a brace
  in order to see the matching one or navigate to it.
  The scope of this search should, however, never leave the line with the caret
  and in some situations it might be restricted even more.
  </p>
  
  <p>
  Although there are only two directions to look in - <b>backward</b> or <b>forward</b> -
  in a real situation looking in both directions gives more practical results.
  That is why the infrastructure supports the following two search directions.
  </p>
  
  <ul>
  <li><b>Backward preferred</b> - for searching in the backward direction first
  and if no original area can be found then searching in the forward direction.
  </li>
  <li><b>Forward preferred</b> - for searching in the forward direction first
  and if no original area can be found then searching in the backward direction.
  </li>
  </ul>
  
  <h4>Maximum lookahead</h4>
  
  <p>
  The maximum distance, measured in characters from the position of a caret, that
  the search should be attempted in is called maximum lookahead. The infrastructure
  uses independent values for both search directions and calls them
  <b>maximum backward lookahead</b> and <b>maximum forward lookahead</b>.
  The lookahead
  is normally limited by the beginning and end of a line with the caret, but
  can be further limited by those two parameters. The absolute lookahead maximum
  in each direction enforced by the infrastructure is 256 characters
  </p>

  <p>
  There is an important relationship between maximum lookaheads and the caret bias. The
  maximum lookaheads can <b>never</b> obscure the important character. In other words
  the maximum lookahead in the direction of the caret bias will not prevent the infrastructure
  from searching through the important character (ie. the character right next to the caret).
  </p>
  
  <h4><a name="controlling-parameters">Controlling the parameters</a></h4>
  
  <p>
  There is no API for controlling caret bias, search direction and maximum lookaheads
  on the global level. It is expected that the module implementing the braces matching
  infrastructure will expose its own GUI for user to control those parameters. This
  GUI is yet to be designed. By default the infrastructure will set the parameters
  to mimic the behavior of the existing (old) implementation of braces matching
  done using <code>org.netbeans.editor.ExtSyntaxSupport</code>.
  </p>

  <p>
  On the other hand the parameters can be controlled on per-component basis by
  setting appropriate client properties. This is to allow interested modules
  such as the jVi plugin to overwrite global settings and implement their own
  searching policies. The following properties are supported.
  </p>
  
  <ul>
  <li><code>nbeditor-bracesMatching-caretBias</code> - The caret bias to determine
  the important character, available
  values are <code>backward</code> and <code>forward</code>.
  </li>
  <li><code>nbeditor-bracesMatching-searchDirection</code> - The direction to
  search in for the original area. Available values are <code>backward-preferred</code>
  and <code>forward-preferred</code>.
  </li>
  <li><code>nbeditor-bracesMatching-maxBackwardLookahead</code> - The maximum
  distance to search in when searching backward. The allowed values are <code>0</code>
  - <code>256</code>.
  </li>
  <li><code>nbeditor-bracesMatching-maxForwardLookahead</code> - The maximum
  distance to search in when searching forward. The allowed values are <code>0</code>
  - <code>256</code>.
  </li>
  </ul>
  
  
  <h3>Key parts of the SPI</h3>
  
  <p>Modules implementing the SPI are shielded from most of the complexity of
  the braces matching infrastructure as it was described earlier. Thier job is
  as simple as being able to search in one direction through the requested number
  of characters. The SPI provides all the neccessary information to perform
  such search as well as mechanisms for registering implemented matchers.
  </p>
  
  <p>
  The main part of the SPI is the
  <code><a href="@org-netbeans-modules-editor-bracesmatching@/org/netbeans/spi/editor/bracesmatching/BracesMatcher.html">BracesMatcher</a></code>
  interface, which
  needs to be implemented by anybody who wishes to provide a text matching
  services for a particular type of documents. Implementations of the
  <code>BracesMatcher</code> interface can be plugged in to the system by
  registering 
  <code><a href="@org-netbeans-modules-editor-bracesmatching@/org/netbeans/spi/editor/bracesmatching/BracesMatcherFactory.html">BracesMatcherFactory</a></code> 
  in the MIME lookup.
  </p>
  
  <p>The braces matching
  infrastructure will use registered factories to create matchers for highlighting
  matching areas in documents. Each type of a document (ie. mime type or more
  precisely each mime path) can have at most one <code>BracesMatcher</code> registered.
  If there is more different implementations registered for the same mime path
  the infrastructure will only use the first one.
  </p>
  
  <p>
  When asking a <code>BracesMatcherFactory</code> to create an instance of
  <code>BracesMatcher</code> the infrastructure passes the factory an instance of
  <code><a href="@org-netbeans-modules-editor-bracesmatching@/org/netbeans/spi/editor/bracesmatching/MatcherContext.html">MatcherContext</a></code>, 
  which provides information about a document
  and a position in that document, where the search should start.
  </p>

  
  <h3>BracesMatcher registration</h3>
  
  <p>
  The registration of <code>BracesMatcher</code>s has to be done through an
  instance of the <code>BracesMatcherFactory</code> class. The factory should
  be registered in <code>MimeLookup</code> under the mime-type of documents, which
  the <code>BracesMatcher</code> should be used for. For example, if a module
  wants to provide <code>BracesMatcher</code> for <code>text/x-something</code> documents
  it should implement its own <code>BracesMatcherFactory</code> (e.g.
  <code>org.some.module.BMFactory</code> class) and register it in <code>MimeLookup</code>
  using its XML layer as it is shown on the example below.
  </p>
  
  <pre>
&lt;folder name="Editors"&gt;
  &lt;folder name="text"&gt;
    &lt;folder name="x-something"&gt;
        &lt;folder name="BracesMatchers"&gt;
            &lt;file name="org-some-module-BMFactory.instance" /&gt;
        &lt;/folder&gt;
    &lt;/folder&gt;
  &lt;/folder&gt;
&lt;/folder&gt;
  </pre>

  <p>
  The <code>BMFactory</code> class will simply return a new instance of
  the module's implementation of the <code>BracesMatcher</code> interface from its
  <code>createMatcher</code>
  method.
  </p>

  
  <h3>Languages embedding</h3>
  
  <p>
  The registration mechanism described earlier and the general concept of MIME lookup
  allows to provide special <code>BracesMatcher</code>s for embedded languages.
  The braces matching infrastructure will always try to find the inner-most language at
  a position in a document, where the search should start. It will then create
  the <code>BracesMatcher</code> according to the mime path of that inner-most
  language.
  </p>
  
  <p>
  As per the general inheritance rules defined by MIME lookup this may result
  in using a <code>BracesMatcher</code> that is registered for a top level
  language (ie. mime type) different from the main language of the scanned
  document. Here is an example of a java snippet in a JSP page, the caret's
  position is indicated by the '|' pipe character. Assuming that there are only
  two <code>BracesMatcher</code> implementations registered - one for <code>text/x-jsp</code>
  and the other one for <code>text/x-java</code>, the infrastructure's attempt to find a matcher
  for the <code>text/x-jsp/text/x-java</code> mime path is going to result in
  finding the matcher registered for <code>text/x-java</code>.
  </p>
  
  <pre><![CDATA[
<% for(int i = 0; i < 10; i++) ]]><span style="background-color : pink;">{</span><![CDATA[ %>
<th><%=i%>. column</th>
<% ]]><span style="background-color : pink;">}</span><![CDATA[| %>;
  ]]></pre>
  
  <p>
  Since the support for languages embedding comes with the new Lexer API, the
  above example is naturally only going to work for document types that provide
  a <code>Lexer</code> implementation. This is the case for the most document types
  supported in Netbeans 6. In case that a document does not have a <code>Lexer</code>
  the infrastructure will fall back to using the document's main mime type ignoring
  any other languages that may potentially be embedded in the document.
  </p>
  
  <h3>Threading</h3>

  <p>
  While finding the original brace is relatively simle task, because it's always
  done in a limited and quite small area around a caret, finding the matching
  brace can take much more time and in generall it can involve searching through
  a whole document. The search is normally done in response to a moving caret,
  which means that there can be a lot of search requests generated
  when a user moves the caret quickly over some text. It is not very important
  to show all the results as the caret moves, but it is important to show the
  last result when the caret stops moving.
  </p>
  
  <p>
  In order not to impact responsiveness of the editor and its caret the braces matching
  infrastructure performs all searches in a background thread outside of the Swing's
  event thread. If needed a running task is cancelled and rescheduled with new
  parameters reflecting the latest position of the caret. The <code>BracesMatcher</code>s
  implemented by modules are <b>required</b> to react accordingly when a search task
  is cancelled. This is described in detail in the javadoc for <code>BracesMatcher</code>.
  </p>

  
  <h3>Constraints and limitations</h3>
  
  <p>
  The current design does not cover searching for areas in right-to-left documents. This
  usecase has not been even analyzed and may prove itself unsolvable withough major changes
  in the infrastructure and the SPI.
  </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? How you find out that your
            project was successful?
            </hint>
        </question>
-->
 <answer id="arch-quality">
  <p>
  There are unit tests covering the basic funtionality of the infrastructure
  needed for the SPI plugins to work. New tests will be continuously added as
  the module develops.
  </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 by which the work should be 
            ready?
            </hint>
        </question>
-->
 <answer id="arch-time">
  <p>
  The SPI will be part of the standard Netbeans build in Netbeans 6.0 timeframe.
  </p>
 </answer>



<!--
        <question id="arch-usecases" when="init">
            <hint>
                Content of this answer will be displayed as part of page at
                http://www.netbeans.org/download/dev/javadoc/usecases.html 
                You can use tags &lt;usecase name="name&gt; regular html description &lt;/usecase&gt;
                and if you want to use an URL you can prefix if with @TOP@ to begin
                at the root of your javadoc
            </hint>
        
            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">
  <p>
  Although the SPI can generally by used for highlighting areas in a document
  that have something in common, the usecases below are demonstrated on a simple
  braces matching example. This example is used for its simplicity and clarity,
  but it could be substituted by more complex examples.
  </p>

  <p>
  The usecases listed here were heavily inspired by comments in issues
  <a href="http://www.netbeans.org/issues/show_bug.cgi?id=95126">95126</a> and
  <a href="http://www.netbeans.org/issues/show_bug.cgi?id=66037">66037</a>.
  </p>
  
  <usecase id="usecase-1" name="Usecase 1. - Highlighting results">
  <p>
  Probably the main reason why this SPI exists is to allow Netbeans editor to
  highlight matching braces in a document. The highlighting itself is done by the
  infrastructure and is not of a concern for <code>BracesMatcher</code> implementors.
  It should be possible to highlight independently
  (ie. in a different color) both the original brace and the matching brace. It should also
  be possible to highlight the original brace in a special color when its matching
  brace can't be found. The colors obviously have to be customizable by users.
  </p>
  </usecase>
  
  <usecase id="usecase-2" name="Usecase 2. - Navigating between results">
  <p>
  If the original brace is detected and its matching brace is found Netbeans editor
  needs to allow an easy navigation between those two positions (ie. jumping
  from the original brace to the matching one and back).
  </p>
  
  <p>
  In general if there is more than one matching area users should be allowed to cycle
  through all of them. Since there is only one editor action (shortcut) for navigating
  between matching areas the cycling is only done in one direction (backward). In
  order for cycling to work properly the <code>BracesMatcher</code> implementation has to report
  matching areas in a consistent way. That is the matching areas should always be
  sorted by their position in a document, starting with the one at the lowest offset.
  </p>
  </usecase>

  <usecase id="usecase-3" name="Usecase 3. - Different search scenarios">
  <p>
  The users are likely to have different preferences for the way how braces matching
  works therefore its behavior should be customizable. We have listed below several
  possible scenarios that can be used simply by setting different values for the
  search parameters described before. They all differ in the way how the original
  area is detected.
  </p>

  <p>
  The shortcuts for the parameters have the following meaning - <code>MBL</code>
  ... max backward lookahead, <code>MFL</code> ... max forward lookahead,
  <code>SD</code> ... search direction, <code>CB</code> ... caret bias. The values
  are <code>B</code> ... backward or backward preferred and 
  <code>F</code> ... forward or forward preferred. The question mark <code>?</code>
  means that the value of this parameter has no effect for the search.
  </p>
  
  <ul style="list-style-type : upper-alpha">
  <li>
      <a name="search-scenario-A"><code>MBL = 0, MFL = 0, SD = ?, CB = F</code></a> : Check only the right hand side
      character of the caret. This is the default for Netbeans overwrite mode (ie. the
      block shaped caret).
  </li>
  <li>
      <a name="search-scenario-B"><code>MBL = 1, MFL = 1, SD = ?, CB = B</code></a> : Check characters right next to
      the caret on both its sides. This is the default for Netbeans normal mode (ie.
      the I-beam shaped caret).
  </li>
  <li>
      <code>MBL = 0, MFL = 256, SD = F, CB = B</code> : Check the character on the
      left hand side of the caret, otherwise search forward. This is the default
      for jVi insert mode.
  </li>
  <li>
      <code>MBL = 0, MFL = 256, SD = F, CB = F</code> : Search forward from the caret.
      This is the default for jVi command mode.
  </li>
  <li>
      <code>MBL = 256, MFL = 256, SD = F, CB = B</code> : Check the left hand side
      character, otherwise search forward first and then backward. Suitable for
      I-beam carets that detect the original area anywhere on the line with the
      caret giving preferrence to the area positioned forward from the caret. The
      preferrence for the backward positioned area can simply be achieved by changing
      the search direction (ie. <code>SD = B</code>).
  </li>
  <li>
      <code>MBL = 256, MFL = 256, SD = F, CB = F</code> : The same as
      option E, but for the block carets.
  </li>
  </ul>
  </usecase>
  
  <usecase id="usecase-4" name="Usecase 4. - Auto-switching the search scenario">
  <p>
  The editor in Netbeans can operate in two modes - normal and overwrite. They both
  use different shape of a caret and thus need a different caret bias. The braces
  matching infrastructure should detect what mode the editor is in and change the
  parameters used for searching for the original area accordingly. The caret bias
  is the most important parameter, but other parameters may need to be changed too.
  </p>
  
  <p>
  This feature should of course be only active for text components where the parameters
  have not been overwritten by some other module.
  </p>
  
  <p>
  By default the two search scenarios used for the normal and overwrite modes in
  Netbeans editor are the <a href="#search-scenario-B">scenario B</a> for the normal
  mode and <a href="#search-scenario-A">scenario A</a> for the overwrite mode. In
  general scenarios from both editor modes should be customizable by users.
  </p>
  </usecase>
 </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 Braces Matching SPI allows modules providing editor support for documents
  to create their own <code>BracesMatcher</code>s that are tailored for the type of documents they
  support. The module itself provides an infrastructure for
  highlighting matching areas identified by a matcher and navigating between them. 
  </p>
 </answer>



<!--
        <question id="arch-where" when="impl">
            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>



<!--
        <question id="compat-deprecation" when="init">
            How the introduction of your project influences functionality
            provided by previous version of the product?
            <hint>
            If you are planning to deprecate/remove/change any existing APIs,
            list them here accompanied with the reason explaining why you
            are doing so.
            </hint>
        </question>
-->
 <answer id="compat-deprecation">
  <p>
  The Braces Matching SPI is a replacement for <code>ExtSyntaxSupport.findMatchingBlocks</code>
  SPI. The module provides a legacy matcher that will use <code>ExtSyntaxSupport</code>
  in case that a new matcher is not available for a given document type.
  </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>
  Yes.
  </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>
  No standards implemented.
  </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>
  Yes. At the moment there are no previous versions of this module.
  </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>
  Any JRE suitable for Netbeans platform itself.
  </p>
 </answer>



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



<!--
        <question id="dep-nb" when="init">
            What other NetBeans projects and modules does this one depend on?
            <hint>
            Depending on other NetBeans projects influnces the ability of
            users of your work to customize their own branded version of
            NetBeans by enabling and disabling some modules. Too
            much dependencies restrict this kind of customization. If that
            is your case, then you may want to split your functionality into
            pieces of autoload, eager and regular modules which can be
            enabled independently. Usually the answer to this question
            is generated from your <code>project.xml</code> file, but
            if it is not guessed correctly, you can suppress it by
            specifying &lt;defaultanswer generate="none"/&gt; and
            write here your own. Please 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>.
            By doing this information gets listed in the summary page of your
            javadoc.
            </hint>
        </question>
-->
 <answer id="dep-nb">
  <defaultanswer generate='none' />
  <ul>
<li><api type='import' group='java' category='deprecated' name='org.netbeans.modules.editor.lib' url='@org-netbeans-modules-editor-lib@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                1.14
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='devel' name='org.netbeans.modules.editor.lib2' url='@org-netbeans-modules-editor-lib2@/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='org.netbeans.modules.editor.mimelookup' url='@org-netbeans-modules-editor-mimelookup@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                1.6
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='private' name='org.netbeans.modules.editor.settings' url='@org-netbeans-modules-editor-settings@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                1.9
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='private' name='org.netbeans.modules.editor.util' url='@org-netbeans-modules-editor-util@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                1.17
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='org.netbeans.modules.lexer' url='@org-netbeans-modules-lexer@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                1.18
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='org.openide.dialogs' url='@org-openide-dialogs@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                7.4
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='org.openide.modules' url='@org-openide-modules@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                7.2
                is required.
            </api>
</li>            
<li><api type='import' group='java' category='official' name='org.openide.util' url='@org-openide-util@/overview-summary.html' >
            The module is needed for compilation. 
        
            The module is used during runtime. 
            
                Specification version 
                7.9
                is required.
            </api>
</li>            
  </ul>
 </answer>



<!--
        <question id="dep-non-nb" when="init">
            What other projects outside NetBeans does this one depend on?
            
            <hint>
            Depending on 3rd party libraries is always problematic,
            especially if they are not open source, as that complicates
            the licensing scheme of NetBeans. Please enumerate your
            external dependencies here, so it is correctly understood since
            the begining what are the legal implications of your project.
            Also please note that
            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 and share such third-party libraries.
            </hint>
        </question>
-->
 <answer id="dep-non-nb">
  <p>
  None.
  </p>
 </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 you plan any dependency on OS or any usage of native code,
            please describe why you are doing so and describe how you envision
            to enforce the portability of your code.
            Please note that there is a support for <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-os-specific">OS conditionally
            enabled modules</a> which together with autoload/eager modules
            can allow you to enable to provide the best OS aware support
            on certain OSes while providing compatibility bridge on the not
            supported ones.
            Also please list the supported
            OSes/HW platforms and mentioned the lovest version of JDK required
            for your project to run on. Also state whether JRE is enough or
            you really need JDK.
            </hint>
        </question>
-->
 <answer id="dep-platform">
  <p>
  No platform dependencies.
  </p>
 </answer>



<!--
        <question id="deploy-dependencies" when="final">
            What do other modules need to do to declare a dependency on this one,
            in addition to or instead of the normal module dependency declaration
            (e.g. tokens to require)?
            <hint>
                Provide a sample of the actual lines you would add to a module manifest
                to declare a dependency, for example OpenIDE-Module-Requires: some.token.
                If other modules should not depend on this module, or should just use a
                simple regular module dependency, you can just answer "nothing". If you
                intentionally expose a semistable API to clients using implementation
                dependencies, you should mention that here (but there is no need to give
                an example of usage).
            </hint>
        </question>
-->
 <answer id="deploy-dependencies">
  <p>
  Just normal module dependency.
  </p>
 </answer>



<!--
        <question id="deploy-jar" when="impl">
            Do you deploy just module JAR file(s) or other files as well?
            <hint>
            Usually a module consist of one JAR file (perhaps with Class-Path
            extensions) and also a configuration file that enables it. If you
            have any other files, use
            &lt;api group="java.io.File" name="yourname" type="export" category="friend"&gt;...&lt;/api&gt;
            to define the location, name and stability of your files (of course
            changing "yourname" and "friend" to suit your needs).
            
            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>
  No additional files.
  </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>
            By default NetBeans build harness treats all packages are private.
            If you export some of them - either as public or friend packages,
            you should have a reason. If the reason is described elsewhere
            in this document, you can ignore this question.
            </hint>
        </question>
-->
 <answer id="deploy-packages">
  <p>
  Yes. Only the <code>org.netbeans.spi.editor.bracesmatching</code> package is public.
  </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>
  Anywhere.
  </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="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>
  No.
  </p>
 </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>
  Yes. The infrastructure recognizes the following properties that can be set
  on a <code>JTextComponent</code>. The properties influence the way how a matcher
  is used for finding the original area (ie. the area where the matching starts,
  for example the first brace).
  </p>
  <ul>
  <li>
  <api name="nbeditor-bracesMatching-caretBias" group="property" category="devel" type="export" >
  Controls where the important character lies in relation to a caret. The important
  character is a character right next to a caret and depending on the value of
  this property it can be the character on either the left hand side or the right hand side
  of the caret. Please see the infrastructure
  <a href="#controlling-parameters">overview</a>
  for more details.
  </api></li>
  <li>
  <api name="nbeditor-bracesMatching-searchDirection" group="property" category="devel" type="export" >
  Controls a direction
  in which the search for the original area is performed. Please see the infrastructure
  <a href="#controlling-parameters">overview</a>
  for more details.
  </api></li>
  <li>
  <api name="nbeditor-bracesMatching-maxBackwardLookahead" group="property" category="devel" type="export">
  Controls the maximum distance
  measured in characters from the position of a caret, where matchers are allowed
  to search for the original area. Please see the infrastructure
  <a href="#controlling-parameters">overview</a>
  for more details.
  </api></li>
  <li>
  <api name="nbeditor-bracesMatching-maxForwardLookahead" group="property" category="devel" type="export">
  Controls the maximum distance
  measured in characters from the position of a caret, where matchers are allowed
  to search for the original area. Please see the
  <a href="#controlling-parameters">overveiw</a>
  for more details.
  </api></li>
  </ul>
  
 </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>
  No.
  </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>
  No.
  </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?
            On a similar note, is there something interesting that you
            pass to <code>java.util.logging.Logger</code>? Or do you observe
            what others log?
            <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>
  No.
  </p>
 </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>
  No.
  </p>
 </answer>



<!--
        <question id="exec-threading" when="init">
            What threading models, if any, does your module adhere to? How the
            project behaves with respect to threading?
            <hint>
                Is your API threadsafe? Can it be accessed from any threads or
                just from some dedicated ones? Any special relation to AWT and
                its Event Dispatch thread? Also
                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>
  The infrastructure uses a dedicated <code>RequestProcessor</code> for running
  tasks that search for the original and matching areas. The search is initiated
  by moving a caret in a text component, which usually happens in Swing's event
  thread. In order not to block this thread the infrastructure posts the task to
  the <code>RequestProcessor</code>. Any previously running task is cancelled,
  because its results are not needed anymore. When a task finishes it highlights
  its results (if there are any) in the text component using the Highlighting SPI.
  Please read more in the <code>org.netbeans.spi.editor.bracesmatching</code>
  package's javadoc.
  </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? Do you generate an ant build script?
            Can it be edited and modified? 
            
            <hint>
            <p>
            Files can be read and written by other programs, modules and users. If they influence
            your behaviour, make sure you either document the format or claim that it is a private
            api (using the &lt;api&gt; tag). 
            </p>
            
            <p>
            If you generate an ant build file, this is very likely going to be seen by end users and
            they will be attempted to edit it. You should be ready for that and provide here a link
            to documentation that you have for such purposes and also describe how you are going to
            understand such files during next release, when you (very likely) slightly change the 
            format.
            </p>
            </hint>
        </question>
-->
 <answer id="format-types">
  <p>
  None.
  </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>
            NetBeans is build around a generic registry of services called
            lookup. It is preferable to use it for registration and discovery
            if possible. See
            <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/lookup/doc-files/index.html">
            The Solution to Comunication Between Components
            </a>. If you do not plan to use lookup and insist usage
            of other solution, then please describe why it is not working for
            you.
            <br/>
            When filling the final version of your arch document, 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. Use &lt;api group=&amp;lookup&amp; /&gt; tag, so
            your information gets listed in the summary page of your javadoc.
            </hint>
        </question>
-->
 <answer id="lookup-lookup">
  <p>
  Yes. The module uses <code>MimeLookup</code> to find instances of <code>BracesMatcherFactory</code>
  registered for particular mime types. The instances are then used for creating
  <code>BracesMatcher</code>s, which are used for finding the matching areas of
  a document.
  </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>
  Yes. An implementation of <code>HighlightsLayerFactory</code> is registered in
  the root of <code>MimeLookup</code> to plug in a special highlighting layer
  that will show seach results.
  </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>
  No.
  </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>
  No.
  </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?
            <hint>
                Most of algorithms have increasing memory and speed complexity
                with respect to size of data they operate on. What is the critical
                part of your project that can be seen as a bottleneck with
                respect to speed or required memory? What are the practical
                sizes of data you tested your project with? What is your estimate
                of potential size of data that would cause visible performance
                problems? Is there some kind of check to detect such situation
                and prevent "hard" crashes - for example the CloneableEditorSupport
                checks for size of a file to be opened in editor
                and if it is larger than 1Mb it shows a dialog giving the
                user the right to decide - e.g. to cancel or commit suicide.
            </hint>
        </question>
-->
 <answer id="perf-limit">
  <p>
  No limits on the numbers of registered <code>BracesMatcherFactory</code>s. The
  performance of Netbeans editor can be affected by poorly designed implementations
  of <code>BracesMatcher</code>.
  </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>
  Roughly 100 bytes per an edited document.
  </p>
 </answer>



<!--
        <question id="perf-menus" when="final">
            Does your module use dynamically updated context menus, or
            context-sensitive actions with complicated and slow enablement logic?
            <hint>
                If you do a lot of tricks when adding actions to regular or context menus, you can significantly
                slow down display of the menu, even when the user is not using your action. Pay attention to
                actions you add to the main menu bar, and to context menus of foreign nodes or components. If
                the action is conditionally enabled, or changes its display dynamically, you need to check the
                impact on performance. In some cases it may be more appropriate to make a simple action that is
                always enabled but does more detailed checks in a dialog if it is actually run.
            </hint>
        </question>
-->
 <answer id="perf-menus">
  <p>
  No.
  </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>
  No.
  </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>
  No scaling problems in the infrastructure itself. The performance of registered
  <code>BracesMatcher</code>s is likely to be affected by the size of a document
  they search in.
  </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 quickly and will not
            negatively influence the performance of your own module?
            </hint>
        </question>
-->
 <answer id="perf-spi">
  <p>
  Long running old searches for matching areas are cancelled by new requests. No
  other enforcement is in place. A poorly written plugin <code>BraceMatcher</code>
  can negatively influence the overall performance of Netbeans editor.
  </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>
  No.
  </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 module layer contains <code>MimeLookup</code> registrations neccessary
  for plugging in its highlighting layer.
  </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-preferences" when="final">
            Does your module uses preferences via Preferences API? Does your module use NbPreferences or
            or regular JDK Preferences ? Does it read, write or both ? 
            Does it share preferences with other modules ? If so, then why ?
            <hint>
                You may use
                    &lt;api type="export" group="preferences"
                    name="preference node name" category="private"&gt;
                    description of individual keys, where it is used, what it
                    influences, whether the module reads/write it, etc.
                    &lt;/api&gt;
                Due to XML ID restrictions, rather than /org/netbeans/modules/foo give the "name" as org.netbeans.modules.foo.
                Note that if you use NbPreferences this name will then be the same as the code name base of the module.
            </hint>
        </question>
-->
 <answer id="resources-preferences">
  <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">
  <p>
  No.
  </p>
 </answer>



<!--
        <question id="security-grant" when="final">
            Does your code grant additional rights to some other code?
            <hint>Avoid using a class loader that adds extra
            permissions to loaded code unless really necessary.
            Also note that your API implementation
            can also expose unneeded permissions to enemy code by
            calling AccessController.doPrivileged().</hint>
        </question>
-->
 <answer id="security-grant">
  <p>
  No.
  </p>
 </answer>



<!--
        <question id="security-policy" when="final">
            Does your functionality require modifications to the standard policy file?
            <hint>Your code might pass control to third-party code not
            coming from trusted domains. This could be code downloaded over the
            network or code coming from libraries that are not bundled
            with NetBeans. Which permissions need to be granted to which domains?</hint>
        </question>
-->
 <answer id="security-policy">
  <p>
  No.
  </p>
 </answer>

</api-answers>
