private Map<TypeElement, ExtraBindingTarget> findAndParseTargets() { Map<TypeElement, ExtraBindingTarget> targetClassMap = new LinkedHashMap<>(); dartModelUtil.parseDartModelAnnotatedTypes(targetClassMap); bindExtraUtil.parseBindExtraAnnotatedElements(targetClassMap); extraBindingTargetUtil.createBindingTargetTrees(targetClassMap); extraBindingTargetUtil.addClosestRequiredAncestorForTargets(targetClassMap); return targetClassMap; }
private void parseDartModel( TypeElement element, Map<TypeElement, ExtraBindingTarget> targetClassMap) { // The ExtraBindingTarget was already created, @BindExtra processed first if (targetClassMap.containsKey(element)) { return; } // Verify common generated code restrictions. if (!isValidUsageOfDartModel(element)) { return; } // Assemble information on the binding point. final ExtraBindingTarget navigationModelTarget = extraBindingTargetUtil.createTargetClass(element); targetClassMap.put(element, navigationModelTarget); }
public void addClosestRequiredAncestorForTargets( Map<TypeElement, ExtraBindingTarget> targetClassMap) { for (Map.Entry<TypeElement, ExtraBindingTarget> target : targetClassMap.entrySet()) { final TypeElement element = target.getKey(); final ExtraBindingTarget extraBindingTarget = target.getValue(); if (extraBindingTarget.topLevel) { // check if parent is outside the current module if (extraBindingTarget.parentPackage != null) { setClosestRequiredAncestor(extraBindingTarget, getIntentBuilder(element.getSuperclass())); } spreadClosestRequiredAncestorToChildren(targetClassMap, extraBindingTarget); } } }
@Override public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); final CompilerUtil compilerUtil = new CompilerUtil(processingEnv); final ParcelerUtil parcelerUtil = new ParcelerUtil(compilerUtil, processingEnv, usesParcelerOption); loggingUtil = new LoggingUtil(processingEnv); fileUtil = new FileUtil(processingEnv); extraBindingTargetUtil = new ExtraBindingTargetUtil(compilerUtil, processingEnv, loggingUtil); dartModelUtil = new DartModelUtil(loggingUtil, extraBindingTargetUtil, compilerUtil); bindExtraUtil = new BindExtraUtil( compilerUtil, parcelerUtil, loggingUtil, extraBindingTargetUtil, dartModelUtil); }
private Map<TypeElement, ExtraBindingTarget> findAndParseTargets() { Map<TypeElement, ExtraBindingTarget> targetClassMap = new LinkedHashMap<>(); dartModelUtil.parseDartModelAnnotatedTypes(targetClassMap); bindExtraUtil.parseBindExtraAnnotatedElements(targetClassMap); extraBindingTargetUtil.createBindingTargetTrees(targetClassMap); return targetClassMap; }
private void spreadClosestRequiredAncestorToChildren( Map<TypeElement, ExtraBindingTarget> targetClassMap, ExtraBindingTarget extraBindingTarget) { for (TypeElement child : extraBindingTarget.childClasses) { final ExtraBindingTarget childTarget = targetClassMap.get(child); if (extraBindingTarget.hasRequiredFields) { childTarget.closestRequiredAncestorPackage = extraBindingTarget.classPackage; childTarget.closestRequiredAncestorClass = extraBindingTarget.className; } else { childTarget.closestRequiredAncestorPackage = extraBindingTarget.closestRequiredAncestorPackage; childTarget.closestRequiredAncestorClass = extraBindingTarget.closestRequiredAncestorClass; } spreadClosestRequiredAncestorToChildren(targetClassMap, childTarget); } }
public void createBindingTargetTrees(Map<TypeElement, ExtraBindingTarget> targetClassMap) { final Set<TypeElement> targetTypeElements = targetClassMap.keySet(); for (TypeElement typeElement : targetTypeElements) { TypeElement parentTypeElement = compilerUtil.findParent(typeElement, targetTypeElements); if (parentTypeElement != null) { final ExtraBindingTarget target = targetClassMap.get(typeElement); final ExtraBindingTarget parentTarget = targetClassMap.get(parentTypeElement); target.parentPackage = parentTarget.classPackage; target.parentClass = parentTarget.className; parentTarget.addChild(typeElement); } } checkForParentsOutside(targetClassMap); }
if (getIntentBuilder(superType) == null) { loggingUtil.error( element,
@Override public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); final CompilerUtil compilerUtil = new CompilerUtil(processingEnv); final ParcelerUtil parcelerUtil = new ParcelerUtil(compilerUtil, processingEnv, usesParceler); loggingUtil = new LoggingUtil(processingEnv); fileUtil = new FileUtil(processingEnv); extraBindingTargetUtil = new ExtraBindingTargetUtil(compilerUtil, processingEnv, loggingUtil); dartModelUtil = new DartModelUtil(loggingUtil, extraBindingTargetUtil, compilerUtil); bindExtraUtil = new BindExtraUtil( compilerUtil, parcelerUtil, loggingUtil, extraBindingTargetUtil, dartModelUtil); parseAnnotationProcessorOptions(processingEnv); }
public void parseInjectExtra( Element element, Map<TypeElement, ExtraBindingTarget> targetClassMap) { // Verify common generated code restrictions. if (!isValidUsageOfBindExtra(element)) { return; } final TypeElement enclosingElement = (TypeElement) element.getEnclosingElement(); ExtraBindingTarget extraBindingTarget = targetClassMap.get(enclosingElement); if (extraBindingTarget == null) { // The ExtraBindingTarget was already created, @DartModel processed first if (!dartModelUtil.isValidUsageOfDartModel(enclosingElement)) { return; } extraBindingTarget = extraBindingTargetUtil.createTargetClass(enclosingElement); targetClassMap.put(enclosingElement, extraBindingTarget); } final String annotationValue = element.getAnnotation(BindExtra.class).value(); final String name = element.getSimpleName().toString(); final String key = StringUtil.isNullOrEmpty(annotationValue) ? name : annotationValue; final TypeMirror type = element.asType(); final boolean required = isRequiredInjection(element); final boolean parcel = parcelerUtil.isParcelerAvailable() && parcelerUtil.isValidExtraTypeForParceler(type); extraBindingTarget.addField(key, name, type, required, parcel); }