Roku SDK Documentation : Roku Plugin for Eclipse IDE

Table of Contents



Overview of the Roku Plug-In

The Roku plug-in for Eclipse gives you the power to quickly create your channel and deploy it to a device for testing. The Roku plug-in for the Eclipse IDE offers channel development in BrightScript, including the customizations needed to develop, test, package, and install channels on Roku devices. Key features are code highlighting and completion, a debug console, and a documentation generator. Development of XML files for your channel and the SceneGraph APIs are also supported.

Building channel applications requires several items to work together in unison:

  • A Roku device
  • Your channel application
  • Hosted media content (video, audio, games, etc.)

Sample screen

Key features

Key features are code highlighting and completion, a debug console, and a documentation generator.

Code highlight and syntax coloring

 

Find errors

Quickly find errors in your channel application with the built-in color coding for BrightScript and Roku SceneGraph syntax.

Code completion and hints

The plug-in checks the reference guides for BrightScript and Roku SceneGraph, allowing for auto completion and details for parameters, methods, and nodes.

 

Built-in telnet console for BrightScript and SceneGraph

All the available Roku device telnet ports are built into the plug-in, allowing for fast feedback on bugs, stack traces, and break points in your channel application.

 

Installation Steps

Workspace: We encourage you to start your Roku projects in a fresh workspace. You can copy your projects back in afterwards.

Installing the plug-in

Perform the following steps:

  1. Download Java version 8: oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
  2. Download the latest version of the Eclipse Installer (current version “Photon) for Java IDE Developers: https://www.eclipse.org/downloads/
  3. Add the Roku Plugin package via Eclipse > Help > Install New Software > Add...

Updating the plug-in

Add the Roku Plugin package using this path: Eclipse > Help > Install New Software > Add...

    • Name: Roku Plugin
    • Location: https://devtools.web.roku.com/ide/eclipse/plugin
    • Follow the instructions and click Next.
    • You will receive a message saying that "'BrightScript Core'" is already installed, so an update will be performed instead." Click Finish.
    • Restart Eclipse.

Usage

Creating a new BrightScript project

Quickly have all required assets and files setup through Eclipse. In addition, reference sample channels are provided in a simple drop down for testing. The manifest, components, source, images, locale, and related directories are handled instantly.

Installing and packaging channel applications

Using the standard export option for projects, the Roku plug-in for Eclipse enables developers to install their current channel code onto Roku devices within seconds. In addition, developers can package and key their applications for preparing the Channel Store required assets.

Generating Documentation

Like many other development environments, the BrightScript Eclipse plug-in can produce in-line documentation through the simple use of special tags in source code comments.  An example of the kind of hover help documentation that can be generated is shown below.

The complete specification and comment syntax for the documentation generation system, called BrightScriptDoc, can be found here

Release Notes

4/10/2012

Summary:

This release concentrated on improvements to several areas of the plug-in, 
including but not limited to:
a) Any known bugs that could cause hangs or visible stacktraces in the error log
b) Roku box discovery (SSDP)
c) The Debug Console
d) The BrightScript language parser
e) User preferences
f) Logging
g) Manifest editing and validation

The first 4 items (a-d) above were top priorities given potential impact to the usability of the plug-in.
The remaining items were addressed to improve the overall user experience.

Both (b) and (c) are of particular note, since many of the issues reported on the Eclipse plug-in thread have to do with the usability
and accuracy of the Roku boxes IP address drop-down list in the Debug Console.

(g) Manifest editing and validation - is also something worth checking out. 
The manifest file now has an associated multipage editor, which adds a form-based validating editor for the manifest, which synchronizes with the
pre-existing text editor. Errors and warnings related to the manifest are a bit more clearly marked in the form-based editor page, and total known manifest property names are clearly shown. Note that eventually, the form fields will be enhanced with hover-help text derived from the SDK documentation, to further assist new developers in understanding the manifest contents. Also in the form editor are project browse buttons/dialogs for each of the icon file attributes. The dialogs show a treeview of the relevent project directories and files for icon selection. Only *.jpg and *.png files (and the folders in the project that hold them) are shown, making it easier to ensure the icon file path names in the manifest are correct. Verification of the icon file paths (along with all the other manifest validation checks) is also performed as part of the manifest validation process, which happens both in the editor and in the project builder using code that is now common to both areas.


Aside from these areas, the following enhancements are small but significant:

a) Add the error log view to the BrightScript perspective
Adding the error log to the BrightScript perspective should improve reporting of errors by the developer community
in both speed and accuracy, since most coding (not related to design or lack of feature) bugs should show up in some way in the error log.
Logging, in general, was overhauled and specific message's log-levels and log-level user preferences and defaults were adjusted to ensure the error log
is not filled up with debug and trace level messages by default, making the perspective-default exposure of the error log view practical at least as it relates to the BrightScript plug-in.


b) Installation - add dependency update sites to plug-in feature manifest
By adding the dependency update sites to the feature manifest, the additional update sites get added to the user's update sites list automatically the first time the Roku update site gets added manually by the user.

Note however, those added sites are not enabled by default, so the user must still manually enable them before attempting the plug-in install. 
This change slightly speeds up and reduces errors in the initial install process, since the user no longer needs to type in the URL and label of the additional dependency update sites (DLTK and EMF) - they just need to enable them once the Roku update site has been manually added and enabled.

Bugfixes:

  • File->Export->BrightScript->BrightScript Deployment non-response/null pointer
  • IDE hangs on startup when Project Explorer is open and 1 or more open BrightScript projects
  • Manifest is overwritten with plugin default when importing project files from another location
  • Telnet window IP address drop-down is spastic
  • Default values for code and comment folding prevent folding from working out of the box
  • Dropdown list of rokus for the console has items truncated
  • SSDP unicast response not seen in response to SSDP SEARCH query
  • Language parser - Add positive and negative test cases for BrightScript language parser module
  • Language parser - "REM" comment keyword embedded in sub or function name causes odd parser issues
  • Language parser - incorrectly marks syntax errors when parens and brackets are adjacent
  • Language parser - Reserved/key words that are also component method names are incorrectly flagged as syntax errors
  • Language parser doesn't know about the "?" shortcut for print
  • Syntax highlighter and language parser don't know about the "Library" keyword and syntax
  • Syntax highlighting is incorrect when string "REM" is encountered anywhere in a line
  • Code folding - Stacktrace in code folding routine
  • Todo tasks - Nullpointer exception when activating the todo task preference page

 

Bugs determined to be Eclipse issues that can't be worked-around in code:

  • Uninstalling plugin leaves behind old <BrightScript> perspective in menu

Enhancements:

  • Add plugin-level framework for user selectable preferences for log level by feature group
  • Add the error log view to the BrightScript perspective
  • Add user selectable preferences for Discover (SSDP) - logging, time-out, etc.
  • Add user selectable preferences for Debug Console - color, connect timeout, etc.
  • Create a custom Roku manifest editor

Installation - add dependency update sites to plugin feature manifest

9/10/2012

A major new feature set supporting channel localization was added in this release.  See the enhancements section below for a list of localization related features. 

Some additional notes about the new channel localization support:

  • Many of these localization features have associated user preferences pages (Windows->Preferences->BrightScript->Localization). 
  • Each of the web translation services mentioned below also has its own separate user preferences page under the main localization page. 
  • A new context (aka popup) sub-menu for localization actions has been added and is available for any item in a BrightScript project. 
  • The localization context menu action taken will depend on the location of the file or directory selected:  Any item selected inside a specific locale's folder (including the folder itself) will cause that action to happen just for that locale.  Any item selected elsewhere in a BrightScript project will cause the action to happen for all locales folders already created within the project.  Any locale folders that do not correspond to a currently supported locale will be ignored.

Additionally, this release focused on bugfixes and enhancements for several existing areas:

  1. Language Parser
  2. Debug console
  3. Manifest

BUGFIXES:

 

  • Project templates should compile and run without errors
  • Debug Console - Heap OutOfMemoryError occurs if console accumulates enough output
  • Editor - Change of syntax color does not apply to already open editors
  • Language Parser - "Stop" cannot be used as a method name of a component       
  • Language Parser - Allow no-argument Print statements   
  • Language Parser - Allow paren'd sub-expressions in compound (dot) expressions              
  • Language Parser - Allow reserved words as keys in associative arrays
  • Language Parser - Empty For loops cause syntax error      
  • Language Parser - Empty If or Else blocks not allowed (when Else is present)         
  • Language Parser - Empty While loops cause syntax error                 
  • Language Parser - expression processing broken when functions are mixed with operator based expressions on the same line       
  • Language Parser - Mod operator keyword is not recognized          
  • Language Parser - NULL cannot be used as variable name               
  • Language Parser - The String(n As Integer, character As String) and Stringi methods aren't recognized       
  • Language Parser - undocumented endfor and endwhile cause syntax errors        
  • Language parser and Syntax highlighter don't know about the "Library" keyword and syntax         
  • Manifest Editor - Do not flag icon and splash values as warning or errors for screensavers               
  • Manifest Editor - entries representing binary items set to true/false but should instead set to 1/0           

ENHANCEMENTS:  

  • Localization - Add auto-generation of translations.xml file source tags from scanning brs files for tr calls   
  • Localization - add localization checking to the BrightScript builder                
  • Localization - Add locale selection options to "new project" wizard that will automatically build directories and files to support a localized channel for 1 or more of the currently supported locales
  • Localization - add localization support to the manifest editor         
  • Localization - Add context menu items and new project wizard support for auto-translation of locale manifest entries: title, subtitle, and screensaver_title
  • Localization - Add context menu options for import and export of translations to/from TMX format           
  • Localization - Add support for machine translation calls to web-based translation services (general support)
  • Localization - Add support for machine translation calls to web-based translation service google translate               
  • Localization - Add support for machine translation calls to web-based translation service microsoft translator (aka bing translate)     
  • Localization - Add support for machine translation calls to web-based translation service mymemory.translated.net                                   
  • Localization - add syntax parsing and colorization support for new localization functions (tr, GetLocalizedAsset, GetPluralString)                  
  • Debug Console - Add "Roku IP" label for ip selection drop-down                 
  • Debug Console - Add a connect/disconnect toggle button to console toolbar          
  • Language Parser - Reparse source files for syntax checking as user types (delayed action)            
  • Manifest Editor - Add splash screen manifest settings support     
  • Manifest Editor - Allow unknown (to parser) user-entered props in text tab to be persistent between transitions to/from overview tab      
  • Manifest Editor - display description from docs in tooltip for for each manifest var in overview form       

12/17/2012

This release focused primarily on adding support for editor code folding, improved language parsing, and laying the foundation of a type system.

The new Code folding features include new user preference settings and editor support for subs, function, loops, and if blocks.

While not listed below, one of the first visible benefits of the type system foundation is an initial improvement in the code assist and inline documentation display features.
While the code editor has focus, hitting CTRL-Space will invoke the code assist window, which now includes in the list all global functions (in addition to the previous list of language keywords)
along with the documentation window containing documentation for the currently selected global function. 
(Note that currently code assist intentionally does not respond while in the middle of a "dot expression" - this feature will be added in the next release in order to support code assist and docs display for 
components, interfaces, and events).


Bugfixes:

Export Wizard - Very first run of export wizard after first plugin installation does not autofill the zipfile name
Export Wizard - Top level locale folder not auto-selected when exporting a project
Language Parser - a variable reference standing alone by itself outside of any valid statement is not flagged as a error
Language Parser - Empty For loops cause syntax error
Language Parser - Empty While loops cause syntax error
Localization - Update translations context menu option fails with stacktrace
New Project Wizard - Error when selecting locales

Enhancements:

Code Folding - Add support for associative arrays and ordinary arrays
Code Folding - Add support for For Loops
Code Folding - Add support for if/then/else blocks
Code Folding - Add support for Subs and Functions
Code Folding - Add support for While Loops
Editor - Make double-click only select the surrounding brightscript word, not the locale language word
Export Wizard - Add persistent checkbox for zip file overwrite response
Export Wizard - Remember per-project user selected dirs and files between export runs
Language Parser - BrightScript language parser should recover at least at beginning of new sub or function

5/16/2013

While there where several unrelated bugfixes and new features, this release focused primarily on finishing the foundation of the type system and improving other feature groups that benefit from the expanded type system.

The type system is the basis of other feature groups including autocompletion (code assist), hover docs, and various type-related parse and build-time checks.

The type system had previously provided the knowledge of BrightScript global functions, but has been expanded to include Components, Interfaces, Events, and each of their associated functions and subs. The embedded docs (used in hover and autocompletion) for each of these items are a work-in-progress and will be improved over the next few releases.

Autocompletion is now invoked automatically after a short delay in typing (user preference, defaults to 200ms), when the last character typed is a dot ("."). The manual invocation of autocompletion at any point is still available via CTRL-Space. The relevant type system additions (interfaces, functions/subs) now show up in the autocompletion suggestions list window, along with their docs in the associated docs window. Additionally, the suggestions list includes variables defined in the current function/sub, including associative array member variables.

Hover docs - A documentation window will display when you hover the cursor over most variables function/sub calls, interface references, etc.... Note: there are several known bugs related to the new type system that sometimes prevent this from happening.

The docs processing has been improved with added support for annotation tags, similar to the docs annotation systems used by other languages (e.g. javadocs, doxygen, etc). 
Both the built-in type system and user code (i.e. functions/subs and variables) will be able to use these tags. More details on this topic in the coming releases as specifics are finalized.

The Debug console usability has been improved in a few ways. The long-standing cursor positioning bug has been fixed - the cursor should now be automatically and correctly shown at the end of the console output. The left arrow is also now prevented from moving into the prompt and output areas, although you may still manually place the cursor there for cut/paste purposes.

The Debug console now includes simple command history support. The up and down arrows move thru the command history stack. User-preferences for the command history size (defaults to 1000) and whether or not to persist across sessions (defaults to false) have been added.

Task tags are now working as expected.


Bugfixes:

Code folding - "initially folding" options are ignored
Autocompletion - does not recognize interface names in already typed dot expression
Autocompletion - fails when item to be completed is the last line (or part of last statement) of a function/sub
Autocompletion - suggestions list does not include interface names
Debug Console - Cursor incorrectly is always at the beginning of the line
Language Parser - GetGlobalAA global function missing from parser grammar
Language Parser - Some global function calls cause editor open failure with nullpointerexception
Selection Engine - Highlighting a function reference and then selecting Show in-> Outline View does not do anything
Selection Engine - Open Declaration does not do anything
TODO tasks don't show up in the Task view
Type system - Erroneous type func/sub call error - says func/sub must be disambiguated by interface name, when the name matches but not the signatures do not
Type System - Non-Windows platforms get stacktrace (NullPointerException) when attempting to open BrightScript source editor

Enhancements:

Debug Console - Add support for command history recall
Docs system - Add support for docs annotation tags to improve help display
Editor - Add line number display to left-hand margin
Export Wizard - Improve error handling and error message for failed connections and provide exposed user preferences for each type of connection
Language Parser - Add context-specific, fine-grained error recovery to parser
Language parser - Add syntax checking, code completion, and help support for all pre-defined components
Language parser - add type inference system to support type-related parse and build-time error checking and warning generation
New Resource Wizards - Add a "New BrightScript File" wizard and menu entry
Type System - Add a user preference to determine whether or not to perform type related warning/error checks

6/27/2013

This release addresses various bug fixes in the plugin.

Bugfixes:
Type System - use of ifAssociativeArray and ifEnum methods in any return expression beginning with m. cause all .brs source editors in a project to fail
Type System - partial addition to support tracking specific event types expected on specific roMessagePort instances
Export to BrightScript errors before IP field entry is complete
Docs system - hypertext links embedded in the documentation html will not respond to clicks
Docs system - Add support for docs window toolbar buttons: forward, backward, open declaration
Docs system - Add support for field comments on same line
Search - References searching doesn't return any results

9/30/2013

This release is a large update containing bugfixes and enhancements for the communications sub-system, type sub-system, language parser, and export wizard.

Support for the new developer mode username/password authentication is in place, but is not used unless a given Roku box requires it ( i.e. firmware 5.2 or later ).

It is important to note that the plugin now requires Eclipse to be running under Java 1.7 or higher. If Eclipse's Java version is lower than 1.7, the plugin will be disabled.
Non-compliance with the Java version requirement does not prevent plugin installation or Eclipse startup, but will result in no BrightScript plugin features being visible, including the BrightScript perspective.
If you require an older version of Java as your machine default, you may still point any Eclipse instance to a different Java installation, by using the -vm argument in the eclipse.ini file (see Eclipse's help for details).

Enhancements:
Comms - 5.2 Firmware Requires Username and Password for all to-box HTTP communications
Comms - Adjustments to socket timeouts and enhanced language for adjusting the values
Export wizard - Add user option for per-project auto-increment version number in manifest for each run
Export Wizard - Automatically refresh project explorer after zipfile creation and package file creation
Export Wizard - Use ECP to send "Home" keypress prior to start of sideload/package operation to prevent unnecessary timeouts and related errors
Type system - Change single-valued type system to multi-valued type system with distinct single declared and multiple possibles

Bugfixes:
Plugin dependencies - Change Java minimum requirement to 1.7 to avoid Java memory management bug
Export Wizard - IP addresses typed in manually (or an empty address) are not checked for validity before attempting HTTP operations
Export Wizard - Nullpointer exception and partial localization checks failure if 1 or more locale subfolders does not exactly name match one of the supported locales
Export Wizard - Manually entered Roku Box IP addresses aren't persistent in either Export wizard or Debug console
Export Wizard - Unexpected error while retrieving package file
Language Parser - Add Function as a valid explicit parameter and return type
Language Parser - Anonymous Functions with empty bodies cause NullpointerException during parsing, causing source files to not open in BrightScript editor
Type System - Several type-related checks ignore user preference "perform type checks"
Type System - AA var returned from func/sub calls don't contain their members
Type System - Known callers check returns a false positive when all callers are associative arrays
Type System - Return type check incorrectly sets return type to void if type of return expression is unknown
Type System - Use of ifAssociativeArray and ifEnum methods in any return expression beginning with m. cause all .brs source editors in a project to fail

11/12/2013

This is a minor release containing bug fixes.  The build number is 1.0.0.20131029810

Note

It is important to note that the plugin now requires Eclipse to be running under Java 1.7 or higher. If Eclipse's Java version is lower than 1.7, the plugin will be disabled.
Non-compliance with the Java version requirement does not prevent plugin installation or Eclipse startup, but will result in no BrightScript plugin features being visible, including the BrightScript perspective.
If you require an older version of Java as your machine default, you may still point any Eclipse instance to a different Java installation, by using the -vm argument in the eclipse.ini file (see Eclipse's help for details).

Enhancements:
- Export Wizard - Added option to automatically open and connect a debug console upon successful install
- Code Folding - Added support for anonymous functions 

Bugfixes:
- Bug fixes to correct exceptions and errors in SSDP discovery routines
- Export Wizard - Corrects issue of zip and pkg files saved in "out" dir first time, but root dir all subsequent times
- Export Wizard - Corrects issue where current package field is not populated even if there is a current package

1/7/2014

This is a minor release containing bug fixes.  The build number is 1.0.0.201312101034

Bugfixes:
- Minor bug fixes for BrightScript Doc parser

6/27/2014

This is a large release containing a number of enhancements.  The build number is 1.0.0.201406201331.

Enhancements:

The Deployment preferences screen now let's you select file extensions of files to include in the channel deployment by default.

Added hyperlinking for error code/text in debugger output to a browser window for expanded help text about error.

Some updates to the documentation generator.

Added the ability for developers to create their own Eclipse code templates.  Go to Preferences | Editor | Templates and create a new code template.  These templates can then be inserted into your code by typing the template name followed by the autocompletion keystroke ctrl-space.

Sync source code editor window with debug console output via custom hyper-links for debugger references to source files/line numbers.

Set initial default value of auto-increment manifest version to "Build".

Added support for pkg:/ prefixed files with autocompletion.

Added toolbar item and shortcut keystroke for running previous export without dialog.  On Windows & Linux:  CTRL-ALT-E On OSX: COMMAND-OPTION-E.

Added a user pref for timeout value for manually entered IP addresses to the Preferences | Discovery wizard screen.

Added support for infinite timeout on manually entered IP addresses (by setting the IP address timeout described above to 0)and allow for manual removal of IPs from list.

Changed developer password field from regular textbox to password style.

7/26/2018

This is a large release containing a number of enhancements. The build number is 1.3.

SUMMARY

This release includes several key features, including the built-in web tools shortcuts and the addition of a static code analyzer.

ENHANCEMENTS:

Web tools shortcuts

New menu bar menu "Roku" shows all available Roku tools, either Web or built into Eclipse plug-in for quicker access.

There are new section Web tools that link to existing Web tools:

  • Deeplink
  • Remote
  • Stream tester
  • Code Profiler

Static Code Analyzer

You can test your channel on possible certification rules from your IDE. Right click on your project and select Analyze Project.

  • Added support to run static code analyzer on project
  • Added view to show found warnings and errors for the selected project.

Content Assist

Added generic content assist if a type cannot be resolved, all possible fields and functions will be proposed

This can be turned off in settings. Window -> Preferences -> BrightScript -> Editor -> Content Assist -> Enable adding all functions to dynamic types

**Note** For better functionality of content assist, build your project first so it will be scanned for nodes and available code.

1. Added more logic for content assist

2. Added content assist for function declaration argument types and return type

3. Added content assist for AA keys in AA declaration

4. Added content assist for if statements. It can propose to add "then" or to close if statement

5. Added Type proposals for getInterface function

6. Added content assist for SGDEX

7. Added content assist for RAF

8. Added assist for methods:

roSGNode

  • CreateChild
  • Createchildren
  • Addfield  (assist for type and boolean value)
  • SetField
  • GetFieldType
  • GetField
  • RemoveField
  • HasField
  • observeField
  • observeFieldScoped
  • unObserveField
  • unObserveFieldScoped
  • findNode ( you need to build project first)

AA

  • Delete
  • LookupCI
  • Lookup
  • AddReplace
  • DoesExist

Array

  • SortBy

Code Formatting

Starting this release you can format your BrightScript code according to the latest code formatting rules.

Plug-in supports Eclipse built-in Code Formatting with proper shortcuts:

  • Ctrl + Shift + F for formatting
  • Ctrl + I to fix indents only

Selecting source code and using these shortcuts will perform changes only on selected code:

  • Added replace rules to replace endif and other such tokens
  • Added rule to remove white spaces before colon and bracket if the previous token is AA key. If you want to format your code, add spaces after the colon
  • Removed multiple newlines
  • Removed trailing white spaces
  • Added formatting for any variable if it matches known words so we will format it properly
  • Added formatting to SDK functions
  • Added formatting for project function names
  • Added formatting for array and AA declarations
  • Added formatting for function sub declarations and its arguments

Goto definition improvements

Improved goto definition functionality so you can quickly navigate within project or SDK components.

  • Goto type declaration in Type description like Component extends Node
  • Goto function if its name is declared in a string. For example, node.ObserveField("visible", "MyFunction")
  • Goto start of if, while, for blocks when focusing on any keyword from it

Debug Console

  • Added option to enable auto adding of timestamp to received messages. This is useful when you try to measure the difference between two prints. Note this calculates time when message was received in console, not printed in channel.
  • Fixed selecting text in telnet console was sending break to channel.
  • Added debug shortcut buttons to toolbar near quick deployment.
  • Added quick console launch button that starts console on selected service, this will start console on last IP that was deployed.
  • Removed extra consoles selection as 8085 is default used port.
  • Added more file hyperlinks to console output.
  • Added Debug keywords shortcuts. Uses default Eclipse shortcut schema:

**Note.** Focus on the console view to use these since F5 is used for refresh.

  • Step - F5
  • Over - F6
  • Out - F7
  • Resume - F8
  • Suspend
  • Terminate   

New XML wizard and Standard XML editor

The new XML Wizard page is where you can create XML with predefined interface fields and source files. 

  • Add wizard to create advanced XML file.
  • Added page to create brs file for XML.
  • Added wizard to create:
    • Interface fields
    • Import source files 

New features for editing XML files:

  • Support for file drop in XML editor. Depending where it was dropped, it will insert either script import or code like for image URLs.
  • Added Content assist for files without XSD schema. Supports more advanced features:
    • Extends attribute
    • Field type value
    • Field alias based on current nodes in <children>
    • onChange function proposals
    • Components in <children>  

BUG FIXES:

This release updates features to improve stability and performance: 

  • Fixed issue with very large projects running out of memory and crashing.
  • Fixed issues with content assist not to be show in certain cases.
  • Fixed proposals for project global functions.
  • Fixed errors when component, event were used as local vars.
  • Improved file parsing speed.
  • Improved file parsing time for big files 10k+
  • Fixed grammar for:
    • Type Declaration Characters as function param error, ex. sub init(param% as Integer)
    • EndSub and EndFunction error
    • Sub can return non void type

 

Attachments:

eclipse_1.png (image/png)
eclipse_2.png (image/png)
eclipse_3.png (image/png)
eclipse_4.png (image/png)
eclipse_5.png (image/png)
eclipse_6.png (image/png)
eclipse_7.png (image/png)
eclipse_5.png (image/png)
docgen.jpg (application/octet-stream)
DocumentationGenerator.pdf (application/pdf)