class UniqueAnnotations {

    private UniqueAnnotations() {
    }

    private static final AtomicInteger NEXT_UNIQUE_VALUE = new AtomicInteger(1);

    /**
     * Returns an annotation instance that is not equal to any other annotation
     * instances, for use in creating distinct {@link org.elasticsearch.common.inject.Key}s.
     */
    public static Annotation create() {
        return create(NEXT_UNIQUE_VALUE.getAndIncrement());
    }

    static Annotation create(final int value) {
        return new Internal() {
            @Override
            public int value() {
                return value;
            }

            @Override
            public Class<? extends Annotation> annotationType() {
                return Internal.class;
            }

            @Override
            public String toString() {<FILL_FUNCTION_BODY>}

            @Override
            public boolean equals(Object o) {
                return o instanceof Internal
                        && ((Internal) o).value() == value();
            }

            @Override
            public int hashCode() {
                return (127 * "value".hashCode()) ^ value;
            }
        };
    }

    @Retention(RUNTIME)
    @BindingAnnotation
    @interface Internal {
        int value();
    }
}

                return "@" + Internal.class.getName() + "(value=" + value + ")";
            
<no_super_class>