private void processPreserveAnnotation(Element annotatedElement) {
		TypeElement annotatedInterface = (TypeElement) annotatedElement;
		String className = eltUtils.getBinaryName(annotatedInterface) + PreserveParameterNames.PARAMETER_NAME_HOLDER_SUFFIX;

		try (Writer w = processingEnv.getFiler().createSourceFile(className, annotatedInterface).openWriter()) {
			PackageElement packageElement = eltUtils.getPackageOf(annotatedInterface);
			if (!packageElement.isUnnamed()) {
				w.write(String.format("package %s;\n", packageElement.getQualifiedName()));
			}
			w.write(String.format("public interface %s {\n", className.substring(className.lastIndexOf('.') + 1)));

			for (Element enclosedElement : annotatedInterface.getEnclosedElements()) {
				if (enclosedElement.getKind() != ElementKind.METHOD) {
					continue;
				}
				w.append("\tString[] ").append(enclosedElement.getSimpleName()).append(" = {");
				List<? extends VariableElement> parameters = ((ExecutableElement) enclosedElement).getParameters();
				for (int i = 0; i < parameters.size(); ++i) {
					if (i != 0) {
						w.append(", ");
					}
					w.append('"').append(parameters.get(i).getSimpleName()).append('"');
				}
				w.append("};\n");
			}
			w.write("}\n");
		} catch (IOException e) {
			messager.printMessage(
					Diagnostic.Kind.ERROR,
					"error while writing class " + className + ": " + e
			);
		}
	}