<?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>
  
  <h2>The infrastructure overview</h2>
  
  <p>
  The following paragraphs give an overview of the infrastructure used for braces
  matching and explain the essential terminology and ideas behind it.
  </p>
  
  <h3>Original and matching areas</h3>
  
  <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>
  
  <h3>Caret Bias</h3>
  
  <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>
  
  <h3>Search direction</h3>
  
  <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>
  
  <h3>Maximum lookahead</h3>
  
  <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>
  
  <h3 id="controlling-parameters">Controlling the parameters</h3>
  
  <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>
  
  
  <h2>Key parts of the SPI</h2>
  
  <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>

  
  <h2>BracesMatcher registration</h2>
  
  <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>

  
  <h2>Languages embedding</h2>
  
  <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>
  
  <h2>Threading</h2>

  <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>

  
  <h2>Constraints and limitations</h2>
  
  <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="https://bz.apache.org/netbeans/show_bug.cgi?id=95126">95126</a> and
  <a href="https://bz.apache.org/netbeans/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 id="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 id="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>
