2017-04-09 32 views
1

我试图创建注释处理器将处理我的MVP意见(片段),以自动生成的子组件(类似于https://github.com/lukaspili/Auto-Dagger2,但对于新匕首2.10 Android的注射器匕首2.10子发生器 - 喷油器验证失败

到目前为止,我已经能够产生相应的文件,但编译生成的组件

Error:(22, 58) error: @dagger.android.support.FragmentKey methods should bind dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>, not dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>. See google.github.io/dagger/android

当一个奇怪的错误消息工厂模块和子文件的结构应该是正确的,因为只要我复制粘贴生成的类并创建常规类(包括工厂模块和子组件)并使用实际类而不是生成的类,则不再显示消息,并且编译成功

好像问题出在AndroidMapKeyValidatorlink),其中!MoreTypes.equivalence().equivalent(returnType, intendedReturnType)通话显然失败了,但我没有太多的经验,调试标注的处理器,所以我不知道为什么恰恰...

也许任何人都可以帮助在哪里寻找问题? 感谢

FYI:MyFragment并延长android.support.v4.app.Fragment


我的文件:

生成的工厂 @Module public interface BuildersModule { @Binds @IntoMap @FragmentKey(MyFragment.class) abstract AndroidInjector.Factory<? extends Fragment> factory(MySubcomponent.Builder builder); }

生成子 @Subcomponent(modules = MyModule.class) public interface MySubcomponent extends AndroidInjector<MyFragment> { MyPresenter presenter(); @Subcomponent.Builder abstract class Builder extends AndroidInjector.Builder<MyFragment> {} }

+0

@我无法为您提供帮助,但我对您的解决方案感兴趣,您是否会考虑在开放源代码的情况下让它工作? –

+1

@ScottCooper当然,它计划作为我正在https:// github上工作的AMF项目的一部分。com/Team-SOFTsk/AMF – doodeec

+0

有关在此处调试问题的小更新https://github.com/google/dagger/issues/689 – doodeec

回答

1

如果有人INTE休息在解决方案:

我发现,由于某些原因,ClassType -s在项目的编译时间比较引用是不一样的时验证生成的方法。

尽管它们指向同一类,但这些引用在EqualVisitor.visitDeclared方法中的auto-common库中检查是否相等。显然,这可能是auto-common中的一个错误,因为visitDeclared中的元素通过对象引用进行比较,但不是类型引用。

所以这里的解决方法是auto-common使用本地固定副本排除原始库的依赖关系。

//TODO think if this is the correct solution to cast both elements 
//return aElement.equals(bElement) 
return ((TypeElement) aElement).getQualifiedName().equals(((TypeElement) bElement).getQualifiedName()) 
     && equal(a.getEnclosingType(), b.getEnclosingType(), newVisiting) 
     && equalLists(a.getTypeArguments(), b.getTypeArguments(), newVisiting); 


我还是要查,为什么这些提法是不一样的,我也想在 auto-common提交问题之前,如何平等检查可以适当地 auto-common是固定的(我只使用了一个quickfix)回购。