Problem/Solution: Add support to inject flags of Java Enum types
JIRA Issues: CSL-10078
Differential Revision: https://phabricator.twitter.biz/D530205
166 | 166 | } |
|
167 | 167 | } |
|
168 | 168 | ||
169 | + | /** |
|
170 | + | * Create a Flaggable of Java Enum. |
|
171 | + | * @param clazz The [[java.lang.Enum]] class. |
|
172 | + | * @note [[java.lang.Enum]] enumeration constant value look up is case insensitive. |
|
173 | + | */ |
|
174 | + | def ofJavaEnum[T <: Enum[T]](clazz: Class[T]): Flaggable[T] = |
|
175 | + | mandatory { s: String => |
|
176 | + | clazz.getEnumConstants.find(_.name.equalsIgnoreCase(s)) match { |
|
177 | + | case Some(prop) => prop |
|
178 | + | case _ => |
|
179 | + | throw new IllegalArgumentException( |
|
180 | + | s"The property $s does not belong to Java Enum ${clazz.getName}, the constants defined " + |
|
181 | + | s"in the class are: ${clazz.getEnumConstants.toSeq}.") |
|
182 | + | } |
|
183 | + | } |
|
184 | + | ||
169 | 185 | private[app] class SetFlaggable[T: Flaggable] extends Flaggable[Set[T]] { |
|
170 | 186 | private val flag = implicitly[Flaggable[T]] |
|
171 | 187 | assert(flag.default.isEmpty) |
openjdk11= TRAVIS_OS_NAME=linux
TRAVIS_OS_NAME=linux openjdk8=