LoginSignup
8
1

More than 5 years have passed since last update.

Retrolambdaでlambda式を使用した場合にLintでjava.lang.UnsupportedOperationExceptionが発生する場合の対処方法

Last updated at Posted at 2016-11-30

概要

Retrolambdaをプロジェクトに導入してlambda式を使用した場合、Android Lintで以下のようなExceptionが発生しました。

Failed converting ECJ parse tree to Lombok for file /path/to/lambda式使用したファイル
java.lang.UnsupportedOperationException: Unknown ASTNode child: LambdaExpression

ビルド自体は通るのですが、Lintの実行時間にも影響ができるので解決策を調べてみました。

解決方法

解決方法としては、https://github.com/evant/android-retrolambda-lombokを利用します。具体的にはbuild.gradleを以下のように変更します。

buildscript {
    repositories {
        jcenter()
        ...
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:<version>'
        classpath "me.tatarka:gradle-retrolambda:<version>"
        classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
    }

    // Exclude the version that the android plugin depends on.
    configurations.classpath.exclude group: 'com.android.tools.external.lombok'
}

gradle-retrolambdaのissues#96を読んでみたのですが、Android Lintが依存しているlombok.astがJava8の構文に対応していないのが原因のようです(JackをEnableにしても同じ問題が起きる?)。https://github.com/evant/android-retrolambda-lombokはlombok-astをforkしてJava8の構文を追加したもので、それをLintが依存しているものと置き換えています。

参考

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1