Friday, 5 February 2016

A Java Language IDE

Introduction

<-political_rant>
The decision to share this software isn't so much in the spirit of open source as it is a humble protest against not being able to find a job as a programmer. If they won't hire us, then we'll flood the market with free software. SOLIDARITY!
<-/political_rant>"
With that said, let's get going. This a functional yet incomplete Java IDE. I have had the code on my PC for the last 3 years or so. Initially, I thought I could turn it into a commercially viable product, but that isn't happening. Below is a list of the classes contained in the project:
classes
The following features have been implemented to some extent:
Code completion. Code can be completed after the invocation of '.'. The invocation of a method doesn't yet support code completion.
ccpopp
Class view for currently loaded project files.
wksp
Editor customization options.
opt
Java SDK Setting utility.
sdk
Here are the other libraries the project uses.
workspace
The editlib is for the text editor, the bcglib (don't know if it's still publicly available) is for the UI.
This is the basic design of how the editor window interacts with the backend parser.
design
When a file is loaded, a map of the parser thread and the file associated with it is made. This allows the text editor to send EDIT notification messages to the global map, which locates the thread associated with the provided file name. As you can see, this provides for a very flexible interaction between the parser and the text editor. The text editor can be opened and closed without any further interaction with the parser. As in the diagram above, whenever an edit event occurs, the global map is accessed via the CVisualJavaApp::SendEditMsg() function. This function locates the thread ID, and posts the necessary message.

When a project is loaded

The project is loaded from:
CMainFrame::OnFileOpenworkspace().
From there, a series of calls lead to the next important point in the code, the call to:CProjectFile::CProjectFile().
From the above function, a new thread is spawn, that thread represents the parser. The above function is an ideal place to start learning about the project. If you're interested in adding code, check out theCVisualJavaAppp::InitInstance method. You'll also want to download the standard edition of the Java SDK. Set the path of the API and the tools bin from the SDK Tool setting windows shown above.

Running the Executable

For those who want to try out the app, you'll need to put the codetemplates_1.txt file in the My Documents folder. I hard coded that path in the app. Secondly, you'll have to create a new project as follows:
File->New->("type project name")->Choose Swing as App Type, Click the next button->Click the Frame button->Choose Simple Text editor.
Following the above steps should allow you to create a new Java project. Assuming the codetemplate is where it should be, you should have a simple editor code generated. The simple text editor is the only option that has template code, you can add more template codes to the file.
The format for the codetemplate file is "<TEMPLATE_NAME>" followed by template code. Below is a list of valid template names:
  • <CLASS_DECLARATION>|<INTERFACE_DECLARATION>| <SWING_TEXT_EDITOR>
  • <FRAME_APP_WITH_MENU_SWING>|<FRAME_APP_WITH_TOOLBAR_SWING>
  • <FRAME_APP_SWING>|<DIALOG_APP_SWING>| <FRAME_APP_AS_SIMPLE_TEXT_EDITOR_AWT>
  • <FRAME_APP_WITH_MENU_AWT>|<FRAME_APP_WITH_TOOLBAR_AWT>| <FRAME_APP_AWT>
  • <DIALOG_APP_AWT>|<CONSOLE_APP>|<APPLET_APP>
When you insert template code, the only thing that should be replaced is the class name. That is accomplished by replacing every occurrence of the class name with "<CLASS_NAME>".
For more information on codetemplates, see the CCodeTemplate class. A word of caution about the SDK: first of all, you can't put the Java project in the My Documents folder. Put it in your C: directory. The "javac" tool for some reason doesn't know how to read paths containing My Documents (and probably any folders with names containing white spaces). You must also set the tool paths from the SDK window above. For limited code completion support, you must also set the API path.

No comments:

Post a Comment