blob: f918987f6b99ac9ae7da61d3a1cf5ae11c9681c4 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 1.5.5">
<meta name="author" content="2019-08-08 13:15:33 CEST">
<title>N4JS IDE Specification</title>
<link rel="stylesheet" href="styles/spec.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
<!-- ************* docinfo ******************************************************************* -->
<!-- ************* Favicon ************-->
<link rel="icon" href="images/favicon.ico" />
<!-- ************* Back-to-top JQuery ************* -->
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
<link href="styles/prism.min.css" rel="stylesheet" />
<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<!-- ************* Styles ************* -->
<link rel="stylesheet" type="text/css" href="styles/n4jsspec-adoc.css">
<!-- ****************** NavBar ****************** -->
<div id="menubar">
<div class="banner">
<a href="https://www.eclipse.org/n4js/#"><img id="logo" src="images/n4js-logo.png" alt="Eclipse N4JS"></a>
</div>
<ul>
<li><a href="index.html">Index</a></li>
</ul>
</div>
<!-- ************* docinfo ******************************************************************* -->
<style>
.admonitionblock td.icon .icon-todo:before{content:"\f249";color:#f4ee42}
</style>
</head>
<body class="book toc2 toc-left">
<div id="header">
<h1>N4JS IDE Specification</h1>
<div class="details">
<span id="author" class="author">2019-08-08 13:15:33 CEST</span><br>
<span id="revnumber">version 0.9</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="views.html#sec:Views">1. Views</a>
<ul class="sectlevel2">
<li><a href="views.html#_eclipse-standard-views">1.1. Eclipse Standard Views</a>
<ul class="sectlevel3">
<li><a href="views.html#sec:Project_Explorer_View">1.1.1. Project Explorer</a></li>
<li><a href="views.html#sec:Outline_View">1.1.2. Outline</a></li>
<li><a href="views.html#sec:Problems_View">1.1.3. Problems</a></li>
<li><a href="views.html#sec:Console_View">1.1.4. Console</a></li>
<li><a href="views.html#sec:History_View">1.1.5. History</a></li>
<li><a href="views.html#sec:Error_Log_View">1.1.6. Error Log</a></li>
</ul>
</li>
<li><a href="views.html#_n4js-specific-views">1.2. N4JS Specific Views</a>
<ul class="sectlevel3">
<li><a href="views.html#_test-results">1.2.1. Test Results</a></li>
<li><a href="views.html#_source-graphs">1.2.2. Source Graphs</a></li>
<li><a href="views.html#_api-compare">1.2.3. API Compare</a></li>
<li><a href="views.html#_performance-graphs">1.2.4. Performance Graphs</a></li>
<li><a href="views.html#_source-mapping">1.2.5. Source Mapping</a></li>
<li><a href="views.html#_xpect-view">1.2.6. Xpect View</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="navigation.html#_navigation">2. Navigation</a>
<ul class="sectlevel2">
<li><a href="navigation.html#sec:Outline_Navigation">2.1. Outline</a>
<ul class="sectlevel3">
<li><a href="navigation.html#_quick-outline">2.1.1. Quick Outline</a></li>
<li><a href="navigation.html#_normal-outline">2.1.2. Normal Outline</a></li>
</ul>
</li>
<li><a href="navigation.html#_navigation-commands">2.2. Navigation Commands</a>
<ul class="sectlevel3">
<li><a href="navigation.html#sec:Navigate_to_Declaration">2.2.1. Navigate to Declaration</a></li>
<li><a href="navigation.html#sec:find_by_references">2.2.2. Find by References</a></li>
<li><a href="navigation.html#sec:Open_Type_Declaration">2.2.3. Open Type Declaration</a></li>
</ul>
</li>
<li><a href="navigation.html#sec:Working_Sets">2.3. Working Sets</a>
<ul class="sectlevel3">
<li><a href="navigation.html#sec:Working_Set_Managers">2.3.1. Working Set Managers</a></li>
<li><a href="navigation.html#sec:Working_Set_Constraints">2.3.2. Working Set Constraints</a></li>
<li><a href="navigation.html#sec:Manual_Association_Working_Set_Manager_UI_Features">2.3.3. Manual Association Working Set Manager - UI Features</a></li>
<li><a href="navigation.html#sec:Project_Name_Filter_Working_Set_Manager">2.3.4. Project Name Filter Working Set Manager</a></li>
<li><a href="navigation.html#sec:Git_Repository_Working_Set_Manager">2.3.5. Git Repository Working Set Manager</a></li>
<li><a href="navigation.html#sec:Project_Location_Working_Set_Manager">2.3.6. Project Location Working Set Manager</a></li>
<li><a href="navigation.html#sec:N4JS_Project_Type_Working_Set_Manager">2.3.7. N4JS Project Type Working Set Manager</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="assistance.html#_assistance">3. Assistance</a>
<ul class="sectlevel2">
<li><a href="assistance.html#sec:Content_Assist">3.1. Content Assist</a>
<ul class="sectlevel3">
<li><a href="assistance.html#sec:Complete_Keywords">3.1.1. Complete Keywords</a></li>
<li><a href="assistance.html#sec:Complete_Annotations">3.1.2. Complete Annotations</a></li>
<li><a href="assistance.html#sec:Complete_Identifier_Reference">3.1.3. Complete Identifier Reference</a></li>
<li><a href="assistance.html#sec:Complete_Member_Overrides">3.1.4. Complete Member Overrides</a></li>
<li><a href="assistance.html#sec:Constructor_Completion">3.1.5. Constructor Completion</a></li>
<li><a href="assistance.html#sec:Complete_Function_Expression">3.1.6. Complete Function Expression with Known Type</a></li>
<li><a href="assistance.html#sec:Complete_Variable_and_Parameter_Names">3.1.7. Complete Variable and Parameter Names</a></li>
</ul>
</li>
<li><a href="assistance.html#sec:Quick_Fixes">3.2. Quick Fixes</a>
<ul class="sectlevel3">
<li><a href="assistance.html#sec:N4JS_Issue_Properties">3.2.1. N4JS Issue User data</a></li>
<li><a href="assistance.html#sec:N4JS_Issue_Fixes">3.2.2. N4JS Issue Fixes</a>
<ul class="sectlevel4">
<li><a href="assistance.html#sec:Linking_Issues">3.2.2.1. Linking Issues</a></li>
<li><a href="assistance.html#sec:Import_Issues">3.2.2.2. Import Issues</a></li>
<li><a href="assistance.html#sec:Visibility_Issues">3.2.2.3. Visibility Issues</a></li>
<li><a href="assistance.html#sec:Classifier_Issues">3.2.2.4. Classifier Issues</a></li>
<li><a href="assistance.html#sec:Function_Issues">3.2.2.5. Function Issues</a></li>
<li><a href="assistance.html#sec:Syntax_Issues">3.2.2.6. Syntax Issues</a></li>
<li><a href="assistance.html#sec:Conversion_Issues">3.2.2.7. Conversion Issues</a></li>
<li><a href="assistance.html#sec:Type_Issues">3.2.2.8. Type Issues</a></li>
<li><a href="assistance.html#sec:Expression_Issues">3.2.2.9. Expression Issues</a></li>
<li><a href="assistance.html#sec:Super_Keyword_Issues">3.2.2.10. Super Keyword Issues</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="assistance.html#sec:Quick_Assist">3.3. Quick Assist</a></li>
<li><a href="assistance.html#sec:Cleanup_Operations">3.4. Cleanup Operations</a>
<ul class="sectlevel3">
<li><a href="assistance.html#sec:Formatting">3.4.1. Formatting</a></li>
<li><a href="assistance.html#sec:Organize_Imports">3.4.2. Organize Imports</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_wizards">4. Wizards</a>
<ul class="sectlevel2">
<li><a href="#sec:N4JS_Project_Wizard">4.1. N4JS Project Wizard</a></li>
<li><a href="#sec:Empty_N4JS_File">4.2. Empty N4JS File</a></li>
<li><a href="#sec:Empty_JS_File">4.3. Empty JS File</a>
<ul class="sectlevel3">
<li><a href="#sec:N4JS_Class_File_Wizard">4.3.1. N4JS Class Wizard</a></li>
<li><a href="#field-properties">4.3.2. Field Properties</a></li>
<li><a href="#visibility-issues-or-final-super-classes">4.3.3. Visibility issues or <code>@Final</code> super classes</a></li>
<li><a href="#generation-1">4.3.4. Generation</a></li>
<li><a href="#preview-1">4.3.5. Preview</a></li>
</ul>
</li>
<li><a href="#sec:N4JS_Interface_Wizard">4.4. Interface Wizard</a>
<ul class="sectlevel3">
<li><a href="#field-properties-1">4.4.1. Field Properties</a></li>
<li><a href="#visibility-issues">4.4.2. Visibility Issues</a></li>
<li><a href="#import-naming-conflicts">4.4.3. Import naming conflicts</a></li>
<li><a href="#generation-2">4.4.4. Generation</a></li>
<li><a href="#preview-2">4.4.5. Preview</a></li>
</ul>
</li>
<li><a href="#sec:N4JS_Enum_File_Wizard">4.5. Enum Wizard</a>
<ul class="sectlevel3">
<li><a href="#field-properties-2">4.5.1. Field Properties</a></li>
<li><a href="#generation-3">4.5.2. Generation</a></li>
<li><a href="#preview-3">4.5.3. Preview</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="execution_support.html#_execution-support">5. Execution Support</a>
<ul class="sectlevel2">
<li><a href="execution_support.html#sec:Non_UI_Execution">5.1. Non-UI Execution</a>
<ul class="sectlevel3">
<li><a href="execution_support.html#sec:Non_UI_Debugging">5.1.1. Non-UI Debugging</a></li>
</ul>
</li>
<li><a href="execution_support.html#sec:UI_Execution">5.2. UI Execution</a></li>
</ul>
</li>
<li><a href="test_support.html#_test-support">6. Test Support</a>
<ul class="sectlevel2">
<li><a href="test_support.html#sec:N4JS_Mangelhaft_support">6.1. N4JS Mangelhaft support</a>
<ul class="sectlevel3">
<li><a href="test_support.html#sec:Asynchronous_Tests">6.1.1. Asynchronous Tests, Test Isolation and Timeouts</a></li>
<li><a href="test_support.html#sec:Supported_xUnit_API">6.1.2. Supported xUnit API</a>
<ul class="sectlevel4">
<li><a href="test_support.html#sec:Test_Group">6.1.2.1. Test Group</a></li>
<li><a href="test_support.html#sec:Test_Method">6.1.2.2. Test Method</a></li>
<li><a href="test_support.html#sec:BeforeAll">6.1.2.3. BeforeAll Setup</a></li>
<li><a href="test_support.html#sec:Before_Setup">6.1.2.4. Before Setup</a></li>
<li><a href="test_support.html#sec:After_Teardown">6.1.2.5. After Teardown</a></li>
<li><a href="test_support.html#sec:AfterAll_Teardown">6.1.2.6. AfterAll Teardown</a></li>
<li><a href="test_support.html#sec:Test_Ignore">6.1.2.7. Test Ignore</a></li>
<li><a href="test_support.html#sec:Timeout">6.1.2.8. Timeout</a></li>
<li><a href="test_support.html#sec:Description">6.1.2.9. Description</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="test_support.html#sec:Test_Reporting">6.2. Test Reporting</a>
<ul class="sectlevel3">
<li><a href="test_support.html#sec:Test_Messages">6.2.1. Test Messages</a>
<ul class="sectlevel4">
<li><a href="test_support.html#_test-case-ids">6.2.1.1. Test Case IDs</a></li>
<li><a href="test_support.html#sec:Start_Session">6.2.1.2. Start Session</a></li>
<li><a href="test_support.html#sec:Ping_Session">6.2.1.3. Ping Session</a></li>
<li><a href="test_support.html#sec:End_Session">6.2.1.4. End Session</a></li>
<li><a href="test_support.html#sec:Start_Test">6.2.1.5. Start Test</a></li>
<li><a href="test_support.html#sec:End_Test">6.2.1.6. End Test</a></li>
<li><a href="test_support.html#sec:Ping_Test">6.2.1.7. Ping Test</a></li>
<li><a href="test_support.html#sec:Test_Catalog">6.2.1.8. Test Catalog</a></li>
<li><a href="test_support.html#sec:Test_Session_Example">6.2.1.9. Test Session Example</a></li>
</ul>
</li>
<li><a href="test_support.html#sec:Test_Runtime_Configuration">6.2.2. Test Runtime Configuration</a></li>
<li><a href="test_support.html#sec:Test_Plan">6.2.3. Test Plan</a></li>
<li><a href="test_support.html#sec:Test_Environment_Configuration">6.2.4. Test Environment Configuration</a></li>
<li><a href="test_support.html#sec:Test_Environment_Configuration_Example">6.2.5. Test Environment Configuration Example</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="help_system.html#_help-system">7. Help System</a>
<ul class="sectlevel2">
<li><a href="help_system.html#sec:Built_In_Help">7.1. Built-In Help</a></li>
<li><a href="help_system.html#sec:Context_Sensitive_Help">7.2. Context Sensitive Help</a></li>
<li><a href="help_system.html#sec:Cheat_Sheets">7.3. Cheat Sheets</a></li>
<li><a href="help_system.html#sec:JSDoc">7.4. JSDoc</a></li>
<li><a href="help_system.html#sec:Hovering">7.5. Hovering</a>
<ul class="sectlevel3">
<li><a href="help_system.html#sec:Show_Type_Information_of_Selection">7.5.1. Show Type Information of Selection</a></li>
</ul>
</li>
<li><a href="help_system.html#sec:Example_Projects_and_Files">7.6. Example Projects and Files</a></li>
</ul>
</li>
<li><a href="bug_management.html#_bug-management">8. Bug Management</a>
<ul class="sectlevel2">
<li><a href="bug_management.html#sec:Built_In_Xpect_Support">8.1. Built-In Xpect Support</a>
<ul class="sectlevel3">
<li><a href="bug_management.html#sec:Report_View">8.1.1. Report View</a></li>
<li><a href="bug_management.html#sec:Generate_Bug_Report">8.1.2. Generate Bug Report</a></li>
<li><a href="bug_management.html#sec:Supported_Xpect_Tests">8.1.3. Supported Xpect Tests</a>
<ul class="sectlevel4">
<li><a href="bug_management.html#sec:XPECT_N4JS_Errors">8.1.3.1. Errors, Warnings, Infos, Issues</a></li>
<li><a href="bug_management.html#sec:XPECT_N4JS_Noerrors">8.1.3.2. Noerrors</a></li>
<li><a href="bug_management.html#sec:XPECT_N4JS_Output">8.1.3.3. Output, OutputRegex</a></li>
<li><a href="bug_management.html#sec:XPECT_N4JS_Type_Of">8.1.3.4. Type Of</a></li>
<li><a href="bug_management.html#sec:XPECT_Advanced_Methods">8.1.3.5. Advanced methods</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="cli.html#_cli">9. CLI</a>
<ul class="sectlevel2">
<li><a href="cli.html#sec:Headless_Compiler">9.1. Headless Compiler</a></li>
<li><a href="cli.html#sec:Headless_Dependencies">9.2. Headless Dependnecies</a></li>
<li><a href="cli.html#sec:Headless_Execution">9.3. Headless Execution</a>
<ul class="sectlevel3">
<li><a href="cli.html#sec:Cleaning_Headlessly">9.3.1. Cleaning Headlessly</a></li>
<li><a href="cli.html#sec:Running_Headlessly">9.3.2. Running Headlessly</a></li>
<li><a href="cli.html#sec:Information_about_running_headlessly">9.3.3. Information about running headlessly</a></li>
<li><a href="cli.html#sec:Testing_Headlessly">9.3.4. Testing Headlessly</a></li>
<li><a href="cli.html#sec:Information_about_testing_headlessly">9.3.5. Information about testing headlessly</a></li>
<li><a href="cli.html#_testresults">9.3.6. TestResults</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="appendix_a_license.html#sec:License">Appendix A: License</a></li>
<li><a href="appendix_b_acronyms.html#sec:Acronyms">Appendix B: Acronyms</a></li>
<li><a href="appendix_c_bibliography.html#_bibliography">Appendix C: Bibliography</a></li>
</ul>
</div>
</div>
<div id="content"><div class="sect1">
<h2 id="_wizards"><a class="anchor" href="#_wizards"></a><a class="link" href="#_wizards">4. Wizards</a></h2>
<div class="sectionbody">
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title=""></i>
</td>
<td class="content">
Some descriptions may be outdated.
</td>
</tr>
</table>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title=""></i>
</td>
<td class="content">
All requirement sections are not linked to real issues. They were left here as an example and to complete the issues.
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="sec:N4JS_Project_Wizard"><a class="anchor" href="#sec:N4JS_Project_Wizard"></a><a class="link" href="#sec:N4JS_Project_Wizard">4.1. N4JS Project Wizard</a></h3>
<div class="paragraph">
<p>Wizard creates a new N4JS project.</p>
</div>
<div class="paragraph">
<p>The following information is to be specified by the user:</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Project Name
</td>
<td class="hdlist2">
<p>string, name of project</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Default Location
</td>
<td class="hdlist2">
<p>boolean, true by default</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Location
</td>
<td class="hdlist2">
<p>string, computed default location, if user set location then default location flag must be false</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Project Type
</td>
<td class="hdlist2">
<p>enumeration, the type of the new project</p>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The following files are to be created:</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Project Folder
</td>
<td class="hdlist2">
<p>with name of project at given location</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Manifest
</td>
<td class="hdlist2">
<p>with default project structure and name</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Source Folder
</td>
<td class="hdlist2">
<p>default source folder (src)</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Output Folder
</td>
<td class="hdlist2">
<p>default source folder (src-gen)</p>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="sec:Empty_N4JS_File"><a class="anchor" href="#sec:Empty_N4JS_File"></a><a class="link" href="#sec:Empty_N4JS_File">4.2. Empty N4JS File</a></h3>
<div class="paragraph">
<p>The following information is to be specified by the user:</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Package Name
</td>
<td class="hdlist2">
<p>dot separated name of the package, empty by default (or set to the package/folder selected in the navigator)</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Module Name
</td>
<td class="hdlist2">
<p>string, name of the module – must be a valid module name without extension</p>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The following files are to be created:</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Package Folder(s)
</td>
<td class="hdlist2">
<p>if folders representing package structure do not exist, they are to be created</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Module File
</td>
<td class="hdlist2">
<p>empty file with name of module and extension <code>n4js</code> in the appropriate package folder</p>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="sec:Empty_JS_File"><a class="anchor" href="#sec:Empty_JS_File"></a><a class="link" href="#sec:Empty_JS_File">4.3. Empty JS File</a></h3>
<div class="paragraph">
<p>Similar to <a href="#sec:Empty_N4JS_File">Empty N4JS File</a> but with the file extension <code>js</code>.</p>
</div>
<div class="sect3">
<h4 id="sec:N4JS_Class_File_Wizard"><a class="anchor" href="#sec:N4JS_Class_File_Wizard"></a><a class="link" href="#sec:N4JS_Class_File_Wizard">4.3.1. N4JS Class Wizard</a></h4>
<div class="paragraph">
<p>It is recommended to define a single classifier in a file, the name of the classifier should have the same name as the file. Based on that assumption, file wizards are provided for N4JS classes, interfaces and enumerations.</p>
</div>
<div class="imageblock center">
<div class="content">
<img src="chapters/06_wizards/fig/newclasswizard.png" alt="newclasswizard">
</div>
</div>
</div>
<div class="sect3">
<h4 id="field-properties"><a class="anchor" href="#field-properties"></a><a class="link" href="#field-properties">4.3.2. Field Properties</a></h4>
<div class="paragraph">
<p><a id="Class_File_Wizard-Project_Field"></a> The New N4JS Class wizard offers following fields:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Project</dt>
<dd>
<p>Specifies the containing project.</p>
</dd>
</dl>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413a"></a><strong>Req. GH-1413a:</strong> <a href="#Req-GH-1413a">Project constraints</a> (ver. 1)</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Constraints
</td>
<td class="hdlist2">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>It is a path of a valid project in the current workspace</p>
</li>
<li>
<p>This field must not be empty</p>
</li>
</ol>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413b"></a><strong>Req. GH-1413b:</strong> <a href="#Req-GH-1413b">Project browse button</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Browse Button</dt>
<dd>
<p>Browsing only allows the selection of projects in the current workspace. Project creation is not possible.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413c"></a><strong>Req. GH-1413c:</strong> <a href="#Req-GH-1413c">Project initial selection inference</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Initial selection</dt>
<dd>
<p>The project should be derived from the initial selection.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413d"></a><strong>Req. GH-1413d:</strong> <a href="#Req-GH-1413d">Project content assist</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Content Assist</dt>
<dd>
<p>Workspace projects</p>
</dd>
</dl>
</div>
</div>
</div>
<div id="Class_File_Wizard-Source_Folder_Field" class="dlist">
<dl>
<dt class="hdlist1">Source folder</dt>
<dd>
<p>Specifies the containing source folder.</p>
</dd>
</dl>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413e"></a><strong>Req. GH-1413e:</strong> <a href="#Req-GH-1413e">Source folder constraints</a> (ver. 1)</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Constraints
</td>
<td class="hdlist2">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>The folder is listed as source folder in the project manifest</p>
</li>
<li>
<p>This field must not be empty.</p>
</li>
<li>
<p>The name is a valid path that means each segment of the path matches the following expression:</p>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-ebnf" data-lang="ebnf">[a-zA-z_](([\\.][a-zA-z_0-9\\-])|[a-zA-z_0-9\\-])*</code></pre>
</div>
</div>
</li>
</ol>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413f"></a><strong>Req. GH-1413f:</strong> <a href="#Req-GH-1413f">Source folder browse button</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Browse Button</dt>
<dd>
<p>Browsing only allows the selection of source folders in the selected project. The dialog should provide a list of all source folders of the selected project. This includes nested source folders. A list element is a relative path of a source folder in the project.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413g"></a><strong>Req. GH-1413g:</strong> <a href="#Req-GH-1413g">Source folder initial selection inference</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Initial selection</dt>
<dd>
<p>The source folder field should be derived from the initial selection</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413h"></a><strong>Req. GH-1413h:</strong> <a href="#Req-GH-1413h">Source folder content assist</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Content Assist</dt>
<dd>
<p>source folders defined by the project manifest</p>
</dd>
</dl>
</div>
</div>
</div>
<div id="Class_File_Wizard-Module_Specifier_Field" class="dlist">
<dl>
<dt class="hdlist1">Module specifier</dt>
<dd>
<p>Specifies the module specifier. May only specify a module container (a folder) but could also include module name. May also be an already existing module. Does not include the file extension.</p>
</dd>
</dl>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413i"></a><strong>Req. GH-1413i:</strong> <a href="#Req-GH-1413i">Module specifier constraints</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>The specifier is a valid module specifier that is
- Segments are separated by the path separator
- No separator at the beginning or end</p>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413j"></a><strong>Req. GH-1413j:</strong> <a href="#Req-GH-1413j">Module specifier completion</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>Manually inserting a specifier ending with a separator is valid.
It is then interpreted as base path for the full module specifier automatically completed by the class name. (cf. grey suffix)</p>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413k"></a><strong>Req. GH-1413k:</strong> <a href="#Req-GH-1413k">Module specifier grey suffix</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>A grey suffix should suggest the attached class name as module name if the specifier only specifies a base path.</p>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413l"></a><strong>Req. GH-1413l:</strong> <a href="#Req-GH-1413l">Module specifier browse button</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>Browsing only allows the selection of modules or module containers in the selected source folder. The browse dialog has to offer a module container creation functionality. In contrast to the other parts of the wizard, the creation of module containers in this dialog should be immediate and on file system level. This is important to comply with the conceptual model of eclipse and the operating system.</p>
</div>
<div class="paragraph">
<p>When inserting a non-existent path in the text input and opening the browse dialog, an additional dialog should ask the user whether he wants to create this structure on the file system. If he denies, the dialog shows the selection to the level it already exists on the file system.</p>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413m"></a><strong>Req. GH-1413m:</strong> <a href="#Req-GH-1413m">Module specifier initial selection inference</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>The module specifier should be derived from the initial selection by using the container of the selection as initial module container</p>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413n"></a><strong>Req. GH-1413n:</strong> <a href="#Req-GH-1413n">Module specifier content assist</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>Modules in the selected source folder</p>
</div>
</div>
</div>
<div class="paragraph todo">
<p>For now the spec doesn&#8217;t specify any constraints for module specifiers</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Class name</dt>
<dd>
<p>Specifies the class name.</p>
</dd>
</dl>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413o"></a><strong>Req. GH-1413o:</strong> <a href="#Req-GH-1413o">Class name basic constraints</a> (ver. 1)</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Constraints
</td>
<td class="hdlist2">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>The name is a valid n4js class identifier Must not be empty</p>
</li>
<li>
<p>If the target module already exists no other type with the same identifier may exist in this module</p>
</li>
</ol>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413p"></a><strong>Req. GH-1413p:</strong> <a href="#Req-GH-1413p">Class name conflict validation</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>If the target module already exists no other type with the same identifier may exist in this module</p>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413q"></a><strong>Req. GH-1413q:</strong> <a href="#Req-GH-1413q">File type options</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Definition file (.n4jsd)</dt>
<dd>
<p>Specifies whether the class should be declared external. This option changes the file extension to <code>n4jsd</code></p>
</dd>
</dl>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413r"></a><strong>Req. GH-1413r:</strong> <a href="#Req-GH-1413r">Access modifier constraints</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>Specifies the access modifiers of the class. One of <code>public</code>, <code>project</code>, <strong>private</strong>. <code>@Internal</code> is an additionally selectable option.</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Constraints
</td>
<td class="hdlist2">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>One of the provided access modifiers has to be selected</p>
</li>
<li>
<p>The <code>@Internal</code> option is only selectable in case of <code>public</code> or <code>project</code></p>
</li>
</ol>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Other modifiers</dt>
<dd>
<p>Specifies other modifiers and annotations of the class. The non-exclusive options are <code>@Final</code> and <strong>@N4JS</strong></p>
</dd>
</dl>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413s"></a><strong>Req. GH-1413s:</strong> <a href="#Req-GH-1413s">Other modifiers constraints</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Constraints</dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p><strong>@N4JS</strong> annotation is only enabled and selectable if the Definition File box is checked</p>
</li>
</ol>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Super class</dt>
<dd>
<p>Specifies the super class</p>
</dd>
</dl>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413t"></a><strong>Req. GH-1413t:</strong> <a href="#Req-GH-1413t">Super class constraints</a> (ver. 1)</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Constraints
</td>
<td class="hdlist2">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>A valid absolute class specifier that is a module specifier and a class name separated by a dot.</p>
</li>
</ol>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413u"></a><strong>Req. GH-1413u:</strong> <a href="#Req-GH-1413u">Super class browse button</a> (ver. 1)</p>
</div>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Browse Button
</td>
<td class="hdlist2">
<p>Browsing allows the selection of all classes in the current workspace with modifiable source and visible classes with unmodifiable sources.</p>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413v"></a><strong>Req. GH-1413v:</strong> <a href="#Req-GH-1413v">Super class content assist</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Content Assist</dt>
<dd>
<p>All classes matching mentioned criteria</p>
</dd>
</dl>
</div>
</div>
</div>
<div id="Class_File_Wizard-Interfaces_Field" class="dlist">
<dl>
<dt class="hdlist1">Interfaces</dt>
<dd>
<p>Specifies the implemented interfaces of the class</p>
</dd>
</dl>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413w"></a><strong>Req. GH-1413w:</strong> <a href="#Req-GH-1413w">Interfaces constraints</a> (ver. 1)</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>A valid absolute interface specifier that is a module specifier and an interface name separated by a dot.</p>
</li>
</ol>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413x"></a><strong>Req. GH-1413x:</strong> <a href="#Req-GH-1413x">Interfaces browsing</a> (ver. 1)</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Add Button</dt>
<dd>
<p>Browsing allows the selection of all interfaces in the current workspace with modifiable source and visible interfaces with unmodifiable sources.</p>
</dd>
<dt class="hdlist1">Remove Button</dt>
<dd>
<p>Removes the selected interface from the list. Disabled if nothing is selected.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413y"></a><strong>Req. GH-1413y:</strong> <a href="#Req-GH-1413y">Interfaces content assist</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>Text input is available by clicking in empty space at the end of the list. Content Assist provides all interfaces matching mentioned criteria.</p>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413z1"></a><strong>Req. GH-1413z1:</strong> <a href="#Req-GH-1413z1">Create method stubs</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>Specifies if the wizard should generate method stubs for all abstract methods of the newly generated class. That are abstract super class methods or methods that need to be implemented by the class to conform to the selected interfaces.</p>
</div>
</div>
</div>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413z2"></a><strong>Req. GH-1413z2:</strong> <a href="#Req-GH-1413z2">Create method stub conflict detection</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>If the selected interfaces are impossible to implement (e.g. method name overlap with unrelated parameter types) this option needs to be disabled and a warning needs to be shown.</p>
</div>
</div>
</div>
<div class="paragraph todo">
<p>Shouldn&#8217;t this be a constraint of the selected interfaces? (Never generate invalid code)</p>
</div>
</div>
<div class="sect3">
<h4 id="visibility-issues-or-final-super-classes"><a class="anchor" href="#visibility-issues-or-final-super-classes"></a><a class="link" href="#visibility-issues-or-final-super-classes">4.3.3. Visibility issues or <code>@Final</code> super classes</a></h4>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413z3"></a><strong>Req. GH-1413z3:</strong> <a href="#Req-GH-1413z3">Visibility issue conflict solving</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>By allowing the user to select invisible interfaces and super classes or unextendable <code>@Final</code>-annotated super classes, accessability issues may come up. The goal is to never generate a file containing invalid code. To accomplish this, conflicts must get solved before the file is generated.</p>
</div>
<div class="paragraph">
<p>The slight limitation of the selection of interfaces and classes to elements from modifiable sources (cf. <a href="#Req-GH-1413u">super class browse button</a>) allows to solve all possibly occurring visibility issues.</p>
</div>
<div class="paragraph">
<p>If the modifications by finishing the wizard do imply changes different from insertions and creations, a compare view is to be shown, giving the user an overview of the needed changes before they’re applied.</p>
</div>
</div>
</div>
</div>
<div class="sect3">
<h4 id="generation-1"><a class="anchor" href="#generation-1"></a><a class="link" href="#generation-1">4.3.4. Generation</a></h4>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413z4"></a><strong>Req. GH-1413z4:</strong> <a href="#Req-GH-1413z4">Wizard generation</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>The following changes are to be made by the wizard:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Create a new file containing the new class (optional)</p>
</li>
<li>
<p>Insert the new class into the specified module</p>
</li>
<li>
<p>Change the source module of the super class to fix possible visibility issues (optional)</p>
</li>
<li>
<p>Change the source module of the interfaces to fix possible visibility issues (optional)</p>
</li>
<li>
<p>Change the project manifest to add a new source folder (optional) or add new project dependencies (optional)</p>
</li>
</ol>
</div>
</div>
</div>
</div>
<div class="sect3">
<h4 id="preview-1"><a class="anchor" href="#preview-1"></a><a class="link" href="#preview-1">4.3.5. Preview</a></h4>
<div class="openblock requirement">
<div class="content">
<div class="paragraph">
<p><a id="Req-GH-1413z5"></a><strong>Req. GH-1413z5:</strong> <a href="#Req-GH-1413z5">Generation preview</a> (ver. 1)</p>
</div>
<div class="paragraph">
<p>On the right of the wizard form a preview window should be provided. It should preview the full path of the generated file and all code that is generated with the options of the wizard. Changes should be updated in realtime as the user is choosing different options.</p>
</div>
</div>
</div>
</div>
</div>
<div class="sect2">
<h3 id="sec:N4JS_Interface_Wizard"><a class="anchor" href="#sec:N4JS_Interface_Wizard"></a><a class="link" href="#sec:N4JS_Interface_Wizard">4.4. Interface Wizard</a></h3>
<div class="paragraph">
<p>The N4JS interface wizards is strongly similar to the <a href="#sec:N4JS_Class_File_Wizard">N4JS Class Wizard</a>. The following paragraph is meant to state the differences and will strongly refer to the N4JS Class Wizard as a lot of properties stay the same.</p>
</div>
<div class="imageblock center">
<div class="content">
<img src="chapters/06_wizards/fig/newinterfacewizard.png" alt="newinterfacewizard">
</div>
</div>
<div class="sect3">
<h4 id="field-properties-1"><a class="anchor" href="#field-properties-1"></a><a class="link" href="#field-properties-1">4.4.1. Field Properties</a></h4>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Project
</td>
<td class="hdlist2">
<p>Specifies the containing project.
See <a href="#Class_File_Wizard-Project_Field">N4JS Class Wizard Project</a>.</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Source Folder
</td>
<td class="hdlist2">
<p>Specifies the containing source folder.<br>
See <a href="#Class_File_Wizard-Source_Folder_Field">N4JS Class Wizard Source Folder</a></p>
</td>
</tr>
<tr>
<td class="hdlist1">
Module Specifier
</td>
<td class="hdlist2">
<p>Specifies the containing source folder.<br>
See <a href="#Class_File_Wizard-Module_Specifier_Field">N4JS Class Wizard Module specifier</a></p>
</td>
</tr>
<tr>
<td class="hdlist1">
Interface name
</td>
<td class="hdlist2">
<p>Specifies the name of the interface<br></p>
<div class="dlist">
<dl>
<dt class="hdlist1">Constraints</dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>The name is a valid n4js interface identifier</p>
</li>
<li>
<p>Must not be empty</p>
</li>
<li>
<p>If the target module already exists, no other type with the same identifier may exist in this module</p>
</li>
</ol>
</div>
</dd>
</dl>
</div>
</td>
</tr>
<tr>
<td class="hdlist1">
Definition file (.n4jsd)
</td>
<td class="hdlist2">
<p>Specifies whether the interface should be declared external. This option changes the file extension to <code>n4jsd</code> .</p>
</td>
</tr>
<tr>
<td class="hdlist1">
Access Modifiers
</td>
<td class="hdlist2">
<p>Specifies the interface’s access modifiers</p>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>See <a href="#Req-GH-1413r">N4JS Class Wizard Modifier Field</a> except for the following point:</p>
</div>
<div class="paragraph">
<p><em>Other than classes, interfaces must not be declared as <code>@Final</code>, therefore this option is removed.</em></p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Interfaces</dt>
<dd>
<p>The interfaces the interface is implementing</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>See <a href="#Class_File_Wizard-Interfaces_Field">N4JS Class Wizard Interfaces field</a> except for the following point:</p>
</div>
<div class="paragraph">
<p><em>Other than classes interfaces must not be declared as <code>@Final</code>, therefore this option is removed.</em></p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Create method stubs</dt>
<dd>
<p>Specifies if the wizard should generate method stubs for all abstract methods of the newly generated class. That are abstract super interface methods or methods that need to be implemented by the interface to conform to the given interfaces.</p>
<div class="paragraph">
<p>If the selected interfaces are impossible to implement (e.g. method name overlap with unrelated parameter types) this option needs to be disabled and a warning needs to be shown.</p>
</div>
</dd>
</dl>
</div>
<div class="paragraph todo">
<p>Shouldn&#8217;t this be a constraint of the selected interfaces? (Never generate invalid code)</p>
</div>
</div>
<div class="sect3">
<h4 id="visibility-issues"><a class="anchor" href="#visibility-issues"></a><a class="link" href="#visibility-issues">4.4.2. Visibility Issues</a></h4>
<div class="paragraph">
<p>As the user might select invisible interfaces, the wizard has to solve these visibility issues. See ** for details.</p>
</div>
</div>
<div class="sect3">
<h4 id="import-naming-conflicts"><a class="anchor" href="#import-naming-conflicts"></a><a class="link" href="#import-naming-conflicts">4.4.3. Import naming conflicts</a></h4>
<div class="paragraph">
<p>As the user may select identically named interfaces, the wizard has to solve these naming conflicts. See
<strong><a href="#Req-GH-1413z3">Class Wizard Visibility Issues</a></strong> for details.</p>
</div>
</div>
<div class="sect3">
<h4 id="generation-2"><a class="anchor" href="#generation-2"></a><a class="link" href="#generation-2">4.4.4. Generation</a></h4>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Create a new file at the given module specifier location (optional)</p>
</li>
<li>
<p>Insert the new interface into the specified module</p>
</li>
<li>
<p>Change the source module of the super class to fix visibility issues (optional)</p>
</li>
<li>
<p>Change the source module of the interfaces to fix possible visibility issues (optional)</p>
</li>
<li>
<p>Change the project manifest to add a possibly new source folder (optional) or add new project dependencies (optional)</p>
</li>
</ol>
</div>
</div>
<div class="sect3">
<h4 id="preview-2"><a class="anchor" href="#preview-2"></a><a class="link" href="#preview-2">4.4.5. Preview</a></h4>
<div class="paragraph">
<p>The Interface Wizard should provided a preview. (See <a href="#sec:N4JS_Wizards:Wizard_Preview">Wizard Preview</a>)</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="sec:N4JS_Enum_File_Wizard"><a class="anchor" href="#sec:N4JS_Enum_File_Wizard"></a><a class="link" href="#sec:N4JS_Enum_File_Wizard">4.5. Enum Wizard</a></h3>
<div class="paragraph">
<p>The N4JS Enum File wizards provides the user a wizard to create enums. When speaking of enums in this context ordinary enums as specified in the N4JS Specification are meant.</p>
</div>
<div class="sect3">
<h4 id="field-properties-2"><a class="anchor" href="#field-properties-2"></a><a class="link" href="#field-properties-2">4.5.1. Field Properties</a></h4>
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
Project
</td>
<td class="hdlist2">
<p>Specifies the containing project.<br>
See <a href="#Class_File_Wizard-Project_Field">N4JS Class Wizard Project</a></p>
</td>
</tr>
<tr>
<td class="hdlist1">
Source Folder
</td>
<td class="hdlist2">
<p> Specifies the containing source folder.<br>
See <a href="#Class_File_Wizard-Source_Folder_Field">N4JS Class Wizard Source Folder</a></p>
</td>
</tr>
<tr>
<td class="hdlist1">
Module Specifier
</td>
<td class="hdlist2">
<p>Specifies the containing source folder. See <a href="#Class_File_Wizard-Module_Specifier_Field">N4JS Class Wizard Module specifier</a></p>
</td>
</tr>
<tr>
<td class="hdlist1">
Enum name
</td>
<td class="hdlist2">
<p>Specifies the name of the interface<br></p>
<div class="dlist">
<dl>
<dt class="hdlist1">Constraints</dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>The name is a valid n4js enum identifier</p>
</li>
<li>
<p>Must not be empty</p>
</li>
<li>
<p>If the target module already exists, no other type with the same identifier may exist in this module</p>
</li>
</ol>
</div>
</dd>
</dl>
</div>
</td>
</tr>
<tr>
<td class="hdlist1">
Modifiers
</td>
<td class="hdlist2">
<p>Specifies the interface’s access modifiers
+
Allows the user to select from following modifier options: <code>public</code>,<code>project</code>,<code>private</code>. The wizard automatically adds missing <code>export</code> if needed.
+
Furthermore the enum can be declared <code>@Internal</code> using a checkbox.</p>
</td>
</tr>
</table>
</div>
<div class="paragraph todo">
<p>Should the enum wizard also provide functionality to create enum literals?</p>
</div>
</div>
<div class="sect3">
<h4 id="generation-3"><a class="anchor" href="#generation-3"></a><a class="link" href="#generation-3">4.5.2. Generation</a></h4>
<div class="paragraph">
<p>The following changes are to be made by the wizard:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Create a new file containing the new enum (optional, only if module doesn’t exists yet )</p>
</li>
<li>
<p>Insert the new enum into the specified module</p>
</li>
</ol>
</div>
</div>
<div class="sect3">
<h4 id="preview-3"><a class="anchor" href="#preview-3"></a><a class="link" href="#preview-3">4.5.3. Preview</a></h4>
<div class="paragraph">
<p>The Enum Wizard should provided a preview. (See <a href="#sec:N4JS_Wizards:Wizard_Preview">Wizard Preview</a>)</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Version 0.9<br>
Last updated 2019-08-08 13:15:33 CEST
</div>
</div>
<!-- ************* docinfo-footer *************************************************************** -->
<div class="Grid social" style="color:#d5dfea">
<div class="Cell Cell--2-12 m-Cell--withMargin">
<h2>Quick Links</h2>
<ul>
<li><a href="../downloads.html">Download</a></li>
<li><a href="../userguides/index.html">Documentation</a></li>
<li><a href="https://github.com/eclipse/n4js/">Source</a></li>
<li><a href="https://github.com/eclipse/n4js/issues">Issues</a></li>
</ul>
</div>
<div class="Cell Cell--2-12 m-Cell--withMargin">
<br/><br/>
<ul>
<li><a href="https://www.eclipse.org/forums/index.php/f/365/">Forum</a></li>
<li><a href="http://n4js.blogspot.de/">Blog</a></li>
<li><a href="https://dev.eclipse.org/mailman/listinfo/n4js-dev">Mailing List</a></li>
<li><a href="https://projects.eclipse.org/projects/technology.n4js">Eclipse Project Page</a></li>
<li><a href="https://twitter.com/n4jsdev">Tweets by n4jsdev</a></li>
</ul>
</div>
<div class="Cell Cell--2-12 m-Cell--withMargin">
<br/><br/>
<ul>
<li><a href="http://www.eclipse.org/">Eclipse Home</a></li>
<li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
<li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
<li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
<li><a href="http://www.eclipse.org/legal/">Legal</a></li>
</ul>
</div>
<div style="clear: both; height: 0; overflow: hidden;"></div>
</div>
<!-- ************* UI Scripts ************* -->
<script type="text/javascript" src="scripts/back-to-top.js"></script>
<script type="text/javascript" src="scripts/treeview.js"></script>
<script type="text/javascript" src="scripts/toc.js"></script>
<!-- ************* Prism.js Syntax Highlighting ************* -->
<script src="scripts/prism.js"></script>
<script type="text/javascript">
// Add the 'toclist' id for search function
$(".toc2 > ul").attr('id', 'toclist');
// Generate a Search input form
$("#toclist > li:first-of-type").before('<input type="text" id="pagesearch" onkeyup="search()" placeholder="Search for section...">');
$("#toclist > li:first-of-type").before('<i id="clear" class="fa fa-times-circle-o"></i>');
$("#clear").click(function(){
$("#pagesearch").val('');
search();
$('.toc2 > ul').treeView('collapseAll');
});
// intialize Treeview.js
$(".toc2 > ul").treeView();
// Initialize Scrollspy
</script>
<!-- ************* docinfo-footer *************************************************************** -->
</body>
</html>