public static InlineExpressionParser newInstance(final String inlineExpression) {
        Properties props = new Properties();
        if (null == inlineExpression) {
            return TypedSPILoader.getService(InlineExpressionParser.class, DEFAULT_TYPE_NAME, props);
        }
        if (!inlineExpression.startsWith(TYPE_NAME_BEGIN_SYMBOL)) {
            props.setProperty(InlineExpressionParser.INLINE_EXPRESSION_KEY, inlineExpression);
            return TypedSPILoader.getService(InlineExpressionParser.class, DEFAULT_TYPE_NAME, props);
        }
        Integer typeBeginIndex = inlineExpression.indexOf(TYPE_NAME_BEGIN_SYMBOL);
        Integer typeEndIndex = inlineExpression.indexOf(TYPE_NAME_END_SYMBOL);
        props.setProperty(InlineExpressionParser.INLINE_EXPRESSION_KEY, getExprWithoutTypeName(inlineExpression, typeBeginIndex, typeEndIndex));
        return TypedSPILoader.getService(InlineExpressionParser.class, getTypeName(inlineExpression, typeBeginIndex, typeEndIndex), props);
    }
@Test
    void assertNewInstance() {
        assertThat(InlineExpressionParserFactory.newInstance("t_order_0, t_order_1").getType(), is("GROOVY"));
        assertThat(InlineExpressionParserFactory.newInstance("t_order_0, t_order_1").handlePlaceHolder(), is("t_order_0, t_order_1"));
        assertThat(InlineExpressionParserFactory.newInstance("<GROOVY>t_order_0, t_order_1").getType(), is("GROOVY"));
        assertThat(InlineExpressionParserFactory.newInstance("<GROOVY>t_order_0, t_order_1").handlePlaceHolder(), is("t_order_0, t_order_1"));
        assertThat(InlineExpressionParserFactory.newInstance("<LITERAL>t_order_0, t_order_1").getType(), is("LITERAL"));
        assertThrows(UnsupportedOperationException.class, () -> InlineExpressionParserFactory.newInstance("<LITERAL>t_order_0, t_order_1").handlePlaceHolder());
    }