static boolean isAggregateMethod(MethodSignature sig) { return sig.equals(streamSumInt) || sig.equals(streamSumDouble) || sig.equals(streamSumLong) || sig.equals(streamSumBigInteger) || sig.equals(streamSumBigDecimal) || sig.equals(streamMax) || sig.equals(streamMin) || sig.equals(streamAvg) || sig.equals(streamCount); }
@Override public boolean isFluentChaining(MethodSignature sig) { if (TransformationClassAnalyzer.stringBuilderAppendString.equals(sig)) return true; return false; }
private boolean isAggregateMethod(MethodSignature sig) { return sig.equals(MethodChecker.streamSumInt) || sig.equals(MethodChecker.streamSumDouble) || sig.equals(MethodChecker.streamSumLong) || sig.equals(MethodChecker.streamSumBigInteger) || sig.equals(MethodChecker.streamSumBigDecimal) || sig.equals(MethodChecker.streamMax) || sig.equals(MethodChecker.streamMin) || sig.equals(MethodChecker.streamAvg) || sig.equals(MethodChecker.streamCount); }
@Override public boolean isFluentChaining(MethodSignature sig) { if (TransformationClassAnalyzer.stringBuilderAppendString.equals(sig)) return true; return false; }
private boolean isStreamMethod(MethodSignature sig) { return sig.equals(MethodChecker.streamDistinct) || sig.equals(MethodChecker.streamSelect) || sig.equals(MethodChecker.streamSelectWithSource) || sig.equals(MethodChecker.streamSelectAll) || sig.equals(MethodChecker.streamSelectAllWithSource) || sig.equals(MethodChecker.streamSelectAllList) || sig.equals(MethodChecker.streamWhere) || sig.equals(MethodChecker.streamWhereWithSource) || sig.equals(MethodChecker.streamJoin) || sig.equals(MethodChecker.streamJoinWithSource) || sig.equals(MethodChecker.streamJoinList); }
@Override public OperationSideEffect isStaticMethodSafe(MethodSignature m) { if (isObjectEqualsSafe && (objectsEquals.equals(m) || guavaObjectsEqual.equals(m))) { return OperationSideEffect.NONE; } return (safeStaticMethods.contains(m) || jpqlFunctionStaticMethods.contains(m)) ? OperationSideEffect.NONE : OperationSideEffect.UNSAFE; }
@Override public ColumnExpressions<?> staticMethodCallValue(StaticMethodCallValue val, SymbExPassDown in) throws TypedValueVisitorException { MethodSignature sig = val.getSignature(); if (sig.equals(ScalaMetamodelUtil.BOX_TO_INTEGER) || sig.equals(ScalaMetamodelUtil.BOX_TO_LONG) || sig.equals(ScalaMetamodelUtil.BOX_TO_DOUBLE) || sig.equals(ScalaMetamodelUtil.BOX_TO_BOOLEAN) || sig.equals(ScalaMetamodelUtil.UNBOX_TO_INTEGER) || sig.equals(ScalaMetamodelUtil.UNBOX_TO_LONG) || sig.equals(ScalaMetamodelUtil.UNBOX_TO_DOUBLE) || sig.equals(ScalaMetamodelUtil.UNBOX_TO_BOOLEAN)) { SymbExPassDown passdown = SymbExPassDown.with(val, in.isExpectingConditional); ColumnExpressions<?> base = val.args.get(0).visit(this, passdown); return base; } return super.staticMethodCallValue(val, in); }
@Override public boolean isFluentChaining(MethodSignature sig) { if (ScalaMetamodelUtil.STRINGBUILDER_APPEND.equals(sig)) return true; return super.isFluentChaining(sig); }
public boolean equals(String owner, String name, String desc) { return equals(new MethodSignature(owner, name, desc)); }
if (sig.equals(TransformationClassAnalyzer.newBigDecimalLong) || sig.equals(TransformationClassAnalyzer.newBigDecimalInt) || sig.equals(TransformationClassAnalyzer.newBigDecimalBigInteger)) else if (sig.equals(TransformationClassAnalyzer.bigDecimalDoubleValue) || sig.equals(TransformationClassAnalyzer.bigIntegerDoubleValue)) if (sig.equals(TransformationClassAnalyzer.bigIntegerValueOfLong))
@Override public JPQLQuery<?> staticMethodCallValue(MethodCallValue.StaticMethodCallValue val, SymbExPassDown in) throws TypedValueVisitorException { MethodSignature sig = val.getSignature(); if (sig.equals(TransformationClassAnalyzer.streamFrom)) { JPQLQuery<?> nLink = handlePossibleNavigationalLink(val.args.get(0), true, in); if (nLink != null) return nLink; } else if (sig.equals(TransformationClassAnalyzer.streamOf)) { JPQLQuery<?> nLink = handlePossibleNavigationalLink(val.args.get(0), false, in); if (nLink != null) return nLink; } return super.staticMethodCallValue(val, in); }
@Override public Boolean staticMethodCallValue(StaticMethodCallValue val, Boolean in) throws RuntimeException { if (val.getSignature().equals(TransformationClassAnalyzer.booleanValueOf)) return true; return super.staticMethodCallValue(val, in); } @Override
if (sig.equals(TransformationClassAnalyzer.newBigDecimalLong) || sig.equals(TransformationClassAnalyzer.newBigDecimalInt) || sig.equals(TransformationClassAnalyzer.newBigDecimalBigInteger)) else if (sig.equals(TransformationClassAnalyzer.bigDecimalDoubleValue) || sig.equals(TransformationClassAnalyzer.bigIntegerDoubleValue)) if (sig.equals(TransformationClassAnalyzer.bigIntegerValueOfLong))
@Override public ColumnExpressions<?> staticMethodCallValue(MethodCallValue.StaticMethodCallValue val, Void in) throws TypedValueVisitorException { MethodSignature sig = val.getSignature(); if (sig.equals(TransformationClassAnalyzer.integerValueOf) || sig.equals(TransformationClassAnalyzer.doubleValueOf)) { // Integer.valueOf() to be like a cast and assume it's correct ColumnExpressions<?> base = val.args.get(0).visit(this, in); return base; } // else if (TransformationClassAnalyzer.stringLike.equals(sig)) // { // SQLColumnValues sql = new SQLColumnValues(new SQLReader.BooleanSQLReader()); // sql.add("("); // sql.add(val.args.get(0).visit(this, in)); // sql.add(")"); // sql.add(" LIKE "); // sql.add("("); // sql.add(val.args.get(1).visit(this, in)); // sql.add(")"); // return sql; // } else return super.staticMethodCallValue(val, in); }
else if (isObjectEqualsSafe && objectEquals.equals(m))
private void analyzeConstructor(MethodAnalysisResults analysis) throws QueryTransformException { if (analysis == null) throw new QueryTransformException("Symbolic execution of constructor failed"); if (analysis.paths.size() != 1) throw new QueryTransformException("Symbolic execution of constructor failed"); for (MethodSideEffect effect: analysis.paths.get(0).getSideEffects()) { if (effect instanceof MethodSideEffectCall) { MethodSideEffectCall call = (MethodSideEffectCall) effect; if (call.m.equals(abstractFunction1Constructor)) continue; } else if (effect instanceof MethodSideEffectFieldAssign) { // Assigning to local fields is safe as long as the constructed object doesn't escape the lambda. continue; } else throw new QueryTransformException("Lambda calls a constructor with unknown side-effects"); } }
if (sig.equals(TransformationClassAnalyzer.integerValueOf) || sig.equals(TransformationClassAnalyzer.longValueOf) || sig.equals(TransformationClassAnalyzer.floatValueOf) || sig.equals(TransformationClassAnalyzer.doubleValueOf) || sig.equals(TransformationClassAnalyzer.booleanValueOf)) else if (sig.equals(TransformationClassAnalyzer.bigIntegerValueOfLong)) else if (sig.equals(MethodChecker.stringValueOfObject)) if (sig.equals(MethodChecker.jpqlLike)) else if (sig.equals(MethodChecker.jpqlIsIn) || sig.equals(MethodChecker.jpqlIsInList) || sig.equals(MethodChecker.jpqlListContains)) boolean isItemFirst = (sig.equals(MethodChecker.jpqlIsIn) || sig.equals(MethodChecker.jpqlIsInList)); boolean isExpectingStream = (sig.equals(MethodChecker.jpqlIsIn)); TypedValue listVal = (isItemFirst ? val.args.get(1) : val.args.get(0)); TypedValue itemVal = (isItemFirst ? val.args.get(0) : val.args.get(1)); return handleIsIn(val, listVal, itemVal, isExpectingStream); else if (sig.equals(MethodChecker.mathAbsDouble) || sig.equals(MethodChecker.mathAbsInt) || sig.equals(MethodChecker.mathAbsLong)) else if (sig.equals(MethodChecker.mathSqrt))
if (isExpectingStream) if (MetamodelUtil.inQueryStream.equals(sig)) if (sig.equals(MethodChecker.streamDistinct)) else if (sig.equals(MethodChecker.streamSelect)) else if (sig.equals(MethodChecker.streamSelectWithSource)) else if (sig.equals(MethodChecker.streamSelectAll)) else if (sig.equals(MethodChecker.streamSelectAllWithSource)) else if (sig.equals(MethodChecker.streamSelectAllList)) else if (sig.equals(MethodChecker.streamWhere)) else if (sig.equals(MethodChecker.streamWhereWithSource)) else if (sig.equals(MethodChecker.streamJoin)) else if (sig.equals(MethodChecker.streamJoinWithSource)) else if (sig.equals(MethodChecker.streamJoinList))
if (ScalaMetamodelUtil.INQUERYSTREAMSOURCE_STREAM.equals(sig)) else if (ScalaMetamodelUtil.ITERABLE_TO_JINQ.equals(sig)) else if (ScalaMetamodelUtil.STREAM_OF.equals(sig)) if (sig.equals(ScalaMetamodelUtil.streamDistinct)) else if (sig.equals(ScalaMetamodelUtil.streamSelect)) else if (sig.equals(ScalaMetamodelUtil.streamWhere)) else if (sig.equals(ScalaMetamodelUtil.streamJoin)) else if (sig.equals(ScalaMetamodelUtil.streamSelectAll))