public Type resolveEgressType(String expression) throws ExpressionCompileException { // try to get the type from the cache Type type = egressTypes.get(expression); if (type != null) { return type; } CompiledExpression compiled = compileExpression(expression); final Class<?> egressClass = compiled.getKnownEgressType(); final Type[] parameters = getParserContext().getLastTypeParameters(); if (parameters == null) { // the class is not parameterised (generic) type = egressClass; } else { // reconstruct the Type from mvel's generics details type = new ParameterizedTypeImpl(egressClass, parameters, egressClass.getEnclosingClass()); } egressTypes.put(expression, type); return type; }
public Type resolveEgressType(String expression) throws ExpressionCompileException { // try to get the type from the cache Type type = egressTypes.get(expression); if (type != null) { return type; } CompiledExpression compiled = compileExpression(expression); final Class<?> egressClass = compiled.getKnownEgressType(); final Type[] parameters = getParserContext().getLastTypeParameters(); if (parameters == null) { // the class is not parameterised (generic) type = egressClass; } else { // reconstruct the Type from mvel's generics details type = new ParameterizedTypeImpl(egressClass, parameters, egressClass.getEnclosingClass()); } egressTypes.put(expression, type); return type; }
public Type resolveEgressType(String expression) throws ExpressionCompileException { // try to get the type from the cache Type type = egressTypes.get(expression); if (type != null) { return type; } CompiledExpression compiled = compileExpression(expression); final Class<?> egressClass = compiled.getKnownEgressType(); final Type[] parameters = compiled.getParserContext().getLastTypeParameters(); if (parameters == null) { // the class is not parameterised (generic) type = egressClass; } else { // reconstruct the Type from mvel's generics details type = new ParameterizedTypeImpl(egressClass, parameters, egressClass.getEnclosingClass()); } egressTypes.put(expression, type); return type; }
ctx = type2Class(pCtx.getLastTypeParameters() != null && pCtx.getLastTypeParameters().length != 0 ? pCtx.getLastTypeParameters()[1] : Object.class); ctx = pCtx.getLastTypeParameters() == null || pCtx.getLastTypeParameters().length == 0 ? Object.class : type2Class(pCtx.getLastTypeParameters()[0]);
ctx = type2Class(pCtx.getLastTypeParameters() != null && pCtx.getLastTypeParameters().length != 0 ? pCtx.getLastTypeParameters()[1] : Object.class); ctx = pCtx.getLastTypeParameters() == null || pCtx.getLastTypeParameters().length == 0 ? Object.class : type2Class(pCtx.getLastTypeParameters()[0]);
if (pCtx != null && pCtx.getLastTypeParameters() != null && pCtx.getLastTypeParameters().length != 0 && ((Collection.class.isAssignableFrom(ctx) && !(switchStateReg = false)) || (Map.class.isAssignableFrom(ctx) && (switchStateReg = true)))) { Type parm = pCtx.getLastTypeParameters()[switchStateReg ? 1 : 0]; pCtx.setLastTypeParameters(null); return parm instanceof ParameterizedType ? Object.class : (Class) parm;
return pCtx.getImport(property); else if (pCtx.getLastTypeParameters() != null && ((Collection.class.isAssignableFrom(ctx) && !(switchStateReg = false)) || (Map.class.isAssignableFrom(ctx) && (switchStateReg = true)))) { Class parm = (Class) pCtx.getLastTypeParameters()[switchStateReg ? 1 : 0]; pCtx.setLastTypeParameters(null); return parm;
if (pCtx.isStrictTypeEnforcement() && ctx.getTypeParameters().length != 0 && pCtx.getLastTypeParameters() != null && pCtx.getLastTypeParameters().length == ctx.getTypeParameters().length) { Type typeArg = pCtx.getLastTypeParameters()[i]; typeArgs.put(typeVariables[i].getName(), typeArg instanceof Class ? type2Class( pCtx.getLastTypeParameters()[i] ) : Object.class);
if (pCtx.isStrictTypeEnforcement() && ctx.getTypeParameters().length != 0 && pCtx.getLastTypeParameters() != null && pCtx.getLastTypeParameters().length == ctx.getTypeParameters().length) { Type typeArg = pCtx.getLastTypeParameters()[i]; typeArgs.put(typeVariables[i].getName(), typeArg instanceof Class ? type2Class( pCtx.getLastTypeParameters()[i] ) : Object.class);
if (pCtx != null && pCtx.getLastTypeParameters() != null && pCtx.getLastTypeParameters().length != 0 && ((Collection.class.isAssignableFrom(ctx) && !(switchStateReg = false)) || (Map.class.isAssignableFrom(ctx) && (switchStateReg = true)))) { Type parm = pCtx.getLastTypeParameters()[switchStateReg ? 1 : 0]; pCtx.setLastTypeParameters(null); return parm instanceof ParameterizedType ? Object.class : (Class) parm;
ctx = (Class) pCtx.getLastTypeParameters()[1]; ctx = (Class) pCtx.getLastTypeParameters()[0];
public final void testInferLastTypeParametersFromProperty() { ParserContext context = new ParserContext(); context.setStrongTyping(true); context.addInput("a", A.class); final CompiledExpression compiledExpression = new ExpressionCompiler("a.strings", context) .compile(); final Object val = MVEL.executeExpression(compiledExpression, new AWrapper()); assertTrue("Expression did not evaluate correctly: " + val, STRINGS.equals(val)); assertTrue("No type parameters detected", null != context.getLastTypeParameters()); assertTrue("Wrong parametric type inferred", String.class.equals(context.getLastTypeParameters()[0])); }
public final void testInferLastTypeParametersFromMethod() { ParserContext context = new ParserContext(); context.setStrongTyping(true); context.addInput("a", A.class); final CompiledExpression compiledExpression = new ExpressionCompiler("a.values()", context) .compile(); final Object val = MVEL.executeExpression(compiledExpression, new AWrapper()); assertTrue("Expression did not evaluate correctly: " + val, STRINGS.equals(val)); assertTrue("No type parameters detected", null != context.getLastTypeParameters()); assertTrue("Wrong parametric type inferred", String.class.equals(context.getLastTypeParameters()[0])); }
@Test public final void determineEgressParametricType() { final ParserContext parserContext = new ParserContext(); parserContext.setStrongTyping(true); parserContext.addInput("strings", List.class, new Class[] { String.class }); final CompiledExpression expr = new ExpressionCompiler("strings", parserContext) .compile(); assert STRINGS.equals(MVEL.executeExpression(expr, new A())) : "faulty expression eval"; final Type[] typeParameters = expr.getParserContext().getLastTypeParameters(); assert null != typeParameters : "no generic egress type"; assert String.class.equals(typeParameters[0]) : "wrong generic egress type"; }
@Test public final void determineEgressParametricTypeInExprChain() { final ParserContext parserContext = new ParserContext(); parserContext.setStrongTyping(true); parserContext.addInput("strings", A.class); final CompiledExpression expr = new ExpressionCompiler("strings.strings", parserContext) .compile(); assert STRINGS.equals(MVEL.executeExpression(expr, new B())) : "faulty expression eval"; final Type[] typeParameters = expr.getParserContext().getLastTypeParameters(); assert null != typeParameters : "no generic egress type"; assert String.class.equals(typeParameters[0]) : "wrong generic egress type"; }
public final void testInferLastTypeParametersFromPropertyMethod() { ParserContext context = new ParserContext(); context.setStrongTyping(true); context.addInput("a", A.class); final CompiledExpression compiledExpression = new ExpressionCompiler("a.getFooMap()[\"key\"].someMethod()", context) .compile(); final Object val = MVEL.executeExpression(compiledExpression, new AWrapper()); assertEquals("Expression did not evaluate correctly: ", "bar", val); assertNotNull("No type parameters detected", context.getLastTypeParameters()); assertEquals("Wrong parametric type inferred", String.class, context.getLastTypeParameters()[0]); }