private void reflectClassWrapper(Map<Type, Set<GeneTrait>> genePool, String className, int parameterCount, List<String> parameterTypes, int parametersSet) throws ClassNotFoundException
	{
		// This wrapper takes care of running reflectClass() for all possible combinations of parameter types on classes that are parameterized (Java generics)
		if (parametersSet < parameterCount)
		{
			// Recurse!
			for (BreedingClassSetup classSetup : Settings.getSettings().getClasses())
			{
				if (!rawTypesClassMap.containsKey(classSetup.className))
				{
					// Raw types are not supported by Java generics, so skip those
					if (parameterTypes.size() >= parametersSet + 1)
					{
						parameterTypes.remove(parametersSet);
					}

					parameterTypes.add(parametersSet, classSetup.className);
					reflectClassWrapper(genePool, className, parameterCount, parameterTypes, parametersSet + 1);
				}
			}
		}
		else
		{
			Class<?> clazz = rawTypesClassMap.get(className);

			if (clazz == null)
			{
				clazz = Class.forName(className);
			}

			Type classType = Type.getType(className + ((parameterCount == 0) ? "" : ("<" + Tools.implode(parameterTypes, ",") + ">")));
			reflectClass(genePool, clazz, className, classType, parameterTypes);
		}
	}