private boolean matches(ProcessingEnvironment procEnv, boolean strict,
			List<? extends TypeMirror> parameterTypes,
			List<? extends TypeMirror> expectedParameterTypes) {
		if (parameterTypes.size() != expectedParameterTypes.size()) {
			return false;
		}

		if (strict) {
			for (int i = 0; i < parameterTypes.size(); i++) {
				if (!procEnv.getTypeUtils().isSameType(
						expectedParameterTypes.get(i), parameterTypes.get(i))) {
					return false;
				}
			}
		} else {
			for (int i = 0; i < parameterTypes.size(); i++) {
				if (!procEnv.getTypeUtils().isSubtype(
						expectedParameterTypes.get(i), parameterTypes.get(i))) {
					return false;
				}
			}
		}

		return true;
	}