/** * 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; /** * A class that is annotated with this annotation will be used to create a component lifecycle that * is made up of other components. * <p>A class that is annotated with {@link LayoutSpec} must implement a method with the * {@link OnCreateLayout} annotation. It may also implement methods with the following annotations: * - {@link OnLoadStyle} * - {@link OnEvent} * <p>If you wish to create a component that mounts its own content, then use {@link MountSpec} * instead. * <p>For example: * <code> * * {@literal @}LayoutSpec * public class MyComponentSpec { * * {@literal @}OnCreateLayout * ComponentLayout onCreateLayout(LayoutContext c, @Prop MyProp prop) { * return Row.create(c) * .alignItems(FLEX_START) * .child(someChild1) * .child(someChild2) * .build(); * } * } * </code> */ @Retention(RetentionPolicy.RUNTIME) public @interface LayoutSpec { String value() default ""; /** * @return Boolean indicating whether the generated class should be public. If not, it will be * package-private. */ boolean isPublic() default true; /** * @return Boolean indicating Whether the component implements a pure render function. If this is * true and the Component didn't change during an update of the ComponentTree measurements and * LayoutOutputs will be reused instead of being calculated again. */ boolean isPureRender() default false; /** * @return List of event POJOs this component can dispatch. Used to generate event dispatch * methods. */ Class<?>[] events() default {}; }