/** * 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.processor; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; import java.util.ArrayList; import java.util.List; import com.facebook.litho.specmodels.internal.ImmutableList; import com.facebook.litho.annotations.PropDefault; import com.facebook.litho.specmodels.model.PropDefaultModel; import com.squareup.javapoet.TypeName; /** * Extracts prop defaults from the given input. */ public class PropDefaultsExtractor { /** * Get the prop defaults from the given {@link TypeElement}. */ public static ImmutableList<PropDefaultModel> getPropDefaults(TypeElement typeElement) { final List<PropDefaultModel> propDefaults = new ArrayList<>(); final List<? extends Element> enclosedElements = typeElement.getEnclosedElements(); for (Element enclosedElement : enclosedElements) { if (enclosedElement.getKind() != ElementKind.FIELD) { continue; } final VariableElement variableElement = (VariableElement) enclosedElement; if (variableElement.getAnnotation(PropDefault.class) == null) { continue; } propDefaults.add( new PropDefaultModel( TypeName.get(variableElement.asType()), variableElement.getSimpleName().toString(), ImmutableList.copyOf(new ArrayList<>(variableElement.getModifiers())), variableElement)); } return ImmutableList.copyOf(propDefaults); } }