+
+ «/*
+ * If we have patterns, we need to apply them to the value field. This is a sad
+ * consequence of how this code is structured.
+ */
+ IF genTO.typedef && !allProperties.empty && allProperties.size == 1 && allProperties.get(0).name.equals("value")»
+
+ «Preconditions.importedName».checkNotNull(_value, "Supplied value may not be null");
+
+ «FOR c : consts»
+ «IF c.name == TypeConstants.PATTERN_CONSTANT_NAME && c.value instanceof List<?>»
+ boolean valid = false;
+ for (Pattern p : patterns) {
+ if (p.matcher(_value).matches()) {
+ valid = true;
+ break;
+ }
+ }
+
+ «Preconditions.importedName».checkArgument(valid, "Supplied value \"%s\" does not match any of the permitted patterns %s", _value, «TypeConstants.PATTERN_CONSTANT_NAME»);
+ «ENDIF»
+ «ENDFOR»
+ «ENDIF»
+
+ «FOR p : properties»
+ «IF p.returnType.importedName.contains("[]")»
+ this.«p.fieldName» = «p.fieldName» == null ? null : «p.fieldName».clone();
+ «ELSE»