티스토리 뷰

반응형

프로젝트에 데이터바인딩을 적용 후 다음과 같은 에러가 발생했다.

Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
   > java.lang.reflect.InvocationTargetException (no error message)

처음에는 gradle 문제인 줄 알고 gradle을 이것저것 바꿔보고, 구글링 해보니 room 문제라는 말도 있어서 room 파일들도 다시 한 번 살펴봤는데 오류가 해결되지 않았다. 그러다가 오류를 더 자세하게 확인해 아래 오류 메시지를 보고 데이터바인딩 문제라는 것을 알게 되었다.

^error: cannot generate view binders java.lang.ClassCastException: class android.databinding.tool.expr.IdentifierExpr cannot be cast to class android.databinding.tool.expr.StaticIdentifierExpr (android.databinding.tool.expr.IdentifierExpr and android.databinding.tool.expr.StaticIdentifierExpr are in unnamed module of loader java.net.URLClassLoader @1e459626)
  	at android.databinding.tool.expr.ExprModel.staticIdentifier(ExprModel.java:212)
  	at android.databinding.tool.expr.ExprModel.addImport(ExprModel.java:374)
  	at android.databinding.tool.expr.ExprModel.staticIdentifierFor(ExprModel.java:284)
  	at android.databinding.tool.expr.FieldAccessExpr.replaceStaticIdentifier(FieldAccessExpr.java:313)
  	at android.databinding.tool.expr.FieldAccessExpr.resolveType(FieldAccessExpr.java:298)
  	at android.databinding.tool.expr.Expr.lambda$getResolvedType$0(Expr.java:378)
  	at android.databinding.tool.reflection.RecursiveResolutionStack.visit(RecursiveTraversal.kt:86)
  	at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:371)
  	at android.databinding.tool.expr.Expr.unwrapChildTo(Expr.java:931)
  	at android.databinding.tool.expr.Expr.unwrapObservableFieldChildren(Expr.java:908)
  	at android.databinding.tool.expr.Expr.lambda$getResolvedType$0(Expr.java:375)
  	at android.databinding.tool.reflection.RecursiveResolutionStack.visit(RecursiveTraversal.kt:86)
  	at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:371)
  	at android.databinding.tool.BindingTarget.resolveMultiSetters(BindingTarget.java:214)
  	at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:154)
  	at android.databinding.tool.DataBinder.<init>(DataBinder.java:61)
  	at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:118)
  	at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:370)
  	at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:244)
  	at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:126)
  	at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:246)
  	at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:231)
  	at android.databinding.annotationprocessor.ProcessDataBinding.doProcess(ProcessDataBinding.java:112)
  	at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:87)
  	at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt:90)
  	at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:166)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:980)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:896)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1222)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1335)
  	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)
  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  	at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:81)
  	at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:31)
  	at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:45)
  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  	at org.jetbrains.kotlin.gradle.internal.KaptExecution.run(KaptWithoutKotlincTask.kt:227)
  	at org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction.execute(KaptWithoutKotlincTask.kt:193)

 

데이터바인딩의 어느 부분이 문제인가 했더니, xml에 잘못된 type을 변수로 사용해서 생긴 문제였다. (참고)

<data>
    <variable
        name="view"
        type="android.view.View" />
</data>

데이터에 따라 textView의 visibility를 설정해주기 위해 view를 사용했는데 이 경우에는 view를 variable로 사용하는 게 아니라 import해야 하는 거였다.

 

<data>
    <import type="android.view.View" />
</data>

위와 같이 수정해서 문제를 해결했다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함