public ExtraBindingTarget createTargetClass(TypeElement typeElement) { final String classPackage = compilerUtil.getPackageName(typeElement); final String className = compilerUtil.getClassName(typeElement, classPackage); return new ExtraBindingTarget(classPackage, className); }
private void emitBind(TypeSpec.Builder builder) { MethodSpec.Builder bindBuilder = MethodSpec.methodBuilder("bind") .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .addParameter(ClassName.get(Dart.Finder.class), "finder") .addParameter(ClassName.bestGuess(target.getFQN() + DART_MODEL_SUFFIX), "target") .addParameter(ClassName.get(Object.class), "source"); if (target.parentPackage != null) { // Emit a call to the superclass binder, if any. bindBuilder.addStatement( "$T.bind(finder, target, source)", ClassName.bestGuess( target.getParentFQN() + DART_MODEL_SUFFIX + Dart.EXTRA_BINDER_SUFFIX)); } // Local variable in which all extras will be temporarily stored. bindBuilder.addStatement("Object object"); // Loop over each extras binding and emit it. for (ExtraInjection binding : target.bindingMap.values()) { emitExtraInjection(bindBuilder, binding); } builder.addMethod(bindBuilder.build()); }
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); }
private void emitInitialStateGetter(TypeSpec.Builder intentBuilderTypeBuilder) { MethodSpec.Builder initialStateGetterForHensonBuilder = MethodSpec.methodBuilder(INITIAL_STATE_METHOD) .addModifiers(Modifier.PUBLIC) .addModifiers(Modifier.STATIC) .addParameter(get("android.content", "Context"), "context") .returns(get(target.classPackage, builderClassName(), INITIAL_STATE_CLASS)); initialStateGetterForHensonBuilder.addStatement( "final $T intent = new $T(context, getClassDynamically($S))", ClassName.get("android.content", "Intent"), ClassName.get("android.content", "Intent"), target.getFQN()); initialStateGetterForHensonBuilder.addStatement( "final $T bundler = $T.create()", Bundler.class, Bundler.class); initialStateGetterForHensonBuilder.addStatement( "return new $L(bundler, intent)", INITIAL_STATE_CLASS); intentBuilderTypeBuilder.addMethod(initialStateGetterForHensonBuilder.build()); }
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); }
@Before public void setup() { final ExtraBindingTarget extraBindingTarget = new ExtraBindingTarget("foo", "barNavigationModel"); extraBinderGenerator = new ExtraBinderGenerator(extraBindingTarget); }