@Override public void appendClassAnnotations(JMessage<?> message) throws GeneratorException { if (JAnnotation.isDeprecated((CAnnotatedDescriptor) message.descriptor())) { writer.appendln(JAnnotation.DEPRECATED); } writer.appendln("@SuppressWarnings(\"unused\")"); if (javaOptions.generated_annotation_version) { writer.formatln("@%s(\"%s %s\")", Generated.class.getName(), generatorOptions.generator_program_name, generatorOptions.program_version); } else { writer.formatln("@%s(\"%s\")", Generated.class.getName(), generatorOptions.generator_program_name); } writer.formatln("@%s", Immutable.class.getName()); }
/** * Get a clone (= deep copy) of the passed value. The following things are * tried for cloning: * <ol> * <li>If the object is immutable, it is returned as is (if it is a primitive * type or marked with the {@link Immutable} annotation.</li> * <li>If the object implements {@link ICloneable} it is invoked.</li> * <li>If the object implements {@link Cloneable} it is invoked.</li> * <li>If a copy constructor (a constructor taking one argument of the same * class as it declares)</li> * </ol> * If all tries fail, <code>null</code> is returned. * * @param <DATATYPE> * The source and return type * @param aObject * The object to be copied. * @return <code>null</code> if the passed value is <code>null</code> or if no * cloning could be performed. */ @Nullable public static <DATATYPE> DATATYPE getClonedValue (@Nullable final DATATYPE aObject) { // null -> null if (aObject == null) return null; final Class <?> aClass = aObject.getClass (); // special handling for immutable objects without equals or clone if (ClassHelper.isPrimitiveWrapperType (aClass) || aObject instanceof String || aClass.getAnnotation (Immutable.class) != null) return aObject; // generic clone return _getGenericClone (aObject); }