Use of ServiceLoader for ease of adding new languages#28
Closed
ZenHarbinger wants to merge 6 commits intobobbylight:masterfrom
ZenHarbinger:master
Closed
Use of ServiceLoader for ease of adding new languages#28ZenHarbinger wants to merge 6 commits intobobbylight:masterfrom ZenHarbinger:master
ZenHarbinger wants to merge 6 commits intobobbylight:masterfrom
ZenHarbinger:master
Conversation
Owner
|
This would be slick, but I'm old and crotchety and want RSTA to stay buildable/runnable with JDK 5. For this reason I won't be merging this pull request until I decide to get with the times. I'm creating a milestone for things like this just so I don't lose track of them. |
Author
|
I was able to set the compiler settings in the pom.xml file for maven to use java 1.5 and it worked. |
Owner
|
Unfortunately the ServiceLoader class was added in 1.6. |
Open
Author
|
Close in reference to using: #35 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I have gone through for my own purposes and added some interfaces and classes which can be loaded using the Java ServiceLoader class.
I have added this functionality to LanguageSupportFactory for finding supported languages.
A new interface LanguageSupportRegistration is added with methods:
The ServiceLoader will then find all implemented classes in LanguageSupportFactory and add them on the fly.
META-INF.services/org.fife.rsta.ac.LanguageSupportRegistration keeps the record of all implementing classes similar to the above TokenMakerRegistration.
Similarly I have added org.fife.ui.rsyntaxtextarea.TokenMakerRegistration in the RSyntaxTextArea project.
From here each language then implements a class that derives from this interface.
The interface provides 3 methods.
which are used in DefaultTokenMakerFactory. Instead of manually specifying every language, the ServiceLoader class can find the files from the META-INF.services/org.fife.ui.rsyntaxtextarea.TokenMakerRegistration file which keeps a record of all implementing classes. Using maven (not sure about gradle) there are plugins which will automatically fill in this file when building.