Skip to content

Commit

Permalink
Simplify updateGrammarObjectsFromFile_
Browse files Browse the repository at this point in the history
  • Loading branch information
akovari committed Aug 5, 2022
1 parent 5e98cca commit e945f86
Showing 1 changed file with 21 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@

import javax.swing.*;
import java.io.File;
import java.lang.reflect.Constructor;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
Expand Down Expand Up @@ -420,47 +421,34 @@ private String updateGrammarObjectsFromFile_(VirtualFile grammarFile) {
LexerGrammar lg = (LexerGrammar) grammars[0];
Grammar g = grammars[1];

ANTLRv4GrammarProperties grammarProperties = ANTLRv4GrammarPropertiesStore.getGrammarProperties(project, grammarFile);
Constructor<Parser> parserCtor = null;
Constructor<Lexer> lexerCtor = null;

ANTLRv4GrammarProperties grammarProperties = ANTLRv4GrammarPropertiesStore.getGrammarProperties(project, grammarFile);
if (grammarProperties.isUseGeneratedParserCodeCheckBox()) {
String parserClassName = grammarFile.getNameWithoutExtension();
String lexerClassName = lg.name;

Class<Parser> parserClass = null;
Class<Lexer> lexerClass = null;

Class<?> tokenStreamClass = null;
Class<?> charStreamClass = null;
try {
Class<?> tokenStreamClass = Class.forName(TokenStream.class.getName(), true, this.projectClassLoader);
Class<?> charStreamClass = Class.forName(CharStream.class.getName(), true, this.projectClassLoader);

try {
tokenStreamClass = Class.forName(TokenStream.class.getName(), true, this.projectClassLoader);
charStreamClass = Class.forName(CharStream.class.getName(), true, this.projectClassLoader);

parserClass = (Class<Parser>) Class.forName(parserClassName, true, this.projectClassLoader);
lexerClass = (Class<Lexer>) Class.forName(lexerClassName, true, this.projectClassLoader);
} catch (ClassNotFoundException e) {
Messages.showErrorDialog(project, "Cannot find class '" + parserClassName + "'", CommonBundle.getErrorTitle());
}
Class<Parser> parserClass = (Class<Parser>) Class.forName(parserClassName, true, this.projectClassLoader);
Class<Lexer> lexerClass = (Class<Lexer>) Class.forName(lexerClassName, true, this.projectClassLoader);

try {
synchronized (previewState) { // build atomically
previewState.lg = lg;
previewState.g = g;
if (lexerClass != null) {
previewState.lexerCtor = lexerClass.getDeclaredConstructor(charStreamClass);
}
if (parserClass != null) {
previewState.parserCtor = parserClass.getDeclaredConstructor(tokenStreamClass);
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
} else {
synchronized (previewState) {
previewState.lg = lg;
previewState.g = g;
parserCtor = parserClass.getDeclaredConstructor(tokenStreamClass);
lexerCtor = lexerClass.getDeclaredConstructor(charStreamClass);
} catch (ClassNotFoundException | NoSuchMethodException e) {
LOG.warn(e);
}
}

synchronized (previewState) {
previewState.lg = lg;
previewState.g = g;
previewState.lexerCtor = lexerCtor;
previewState.parserCtor = parserCtor;
}
}
return grammarFileName;
}
Expand Down

0 comments on commit e945f86

Please sign in to comment.