You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2019/09/30 03:23:58 UTC
[groovy] branch master updated: Remove antlr2 related code in
`LexerFrame` and move to new package
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new a0604ec Remove antlr2 related code in `LexerFrame` and move to new package
a0604ec is described below
commit a0604ec8e6fd9e7fdcf8f697ac1bb98bba8f5656
Author: Daniel.Sun <re...@hotmail.com>
AuthorDate: Mon Sep 30 11:19:09 2019 +0800
Remove antlr2 related code in `LexerFrame` and move to new package
---
.../groovy/antlr/LexerFrame.java | 114 ++++++---------------
.../main/groovy/groovy/console/ui/Console.groovy | 6 +-
2 files changed, 32 insertions(+), 88 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/antlr/LexerFrame.java b/src/main/java/org/apache/groovy/antlr/LexerFrame.java
similarity index 68%
rename from src/main/java/org/codehaus/groovy/antlr/LexerFrame.java
rename to src/main/java/org/apache/groovy/antlr/LexerFrame.java
index e214951..d7cacd2 100644
--- a/src/main/java/org/codehaus/groovy/antlr/LexerFrame.java
+++ b/src/main/java/org/apache/groovy/antlr/LexerFrame.java
@@ -16,15 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.codehaus.groovy.antlr;
+package org.apache.groovy.antlr;
-import antlr.Token;
+import org.antlr.v4.runtime.Token;
import org.apache.groovy.parser.antlr4.GroovyLangLexer;
-import org.codehaus.groovy.antlr.java.JavaLexer;
-import org.codehaus.groovy.antlr.java.JavaTokenTypes;
-import org.codehaus.groovy.antlr.parser.GroovyLexer;
-import org.codehaus.groovy.antlr.parser.GroovyTokenTypes;
-import org.codehaus.groovy.control.CompilerConfiguration;
+import org.apache.groovy.parser.antlr4.GroovyLexer;
import org.codehaus.groovy.runtime.IOGroovyMethods;
import org.codehaus.groovy.runtime.ResourceGroovyMethods;
@@ -48,7 +44,6 @@ import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.border.Border;
import javax.swing.text.BadLocationException;
-
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Insets;
@@ -60,9 +55,7 @@ import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import java.io.StringReader;
-import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
@@ -79,32 +72,27 @@ public class LexerFrame extends JFrame implements ActionListener {
private final JButton jbutton = new JButton("open");
private final JPanel mainPanel = new JPanel(new BorderLayout());
private final JTextArea scriptPane = new JTextArea();
- private final Class lexerClass;
private final Map<Integer, String> tokens = new HashMap<>();
+ private static final Class<GroovyLexer> TOKEN_TYPES_CLASS = GroovyLexer.class;
/**
* Constructor used when invoking as a standalone application
*
- * @param lexerClass the lexer class to use
- * @param tokenTypesClass the lexer token types class
*/
- public LexerFrame(Class lexerClass, Class tokenTypesClass) {
- this(lexerClass, tokenTypesClass, null);
+ public LexerFrame() {
+ this(null);
}
/**
* Constructor used when invoking for a specific file
*
- * @param lexerClass the lexer class to use
- * @param tokenTypesClass the lexer token types class
*/
- public LexerFrame(Class lexerClass, Class tokenTypesClass, Reader reader) {
+ public LexerFrame(Reader reader) {
super("Token Stream Viewer");
- this.lexerClass = lexerClass;
try {
jbInit(reader);
setSize(500, 500);
- listTokens(tokenTypesClass);
+ listTokens(TOKEN_TYPES_CLASS);
if (reader == null) {
final JPopupMenu popup = new JPopupMenu();
@@ -126,16 +114,6 @@ public class LexerFrame extends JFrame implements ActionListener {
}
}
- /**
- * Creates a Groovy language LexerFrame for the given script text
- *
- * @param scriptText the Groovy source file to parse/render
- * @return the new frame rending the parsed tokens
- */
- public static LexerFrame groovyScriptFactory(String scriptText) {
- return new LexerFrame(GroovyLexer.class, GroovyTokenTypes.class, new StringReader(scriptText));
- }
-
private void listTokens(Class tokenTypes) throws Exception {
for (Field field : tokenTypes.getDeclaredFields()) {
int modifiers = field.getModifiers();
@@ -150,43 +128,29 @@ public class LexerFrame extends JFrame implements ActionListener {
}
String fieldName = field.getName();
- if (isParrotLexer()) {
- if (fieldName.endsWith("_MODE")) {
- continue;
- }
+ if (fieldName.endsWith("_MODE")) {
+ continue;
}
tokens.put((Integer) fieldValue, fieldName);
}
- if (isParrotLexer()) {
- tokens.put(-1, "EOF");
- }
- }
-
- private boolean isParrotLexer() {
- return GroovyLangLexer.class.equals(lexerClass);
+ tokens.put(-1, "EOF");
}
public void actionPerformed(ActionEvent ae) {
- Object token = ((JComponent) ae.getSource()).getClientProperty("token");
- try {
- if (eof().equals(invokeMethod(token, "getType"))) {
- scriptPane.select(0, 0);
- return;
- }
- } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
- e.printStackTrace();
+ Token token = (Token) ((JComponent) ae.getSource()).getClientProperty("token");
+ if (eof().equals(token.getType())) {
+ scriptPane.select(0, 0);
+ return;
}
try {
- int start = scriptPane.getLineStartOffset((Integer) invokeMethod(token, "getLine") - 1) + getColumn(token);
- String text = (String) invokeMethod(token, "getText");
+ int start = scriptPane.getLineStartOffset(token.getLine() - 1) + getColumn(token);
+ String text = token.getText();
scriptPane.select(start, "".equals(text.trim()) ? start : start + text.length());
scriptPane.requestFocus();
} catch (BadLocationException ex) {
// IGNORE
- } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ex) {
- ex.printStackTrace();
}
}
@@ -224,31 +188,30 @@ public class LexerFrame extends JFrame implements ActionListener {
reader.reset();
// create lexer
- final Constructor constructor = lexerClass.getConstructor(Reader.class);
- final Object lexer = constructor.newInstance(reader);
+ final GroovyLangLexer lexer = new GroovyLangLexer(reader);
tokenPane.setEditable(true);
tokenPane.setText("");
int line = 1;
final ButtonGroup bg = new ButtonGroup();
- Object token;
+ Token token;
while (true) {
- token = invokeMethod(lexer, "nextToken");
- JToggleButton tokenButton = new JToggleButton((String) tokens.get(invokeMethod(token, "getType")));
+ token = lexer.nextToken();
+ JToggleButton tokenButton = new JToggleButton(tokens.get(token.getType()));
bg.add(tokenButton);
tokenButton.addActionListener(this);
- tokenButton.setToolTipText((String) invokeMethod(token, "getText"));
+ tokenButton.setToolTipText(token.getText());
tokenButton.putClientProperty("token", token);
tokenButton.setMargin(new Insets(0, 1, 0, 1));
tokenButton.setFocusPainted(false);
- if ((Integer) invokeMethod(token, "getLine") > line) {
+ if (token.getLine() > line) {
tokenPane.getDocument().insertString(tokenPane.getDocument().getLength(), "\n", null);
- line = (Integer) invokeMethod(token, "getLine");
+ line = token.getLine();
}
insertComponent(tokenButton);
- if (eof().equals(invokeMethod(token, "getType"))) {
+ if (eof().equals(token.getType())) {
break;
}
}
@@ -259,17 +222,11 @@ public class LexerFrame extends JFrame implements ActionListener {
}
private Integer eof() {
- return isParrotLexer() ? GroovyLangLexer.EOF : Token.EOF_TYPE;
+ return GroovyLangLexer.EOF;
}
- private Object invokeMethod(Object obj, String methodName) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
- return obj.getClass().getMethod(methodName).invoke(obj);
- }
-
- private Integer getColumn(Object token) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
- return isParrotLexer()
- ? (Integer) invokeMethod(token, "getCharPositionInLine")
- : (Integer) invokeMethod(token, "getColumn") - 1;
+ private Integer getColumn(Token token) {
+ return token.getCharPositionInLine();
}
private void insertComponent(JComponent comp) {
@@ -320,27 +277,16 @@ public class LexerFrame extends JFrame implements ActionListener {
// Ignore
}
LexerFrame lexerFrame = null;
- boolean oldParserEnabled = CompilerConfiguration.DEFAULT.getPluginFactory() instanceof AntlrParserPluginFactory;
if (args.length == 0) {
- lexerFrame =
- oldParserEnabled
- ? new LexerFrame(GroovyLexer.class, GroovyTokenTypes.class)
- : new LexerFrame(GroovyLangLexer.class, org.apache.groovy.parser.antlr4.GroovyLexer.class);
+ lexerFrame = new LexerFrame();
} else if (args.length > 1) {
System.err.println("usage: java LexerFrame [filename.ext]");
System.exit(1);
} else {
String filename = args[0];
FileReader fileReader = new FileReader(filename);
- if (filename.endsWith(".java")) {
- lexerFrame = new LexerFrame(JavaLexer.class, JavaTokenTypes.class, fileReader);
- } else {
- lexerFrame =
- oldParserEnabled
- ? new LexerFrame(GroovyLexer.class, GroovyTokenTypes.class, fileReader)
- : new LexerFrame(GroovyLangLexer.class, org.apache.groovy.parser.antlr4.GroovyLexer.class, fileReader);
- }
+ lexerFrame = new LexerFrame(fileReader);
}
lexerFrame.setVisible(true);
}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
index deacef8..eafe365 100644
--- a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
+++ b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
@@ -27,10 +27,9 @@ import groovy.swing.SwingBuilder
import groovy.transform.CompileStatic
import groovy.transform.ThreadInterrupt
import groovy.ui.GroovyMain
+import org.apache.groovy.antlr.LexerFrame
import org.apache.groovy.io.StringBuilderWriter
-import org.apache.groovy.parser.antlr4.GroovyLangLexer
import org.apache.groovy.util.SystemUtil
-import org.codehaus.groovy.antlr.LexerFrame
import org.codehaus.groovy.control.CompilerConfiguration
import org.codehaus.groovy.control.ErrorCollector
import org.codehaus.groovy.control.MultipleCompilationErrorsException
@@ -71,7 +70,6 @@ import javax.swing.text.SimpleAttributeSet
import javax.swing.text.Style
import javax.swing.text.StyleConstants
import javax.swing.text.html.HTML
-
import java.awt.BorderLayout
import java.awt.Component
import java.awt.Dimension
@@ -1041,7 +1039,7 @@ class Console implements CaretListener, HyperlinkListener, ComponentListener, Fo
void inspectTokens(EventObject evt = null) {
def content = inputArea.getText()
- def lf = new LexerFrame(GroovyLangLexer, org.apache.groovy.parser.antlr4.GroovyLexer, new StringReader(content))
+ def lf = new LexerFrame(new StringReader(content))
lf.visible = true
}