private boolean matches(ProcessingEnvironment procEnv, boolean strict,
			List<? extends TypeMirror> parameterTypes,
			List<? extends TypeMirror> expectedParameterTypes) {
		for (int i = 0; i < parameterTypes.size(); i++) {
			boolean foundMatch = false;

			if (strict) {
				for (int j = 0; j < expectedParameterTypes.size(); j++) {
					if (procEnv.getTypeUtils().isSameType(
							parameterTypes.get(i),
							expectedParameterTypes.get(i))) {
						foundMatch = true;
						break;
					}
				}
			} else {
				for (int j = 0; j < expectedParameterTypes.size(); j++) {
					if (procEnv.getTypeUtils().isSubtype(parameterTypes.get(i),
							expectedParameterTypes.get(i))) {
						foundMatch = true;
						break;
					}
				}
			}

			if (!foundMatch) {
				return false;
			}
		}

		return true;
	}