/**
* 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.specmodels.model;
import java.util.List;
import com.facebook.litho.specmodels.internal.ImmutableList;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;
/**
* A model that represents a ComponentSpec.
*/
public interface SpecModel {
/**
* @return the name of the spec.
*/
String getSpecName();
/**
* @return the {@link TypeName} representing the name of the Spec.
*/
TypeName getSpecTypeName();
/**
* @return the name of the component that will be generated from this model.
*/
String getComponentName();
/**
* @return the {@link TypeName} representing the name of the component that will be generated
* from this model.
*/
TypeName getComponentTypeName();
/**
* @return the list of methods defined in the spec which will be delegated to by the component
* that is generated from this model.
*/
ImmutableList<DelegateMethodModel> getDelegateMethods();
/**
* @return the list of event methods defined by the spec.
*/
ImmutableList<EventMethodModel> getEventMethods();
/**
* @return the list of methods defined in the spec for updating state.
*/
ImmutableList<UpdateStateMethodModel> getUpdateStateMethods();
/**
* @return the set of props that are defined by the spec.
*/
ImmutableList<PropModel> getProps();
/**
* @return the set of prop defaults defined by the spec.
*/
ImmutableList<PropDefaultModel> getPropDefaults();
/**
* @return the type variables that are defined by the spec.
*/
ImmutableList<TypeVariableName> getTypeVariables();
/**
* @return the set of state values that are defined by the spec.
*/
ImmutableList<StateParamModel> getStateValues();
/**
* @return the set of inter-stage inputs that are defined by the spec.
*/
ImmutableList<InterStageInputParamModel> getInterStageInputs();
/**
* @return the set of tree props that are defined by the spec.
*/
ImmutableList<TreePropModel> getTreeProps();
/**
* @return the set of events that are defined by the spec.
*/
ImmutableList<EventDeclarationModel> getEventDeclarations();
/**
* @return the javadoc for this spec.
*/
String getClassJavadoc();
/**
* @return the javadoc for the props defined by the spec.
*/
ImmutableList<PropJavadocModel> getPropJavadocs();
/**
* @return whether the generated class should be public or not.
*/
boolean isPublic();
/**
* @return the {@link ClassName} of the context that is used in the generated class.
*/
ClassName getContextClass();
/**
* @return the {@link ClassName} of the component that is used in the generated class.
*/
ClassName getComponentClass();
/**
* @return the {@link ClassName} of the state container class that is used in the generated class.
*/
ClassName getStateContainerClass();
/**
* @return the {@link TypeName} of the update state interface that is used in the generated class.
*/
TypeName getUpdateStateInterface();
/**
* @return true if the generated class supports styling, false otherwise.
*/
boolean isStylingSupported();
/**
* @return whether this spec uses dependency injection.
*/
boolean hasInjectedDependencies();
/**
* @return null if this spec does not use dependency injection, otherwise return the generator
* that should be used to generate the correct methods for dependency injection to work for
* this component.
*/
DependencyInjectionHelper getDependencyInjectionHelper();
/**
* @return the element that this model represents.
*/
Object getRepresentedObject();
/**
* @return a list of errors in the spec model. If the list is empty, then this model is valid.
*/
List<SpecModelValidationError> validate();
/**
* @return a {@link TypeSpec} representing the class that is generated by
* this model.
*/
TypeSpec generate();
}