@Override public OperationSideEffect isMethodSafe(MethodSignature m, TypedValue base, List<TypedValue> args) { OperationSideEffect effect = super.isMethodSafe(m, base, args); if (effect != OperationSideEffect.UNSAFE) return effect; try { Class<?> c = Class.forName(m.getOwnerType().getClassName()); if ("<init>".equals(m.name) && (Function1.class.isAssignableFrom(c) || Function2.class.isAssignableFrom(c)) ) return OperationSideEffect.SAFE; } catch (ClassNotFoundException e) { // We could not analyze the method, so we can't figure out if it's safe return OperationSideEffect.UNSAFE; } return effect; }
public static Method asmMethodSignatureToReflectionMethod(MethodSignature m) throws ClassNotFoundException, NoSuchMethodException { Class<?> reflectedClass = Class.forName(m.getOwnerType().getClassName()); Type []argTypes = Type.getMethodType(m.desc).getArgumentTypes(); Class<?> []argClasses = new Class[argTypes.length]; for (int n = 0; n < argTypes.length; n++) argClasses[n] = asmTypeToClass(argTypes[n]); return reflectedClass.getMethod(m.name, argClasses); }
Type [] argTypes = Type.getMethodType(sig.desc).getArgumentTypes(); MethodChecker checker = metamodel.getMethodChecker(isObjectEqualsSafe, isAllEqualsSafe, isCollectionContainsSafe); TypedValue fakeBase = new TypedValue.ArgValue(sig.getOwnerType(), 0); List<TypedValue> fakeArgs = new ArrayList<>(); for (int n = 0; n < argTypes.length; n++)
try { Map<String, TypedValue> indirectParamMapping = config.findLambdaAsClassConstructorParameters(lambdaConstructor.getSignature(), lambdaConstructor.args); lambda = LambdaAnalysis.analyzeClassAsLambda(config.metamodel, config.alternateClassLoader, config.isObjectEqualsSafe, config.isAllEqualsSafe, config.isCollectionContainsSafe, new LambdaAnalysis.LambdaAsClassAnalysisConfig(), lambdaConstructor.getSignature().getOwnerType().getClassName(), indirectParamMapping, true); } catch (Exception e)
try { Map<String, TypedValue> indirectParamMapping = config.findLambdaAsClassConstructorParameters(lambdaConstructor.getSignature(), lambdaConstructor.args); lambda = LambdaAnalysis.analyzeClassAsLambda(config.metamodel, config.alternateClassLoader, config.isObjectEqualsSafe, config.isAllEqualsSafe, config.isCollectionContainsSafe, new LambdaAnalysis.LambdaAsClassAnalysisConfig(), lambdaConstructor.getSignature().getOwnerType().getClassName(), indirectParamMapping, true); } catch (Exception e)