private CodegenBlock ifInstanceOf(String name, Class clazz, boolean not) { return ifCondition(!not ? instanceOf(ref(name), clazz) : notInstanceOf(ref(name), clazz)); }
public CodegenExpression widenCodegen(CodegenExpression expression, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { CodegenMethod method = codegenMethodScope.makeChild(Object.class, TypeWidenerSPI.class, codegenClassScope).addParam(Object.class, "input").getBlock() .ifCondition(instanceOf(ref("input"), EventBean.class)) .blockReturn(exprDotMethod(cast(EventBean.class, ref("input")), "getUnderlying")) .methodReturn(ref("input")); return localMethodBuild(method).pass(expression).call(); } };
public CodegenExpression codegen(EnumForgeCodegenParams args, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { CodegenMethod method = codegenMethodScope.makeChild(Collection.class, EnumDistinctScalarForge.class, codegenClassScope).addParam(EnumForgeCodegenNames.PARAMS).getBlock() .ifCondition(relational(exprDotMethod(EnumForgeCodegenNames.REF_ENUMCOLL, "size"), LE, constant(1))) .blockReturn(EnumForgeCodegenNames.REF_ENUMCOLL) .ifCondition(instanceOf(ref("enumcoll"), Set.class)) .blockReturn(EnumForgeCodegenNames.REF_ENUMCOLL) .methodReturn(newInstance(LinkedHashSet.class, EnumForgeCodegenNames.REF_ENUMCOLL)); return localMethod(method, args.getExpressions()); } }
public CodegenExpression evaluateCodegen(Class requiredType, CodegenMethodScope codegenMethodScope, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { CodegenMethod methodNode = codegenMethodScope.makeChild(EventBean[].class, this.getClass(), codegenClassScope); methodNode.getBlock() .declareVar(Object.class, "result", enumerationForge.evaluateGetROCollectionEventsCodegen(methodNode, exprSymbol, codegenClassScope)) .ifCondition(and(notEqualsNull(ref("result")), instanceOf(ref("result"), Collection.class))) .declareVar(Collection.class, EventBean.class, "events", cast(Collection.class, ref("result"))) .blockReturn(cast(EventBean[].class, exprDotMethod(ref("events"), "toArray", newArrayByLength(EventBean.class, exprDotMethod(ref("events"), "size"))))) .methodReturn(cast(EventBean[].class, ref("result"))); return localMethod(methodNode); }
public CodegenExpression evaluateCodegen(Class requiredType, CodegenMethodScope codegenMethodScope, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { CodegenMethod methodNode = codegenMethodScope.makeChild(Long.class, ExprEvaluatorStreamDTPropFragment.class, codegenClassScope); CodegenExpressionRef refEPS = exprSymbol.getAddEPS(methodNode); methodNode.getBlock() .declareVar(EventBean.class, "theEvent", arrayAtIndex(refEPS, constant(streamId))) .ifRefNullReturnNull("theEvent") .declareVar(Object.class, "event", getterFragment.eventBeanFragmentCodegen(ref("theEvent"), methodNode, codegenClassScope)) .ifCondition(not(instanceOf(ref("event"), EventBean.class))) .blockReturn(constantNull()) .methodReturn(CodegenLegoCast.castSafeFromObjectType(Long.class, getterTimestamp.eventBeanGetCodegen(cast(EventBean.class, ref("event")), methodNode, codegenClassScope))); return localMethod(methodNode); }
public CodegenExpression evaluateCodegenUninstrumented(Class requiredType, CodegenMethodScope codegenMethodScope, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { CodegenMethod methodNode = codegenMethodScope.makeChild(String.class, ExprTypeofNodeForgeStreamEvent.class, codegenClassScope); CodegenExpressionRef refEPS = exprSymbol.getAddEPS(methodNode); methodNode.getBlock() .declareVar(EventBean.class, "event", arrayAtIndex(refEPS, constant(streamNum))) .ifRefNullReturnNull("event") .ifCondition(instanceOf(ref("event"), VariantEvent.class)) .blockReturn(exprDotMethodChain(cast(VariantEvent.class, ref("event"))).add("getUnderlyingEventBean").add("getEventType").add("getName")) .methodReturn(exprDotMethodChain(ref("event")).add("getEventType").add("getName")); return localMethod(methodNode); }
private CodegenMethod dereferenceRemoveFromCollCodegen(CodegenMethod parent, CodegenNamedMethods namedMethods, CodegenClassScope classScope) { CodegenMethod getComparable = getComparableWMultiKeyCodegen(forge.getSpec().getCriteria(), sorted, namedMethods, classScope); CodegenMethod method = parent.makeChildWithScope(void.class, this.getClass(), CodegenSymbolProviderEmpty.INSTANCE, classScope).addParam(EventBean.class, "theEvent").addParam(EventBean[].class, NAME_EPS).addParam(ExprEvaluatorContext.class, NAME_EXPREVALCONTEXT); method.getBlock().declareVar(Object.class, "comparable", localMethod(getComparable, REF_EPS, constantTrue(), REF_EXPREVALCONTEXT)) .declareVar(Object.class, "existing", exprDotMethod(sorted, "get", ref("comparable"))) .ifRefNull("existing").blockReturnNoValue() .ifCondition(exprDotMethod(ref("existing"), "equals", ref("theEvent"))) .exprDotMethod(sorted, "remove", ref("comparable")) .decrement(size) .ifElseIf(instanceOf(ref("existing"), ArrayDeque.class)) .declareVar(ArrayDeque.class, "q", cast(ArrayDeque.class, ref("existing"))) .exprDotMethod(ref("q"), "remove", ref("theEvent")) .ifCondition(exprDotMethod(ref("q"), "isEmpty")) .exprDotMethod(sorted, "remove", ref("comparable")) .blockEnd() .decrement(size); return method; }
public CodegenExpression evaluateGetROCollectionEventsCodegen(CodegenMethodScope parent, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { if (previousType == ExprPreviousNodePreviousType.PREV || previousType == ExprPreviousNodePreviousType.PREVTAIL || previousType == ExprPreviousNodePreviousType.PREVCOUNT) { return constantNull(); } if (previousType != ExprPreviousNodePreviousType.PREVWINDOW) { throw new IllegalStateException("Unrecognized previous type " + previousType); } CodegenMethod method = parent.makeChild(Collection.class, this.getClass(), codegenClassScope); method.getBlock().declareVar(PreviousGetterStrategy.class, "strategy", exprDotMethod(getterField(codegenClassScope), "getStrategy", exprSymbol.getAddExprEvalCtx(method))); method.getBlock().ifCondition(not(exprSymbol.getAddIsNewData(method))).blockReturn(constantNull()); CodegenBlock randomAccess = method.getBlock().ifCondition(instanceOf(ref("strategy"), RandomAccessByIndexGetter.class)); { randomAccess .declareVar(RandomAccessByIndexGetter.class, "getter", cast(RandomAccessByIndexGetter.class, ref("strategy"))) .declareVar(RandomAccessByIndex.class, "randomAccess", exprDotMethod(ref("getter"), "getAccessor")) .blockReturn(exprDotMethod(ref("randomAccess"), "getWindowCollectionReadOnly")); } CodegenBlock relativeAccess = randomAccess.ifElse(); { relativeAccess .declareVar(RelativeAccessByEventNIndexGetter.class, "getter", cast(RelativeAccessByEventNIndexGetter.class, ref("strategy"))) .declareVar(EventBean.class, "evalEvent", arrayAtIndex(exprSymbol.getAddEPS(method), constant(streamNumber))) .declareVar(RelativeAccessByEventNIndex.class, "relativeAccess", exprDotMethod(ref("getter"), "getAccessor", ref("evalEvent"))) .ifRefNullReturnNull("relativeAccess") .blockReturn(exprDotMethod(ref("relativeAccess"), "getWindowToEventCollReadOnly")); } return localMethod(method); }
private CodegenMethod referenceAddToCollCodegen(CodegenMethod parent, CodegenNamedMethods namedMethods, CodegenClassScope classScope) { CodegenMethod getComparable = getComparableWMultiKeyCodegen(forge.getSpec().getCriteria(), sorted, namedMethods, classScope); CodegenMethod method = parent.makeChildWithScope(void.class, this.getClass(), CodegenSymbolProviderEmpty.INSTANCE, classScope).addParam(EventBean.class, "theEvent").addParam(EventBean[].class, NAME_EPS).addParam(ExprEvaluatorContext.class, NAME_EXPREVALCONTEXT); method.getBlock().declareVar(Object.class, "comparable", localMethod(getComparable, REF_EPS, constantTrue(), REF_EXPREVALCONTEXT)) .declareVar(Object.class, "existing", exprDotMethod(sorted, "get", ref("comparable"))) .ifRefNull("existing") .exprDotMethod(sorted, "put", ref("comparable"), ref("theEvent")) .ifElseIf(instanceOf(ref("existing"), EventBean.class)) .declareVar(ArrayDeque.class, "coll", newInstance(ArrayDeque.class, constant(2))) .exprDotMethod(ref("coll"), "add", ref("existing")) .exprDotMethod(ref("coll"), "add", ref("theEvent")) .exprDotMethod(sorted, "put", ref("comparable"), ref("coll")) .ifElse() .declareVar(ArrayDeque.class, "q", cast(ArrayDeque.class, ref("existing"))) .exprDotMethod(ref("q"), "add", ref("theEvent")) .blockEnd() .increment(size); return method; }
public CodegenExpression evaluateCodegen(Class requiredType, CodegenMethodScope codegenMethodScope, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { Class arrayType = JavaClassHelper.getArrayType(componentReturnType); CodegenMethod methodNode = codegenMethodScope.makeChild(arrayType, InstanceManufacturerForgeArray.class, codegenClassScope); methodNode.getBlock() .declareVar(Object.class, "result", innerForge.evaluateCodegen(requiredType, methodNode, exprSymbol, codegenClassScope)) .ifCondition(not(instanceOf(ref("result"), EventBean[].class))) .blockReturn(constantNull()) .declareVar(EventBean[].class, "events", cast(EventBean[].class, ref("result"))) .declareVar(arrayType, "values", newArrayByLength(componentReturnType, arrayLength(ref("events")))) .forLoopIntSimple("i", arrayLength(ref("events"))) .assignArrayElement("values", ref("i"), cast(componentReturnType, exprDotMethod(arrayAtIndex(ref("events"), ref("i")), "getUnderlying"))) .blockEnd() .methodReturn(ref("values")); return localMethod(methodNode); }
private CodegenExpression evaluateCodegenPrevCount(Class requiredType, CodegenMethodScope parent, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { CodegenMethod method = parent.makeChild(resultType, this.getClass(), codegenClassScope); method.getBlock() .declareVar(long.class, "size", constant(0)) .declareVar(PreviousGetterStrategy.class, "strategy", exprDotMethod(getterField(codegenClassScope), "getStrategy", exprSymbol.getAddExprEvalCtx(method))); CodegenBlock randomAccess = method.getBlock().ifCondition(instanceOf(ref("strategy"), RandomAccessByIndexGetter.class)); { randomAccess .ifCondition(not(exprSymbol.getAddIsNewData(method))).blockReturn(constantNull()) .declareVar(RandomAccessByIndexGetter.class, "getter", cast(RandomAccessByIndexGetter.class, ref("strategy"))) .declareVar(RandomAccessByIndex.class, "randomAccess", exprDotMethod(ref("getter"), "getAccessor")) .assignRef("size", exprDotMethod(ref("randomAccess"), "getWindowCount")); } CodegenBlock relativeAccess = randomAccess.ifElse(); { relativeAccess .declareVar(RelativeAccessByEventNIndexGetter.class, "getter", cast(RelativeAccessByEventNIndexGetter.class, ref("strategy"))) .declareVar(EventBean.class, "evalEvent", arrayAtIndex(exprSymbol.getAddEPS(method), constant(streamNumber))) .declareVar(RelativeAccessByEventNIndex.class, "relativeAccess", exprDotMethod(ref("getter"), "getAccessor", ref("evalEvent"))) .ifRefNullReturnNull("relativeAccess") .assignRef("size", exprDotMethod(ref("relativeAccess"), "getWindowToEventCount")); } method.getBlock().methodReturn(ref("size")); return localMethod(method); }
CodegenBlock randomAccess = method.getBlock().ifCondition(instanceOf(ref("strategy"), RandomAccessByIndexGetter.class));
public void accept(CodegenBlock block) { block .ifCondition(not(exprSymbol.getAddIsNewData(method))).blockReturn(constantNull()) .declareVar(Iterator.class, EventBean.class, "events", constantNull()) .declareVar(int.class, "size", constant(0)); CodegenBlock randomAccess = method.getBlock().ifCondition(instanceOf(getter, RandomAccessByIndexGetter.class)); { randomAccess .declareVar(RandomAccessByIndexGetter.class, "getter", cast(RandomAccessByIndexGetter.class, getter)) .declareVar(RandomAccessByIndex.class, "randomAccess", exprDotMethod(ref("getter"), "getAccessor")) .assignRef("events", exprDotMethod(ref("randomAccess"), "getWindowIterator")) .assignRef("size", exprDotMethod(ref("randomAccess"), "getWindowCount")); } CodegenBlock relativeAccess = randomAccess.ifElse(); { relativeAccess .declareVar(RelativeAccessByEventNIndexGetter.class, "getter", cast(RelativeAccessByEventNIndexGetter.class, getter)) .declareVar(EventBean.class, "evalEvent", arrayAtIndex(exprSymbol.getAddEPS(method), constant(streamNumber))) .declareVar(RelativeAccessByEventNIndex.class, "relativeAccess", exprDotMethod(ref("getter"), "getAccessor", ref("evalEvent"))) .ifRefNullReturnNull("relativeAccess") .assignRef("events", exprDotMethod(ref("relativeAccess"), "getWindowToEvent")) .assignRef("size", exprDotMethod(ref("relativeAccess"), "getWindowToEventCount")); } method.getBlock().ifCondition(relational(ref("size"), LE, constant(0))) .blockReturn(constantNull()); } }
CodegenBlock ifNotNumber = forEach.ifCondition(not(instanceOf(ref("item"), Number.class))); CodegenBlock ifNotNumber = forEach.ifCondition(not(instanceOf(ref("item"), Number.class)));
public static CodegenExpression codegen(EnumOrderByAscDescEventsForge forge, EnumForgeCodegenParams args, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { Class innerBoxedType = JavaClassHelper.getBoxedType(forge.innerExpression.getEvaluationType()); ExprForgeCodegenSymbol scope = new ExprForgeCodegenSymbol(false, null); CodegenMethod methodNode = codegenMethodScope.makeChildWithScope(Collection.class, EnumOrderByAscDescEventsForgeEval.class, scope, codegenClassScope).addParam(EnumForgeCodegenNames.PARAMS); CodegenBlock block = methodNode.getBlock() .declareVar(TreeMap.class, "sort", newInstance(TreeMap.class)) .declareVar(boolean.class, "hasColl", constantFalse()); block.forEach(EventBean.class, "next", EnumForgeCodegenNames.REF_ENUMCOLL) .assignArrayElement(EnumForgeCodegenNames.REF_EPS, constant(forge.streamNumLambda), ref("next")) .declareVar(innerBoxedType, "value", forge.innerExpression.evaluateCodegen(innerBoxedType, methodNode, scope, codegenClassScope)) .declareVar(Object.class, "entry", exprDotMethod(ref("sort"), "get", ref("value"))) .ifCondition(equalsNull(ref("entry"))) .expression(exprDotMethod(ref("sort"), "put", ref("value"), ref("next"))) .blockContinue() .ifCondition(instanceOf(ref("entry"), Collection.class)) .exprDotMethod(cast(Collection.class, ref("entry")), "add", ref("next")) .blockContinue() .declareVar(Deque.class, "coll", newInstance(ArrayDeque.class, constant(2))) .exprDotMethod(ref("coll"), "add", ref("entry")) .exprDotMethod(ref("coll"), "add", ref("next")) .exprDotMethod(ref("sort"), "put", ref("value"), ref("coll")) .assignRef("hasColl", constantTrue()) .blockEnd(); block.methodReturn(staticMethod(EnumOrderByAscDescEventsForgeEval.class, "enumOrderBySortEval", ref("sort"), ref("hasColl"), constant(forge.descending))); return localMethod(methodNode, args.getEps(), args.getEnumcoll(), args.getIsNewData(), args.getExprCtx()); }
.expression(exprDotMethod(ref("sort"), "put", ref("value"), ref("next"))) .blockContinue() .ifCondition(instanceOf(ref("entry"), Collection.class)) .exprDotMethod(cast(Collection.class, ref("entry")), "add", ref("next")) .blockContinue()