/**
* Copyright (c) 2017-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.litho.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Annotates a parameter to a component's spec method indicating that it will be supplied as a prop
* for this component.
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Prop {
/**
* Whether this prop can be omitted by the caller to the component, making it take its default
* value.
*
* If a prop is declared optional, its default value will be the standard default initialization
* value according to the Java standard (e.g. 0, false, null). If a constant annotated with
* {@link PropDefault} and named the same as the prop is in the class it will override the
* default value.
*/
boolean optional() default false;
/**
* Marks this prop as one that corresponding to a specific Android resource type, and therefore
* generates various helper methods to initialize it.
*
* For example, a {@link CharSequence} prop named "title" may be marked as {@link ResType#STRING}.
* This will make the component have not only method "title(CharSequence)" but also various
* methods that enable initializing the prop from a resource or attribute:
* {@code
* titleRes(@StringRes int resId)
* titleRes(@StringRes int resId, Object... formatArgs)
* titleAttr(@AttrRes int attrResId, @StringRes int defResId)
* titleAttr(@AttrRes int attrResId)
* }
*/
ResType resType() default ResType.NONE;
String docString() default "";
/**
* Marks this prop as one supporting a variable number of arguments, and therefore adds methods
* to make it easier to build lists of this argument.
*
* For example, having {@code @Prop(@varArg="name") List<CharSequence> names} would generate
* an {@code name} method which can be called multiple times to add a set of names. These props
* should be a parameterized list with a resource type of {@code resType = ResType.NONE}.
*/
String varArg() default "";
}