/** * Return all calls that have a parameter with given type * * @param clazz * @param resolve * @return * @throws ConstructionFailedException */ public Set<GenericAccessibleObject<?>> getCallsFor(GenericClass clazz, boolean resolve) throws ConstructionFailedException { logger.debug("Getting calls for " + clazz); if (clazz.hasWildcardOrTypeVariables()) { logger.debug("Resolving generic type before getting modifiers"); GenericClass concreteClass = clazz.getGenericInstantiation(); if (!concreteClass.equals(clazz)) return getCallsFor(concreteClass, false); } if (isSpecialCase(clazz)) { logger.debug("Getting modifiers for special case " + clazz); return getCallsForSpecialCase(clazz); } logger.debug("Getting modifiers for regular case " + clazz); if (!modifiers.containsKey(clazz)) { return determineGenericModifiersFor(clazz); } return modifiers.get(clazz); }
public GenericAccessibleObject<?> getRandomCallFor(GenericClass clazz, TestCase test, int position) throws ConstructionFailedException { Set<GenericAccessibleObject<?>> calls = getCallsFor(clazz, true); Iterator<GenericAccessibleObject<?>> iter = calls.iterator(); while(iter.hasNext()) { GenericAccessibleObject<?> gao = iter.next(); if (! ConstraintVerifier.isValidPositionForInsertion(gao,test,position)){ iter.remove(); } } if (calls.isEmpty()) { throw new ConstructionFailedException("No modifiers for " + clazz); } logger.debug("Possible modifiers for " + clazz + ": " + calls); GenericAccessibleObject<?> call = Randomness.choice(calls); if (call.hasTypeParameters()) { logger.debug("Modifier has type parameters"); call = call.getGenericInstantiation(clazz); } return call; }