private static void defineVariables(Map<String, Type> inputVariableTypes, Map<String, Object> inputVariables, FEEL_1_1Parser parser) { inputVariableTypes.forEach( (name, type) -> { parser.getHelper().defineVariable( name, type ); if (type.getName() != null) { parser.getHelper().getSymbolTable().getGlobalScope().define(new BuiltInTypeSymbol(type.getName(), type)); } } ); inputVariables.forEach( (name, value) -> { parser.getHelper().defineVariable( name ); if( value instanceof Map ) { try { parser.getHelper().pushName( name ); parser.getHelper().pushScope(); defineVariables( Collections.EMPTY_MAP, (Map<String, Object>) value, parser ); } finally { parser.getHelper().popScope(); parser.getHelper().popName(); } } } ); }
public static List<FEELEvent> checkVariableName( String source ) { if( source == null || source.isEmpty() ) { return Collections.singletonList( new SyntaxErrorEvent( FEELEvent.Severity.ERROR, Msg.createMessage( Msg.INVALID_VARIABLE_NAME_EMPTY ), null, 0, 0, null ) ); } ANTLRInputStream input = new ANTLRInputStream(source); FEEL_1_1Lexer lexer = new FEEL_1_1Lexer( input ); CommonTokenStream tokens = new CommonTokenStream( lexer ); FEEL_1_1Parser parser = new FEEL_1_1Parser( tokens ); parser.setHelper( new ParserHelper() ); parser.setErrorHandler( new FEELErrorHandler() ); FEELParserErrorListener errorChecker = new FEELParserErrorListener( null ); parser.removeErrorListeners(); // removes the error listener that prints to the console parser.addErrorListener( errorChecker ); FEEL_1_1Parser.NameDefinitionContext nameDef = parser.nameDefinition(); if( ! errorChecker.hasErrors() && nameDef != null && source.trim().equals( parser.getHelper().getOriginalText( nameDef ) ) ) { return Collections.emptyList(); } return errorChecker.getErrors(); }