Piasy / AndroidTDDBootStrap

A bootstrap project for TDD Android.
MIT License
877 stars 143 forks source link

AutoValue error when compiling with Buck #16

Open tc opened 7 years ago

tc commented 7 years ago
→$./buckw build app:bin_devDebug
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/BriteDbConfig.java:12: error: package AutoValue_BriteDbConfig does not exist
        return new AutoValue_BriteDbConfig.Builder();
                                          ^
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/EventBusConfig.java:11: error: package AutoValue_EventBusConfig does not exist
        return new AutoValue_EventBusConfig.Builder();
                                           ^
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/GsonConfig.java:14: error: package AutoValue_GsonConfig does not exist
        return new AutoValue_GsonConfig.Builder();
                                       ^
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/HttpClientConfig.java:11: error: package AutoValue_HttpClientConfig does not exist
        return new AutoValue_HttpClientConfig.Builder();
                                             ^
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/RetrofitConfig.java:11: error: package AutoValue_RetrofitConfig does not exist
        return new AutoValue_RetrofitConfig.Builder();
                                           ^
Errors: 5. Warnings: 0.

BUILD FAILED: //base:src_release failed with exit code 1:
javac
stderr: /Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/BriteDbConfig.java:12: error: package AutoValue_BriteDbConfig does not exist
        return new AutoValue_BriteDbConfig.Builder();
                                          ^
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/EventBusConfig.java:11: error: package AutoValue_EventBusConfig does not exist
        return new AutoValue_EventBusConfig.Builder();
                                           ^
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/GsonConfig.java:14: error: package AutoValue_GsonConfig does not exist
        return new AutoValue_GsonConfig.Builder();
                                       ^
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/HttpClientConfig.java:11: error: package AutoValue_HttpClientConfig does not exist
        return new AutoValue_HttpClientConfig.Builder();
                                             ^
/Users/tommy/src/android/AndroidTDDBootStrap/base/src/main/java/com/github/piasy/bootstrap/base/model/provider/RetrofitConfig.java:11: error: package AutoValue_RetrofitConfig does not exist
        return new AutoValue_RetrofitConfig.Builder();
                                           ^
Errors: 5. Warnings: 0.

[-] PROCESSING BUCK FILES...FINISHED 0.1s
[-] DOWNLOADING... (0.00 B/S AVG, TOTAL: 0.00 B, 0 Artifacts)
[-] BUILDING...FINISHED 4.5s [100%] (435/445 JOBS, 0 UPDATED, 0 [0.0%] CACHE MISS)
Piasy commented 7 years ago

It builds on my local machine, are you on macOS? what's your buck version?

tc commented 7 years ago

I'm on sierras

→$./buckw --version
buck version 2221f806fe81b4b639d4e4b5d1eacc5ff5f9a6cc
Piasy commented 7 years ago

That's strange, I try your buck version, it builds well on my machine.

Could you please provide /base/BUCK file content?

tc commented 7 years ago
java_library(
    name = 'apt_jar_debug',
    deps = [
        '//.okbuck/cache:com.google.auto.auto-common-0.6.jar',
        '//.okbuck/cache:com.google.auto.service.auto-service-1.0-rc2.jar',
        '//.okbuck/cache:com.google.auto.value.auto-value-1.3.jar',
        '//.okbuck/cache:com.google.dagger.dagger-2.8.jar',
        '//.okbuck/cache:com.google.dagger.dagger-compiler-2.8.jar',
        '//.okbuck/cache:com.google.dagger.dagger-producers-2.8.jar',
        '//.okbuck/cache:com.google.guava.guava-20.0-rc1.jar',
        '//.okbuck/cache:com.ryanharter.auto.value.auto-value-parcel-0.2.5.jar',
        '//.okbuck/cache:com.ryanharter.auto.value.auto-value-parcel-adapter-0.2.5.jar',
        '//.okbuck/cache:com.squareup.javapoet-1.8.0.jar',
        '//.okbuck/cache:javax.inject.javax.inject-1.jar',
        '//.okbuck/cache:org.apache.commons.commons-lang3-3.4.jar',
    ],
)

android_resource(
    name = 'res_main',
    package = 'com.github.piasy.bootstrap.base',
    resource_union = True,
    deps = [
        '//.okbuck/cache:com.android.support.animated-vector-drawable-25.1.0.aar',
        '//.okbuck/cache:com.android.support.appcompat-v7-25.1.0.aar',
        '//.okbuck/cache:com.android.support.recyclerview-v7-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-compat-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-core-ui-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-core-utils-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-fragment-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-media-compat-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-v4-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-vector-drawable-25.1.0.aar',
        '//.okbuck/cache:com.facebook.stetho.stetho-1.4.2.aar',
        '//.okbuck/cache:com.facebook.stetho.stetho-okhttp3-1.4.2.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Component-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Dagger2-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Rx-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.safelyandroid-1.2.4.aar',
        '//.okbuck/cache:com.github.yatatsu.autobundle-4.0.0.aar',
        '//.okbuck/cache:com.jakewharton.butterknife-8.4.0.aar',
        '//.okbuck/cache:com.jakewharton.rxbinding.rxbinding-1.0.0.aar',
        '//.okbuck/cache:com.jakewharton.rxbinding.rxbinding-appcompat-v7-1.0.0.aar',
        '//.okbuck/cache:com.jakewharton.threetenabp.threetenabp-1.0.4.aar',
        '//.okbuck/cache:com.jakewharton.timber.timber-4.5.0.aar',
        '//.okbuck/cache:com.squareup.sqlbrite.sqlbrite-1.1.1.aar',
        '//.okbuck/cache:com.squareup.sqldelight.runtime-0.5.1.aar',
        '//.okbuck/cache:com.vanniktech.onactivityresult-0.6.0.aar',
        '//.okbuck/cache:com.vinaysshenoy.mugen-1.0.3.aar',
        '//.okbuck/cache:io.reactivex.rxandroid-1.2.1.aar',
        '//.okbuck/cache:io.reactivex.rxjava2.rxandroid-2.0.1.aar',
    ],
    visibility = [
        'PUBLIC',
    ],
)

android_build_config(
    name = 'build_config_debug',
    package = 'com.github.piasy.bootstrap.base',
    values = [
        'String APPLICATION_ID = "com.github.piasy.bootstrap.base"',
        'String BUILD_TYPE = "debug"',
        'String FLAVOR = ""',
        'int VERSION_CODE = 1',
        'String VERSION_NAME = "1.0.0"',
    ],
    visibility = [
        'PUBLIC',
    ],
)

android_library(
    name = 'src_debug',
    srcs = glob([
        'src/main/java/**/*.java',
    ]),
    manifest = 'build/okbuck/debug/AndroidManifest.xml',
    annotation_processors = [
        'dagger.internal.codegen.ComponentProcessor',
    ],
    annotation_processor_deps = [
        ':apt_jar_debug',
    ],
    provided_deps = [
        '//.okbuck/cache/retrolambda:rt-stub.jar',
        '//.okbuck/cache:com.google.auto.value.auto-value-1.3.jar',
    ],
    source = '8',
    target = '8',
    postprocess_classes_commands = [
        '(read CLASSES_DIR && java -Dretrolambda.inputDir=$CLASSES_DIR -Dretrolambda.classpath="${COMPILATION_BOOTCLASSPATH}":"${COMPILATION_CLASSPATH}":"${CLASSES_DIR}" -jar .okbuck/cache/retrolambda/retrolambda-2.3.0.jar) <<<',
    ],
    deps = [
        '//.okbuck/cache:com.android.support.animated-vector-drawable-25.1.0.aar',
        '//.okbuck/cache:com.android.support.appcompat-v7-25.1.0.aar',
        '//.okbuck/cache:com.android.support.recyclerview-v7-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-annotations-25.1.0.jar',
        '//.okbuck/cache:com.android.support.support-compat-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-core-ui-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-core-utils-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-fragment-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-media-compat-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-v4-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-vector-drawable-25.1.0.aar',
        '//.okbuck/cache:com.facebook.stetho.stetho-1.4.2.aar',
        '//.okbuck/cache:com.facebook.stetho.stetho-okhttp3-1.4.2.aar',
        '//.okbuck/cache:com.github.akarnokd.rxjava2-interop-0.8.3.jar',
        '//.okbuck/cache:com.github.mrmike.ok2curl-0.2.3.jar',
        '//.okbuck/cache:com.github.piasy.YaMvp-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Component-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Dagger2-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Rx-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.safelyandroid-1.2.4.aar',
        '//.okbuck/cache:com.github.yatatsu.autobundle-4.0.0.aar',
        '//.okbuck/cache:com.github.yatatsu.autobundle-annotations-4.0.0.jar',
        '//.okbuck/cache:com.google.code.gson.gson-2.8.0.jar',
        '//.okbuck/cache:com.google.dagger.dagger-2.8.jar',
        '//.okbuck/cache:com.jakewharton.butterknife-8.4.0.aar',
        '//.okbuck/cache:com.jakewharton.butterknife-annotations-8.4.0.jar',
        '//.okbuck/cache:com.jakewharton.retrofit.retrofit2-rxjava2-adapter-1.0.0.jar',
        '//.okbuck/cache:com.jakewharton.rxbinding.rxbinding-1.0.0.aar',
        '//.okbuck/cache:com.jakewharton.rxbinding.rxbinding-appcompat-v7-1.0.0.aar',
        '//.okbuck/cache:com.jakewharton.threetenabp.threetenabp-1.0.4.aar',
        '//.okbuck/cache:com.jakewharton.timber.timber-4.5.0.aar',
        '//.okbuck/cache:com.squareup.okhttp3.logging-interceptor-3.5.0.jar',
        '//.okbuck/cache:com.squareup.okhttp3.okhttp-3.5.0.jar',
        '//.okbuck/cache:com.squareup.okio.okio-1.11.0.jar',
        '//.okbuck/cache:com.squareup.retrofit2.converter-gson-2.1.0.jar',
        '//.okbuck/cache:com.squareup.retrofit2.retrofit-2.1.0.jar',
        '//.okbuck/cache:com.squareup.sqlbrite.sqlbrite-1.1.1.aar',
        '//.okbuck/cache:com.squareup.sqldelight.runtime-0.5.1.aar',
        '//.okbuck/cache:com.vanniktech.onactivityresult-0.6.0.aar',
        '//.okbuck/cache:com.vanniktech.onactivityresult-annotations-0.6.0.jar',
        '//.okbuck/cache:com.vinaysshenoy.mugen-1.0.3.aar',
        '//.okbuck/cache:commons-cli.commons-cli-1.2.jar',
        '//.okbuck/cache:io.reactivex.rxandroid-1.2.1.aar',
        '//.okbuck/cache:io.reactivex.rxjava-1.2.5.jar',
        '//.okbuck/cache:io.reactivex.rxjava2.rxandroid-2.0.1.aar',
        '//.okbuck/cache:io.reactivex.rxjava2.rxjava-2.0.4.jar',
        '//.okbuck/cache:javax.inject.javax.inject-1.jar',
        '//.okbuck/cache:org.glassfish.javax.annotation-10.0-b28.jar',
        '//.okbuck/cache:org.greenrobot.eventbus-3.0.0.jar',
        '//.okbuck/cache:org.reactivestreams.reactive-streams-1.0.0.jar',
        '//.okbuck/cache:org.threeten.threetenbp-1.3.2-no-tzdb.jar',
        ':build_config_debug',
        ':res_main',
    ],
    visibility = [
        'PUBLIC',
    ],
)

genrule(
    name = 'lint_debug',
    srcs = [
        'src/main/java',
        'build/okbuck/debug',
    ],
    out = 'lint_debug_out',
    bash = '' \
    'export ANDROID_LINT_JARS="$(location //.okbuck/cache:com.jakewharton.butterknife-8.4.0-lint.jar):$(location //.okbuck/cache:com.jakewharton.timber.timber-4.5.0-lint.jar)"; ' \
    'mkdir -p $OUT; ' \
    'exec java ' \
    '-Djava.awt.headless=true ' \
    '-Xmx1024m ' \
    '-classpath $(location //.okbuck/cache/lint:okbuck_lint) ' \
    'com.android.tools.lint.Main ' \
    '--classpath $(location :src_debug) ' \
    '--exitcode ' \
    '--fullpath ' \
    '--config $(location //.okbuck/cache/lint:AndroidCodeQualityConfig_quality_lint_lint.xml) ' \
    '--xml "$OUT/lint-results.xml" ' \
    '--html "$OUT/lint-results.html" ' \
    '--sources src/main/java ' \
    'build/okbuck/debug ' \
    '',
)

java_library(
    name = 'apt_jar_release',
    deps = [
        '//.okbuck/cache:com.google.auto.auto-common-0.6.jar',
        '//.okbuck/cache:com.google.auto.service.auto-service-1.0-rc2.jar',
        '//.okbuck/cache:com.google.auto.value.auto-value-1.3.jar',
        '//.okbuck/cache:com.google.dagger.dagger-2.8.jar',
        '//.okbuck/cache:com.google.dagger.dagger-compiler-2.8.jar',
        '//.okbuck/cache:com.google.dagger.dagger-producers-2.8.jar',
        '//.okbuck/cache:com.google.guava.guava-20.0-rc1.jar',
        '//.okbuck/cache:com.ryanharter.auto.value.auto-value-parcel-0.2.5.jar',
        '//.okbuck/cache:com.ryanharter.auto.value.auto-value-parcel-adapter-0.2.5.jar',
        '//.okbuck/cache:com.squareup.javapoet-1.8.0.jar',
        '//.okbuck/cache:javax.inject.javax.inject-1.jar',
        '//.okbuck/cache:org.apache.commons.commons-lang3-3.4.jar',
    ],
)

android_build_config(
    name = 'build_config_release',
    package = 'com.github.piasy.bootstrap.base',
    values = [
        'String APPLICATION_ID = "com.github.piasy.bootstrap.base"',
        'String BUILD_TYPE = "release"',
        'String FLAVOR = ""',
        'int VERSION_CODE = 1',
        'String VERSION_NAME = "1.0.0"',
    ],
    visibility = [
        'PUBLIC',
    ],
)

android_library(
    name = 'src_release',
    srcs = glob([
        'src/main/java/**/*.java',
    ]),
    manifest = 'build/okbuck/release/AndroidManifest.xml',
    annotation_processors = [
        'dagger.internal.codegen.ComponentProcessor',
    ],
    annotation_processor_deps = [
        ':apt_jar_release',
    ],
    provided_deps = [
        '//.okbuck/cache/retrolambda:rt-stub.jar',
        '//.okbuck/cache:com.google.auto.value.auto-value-1.3.jar',
    ],
    source = '8',
    target = '8',
    postprocess_classes_commands = [
        '(read CLASSES_DIR && java -Dretrolambda.inputDir=$CLASSES_DIR -Dretrolambda.classpath="${COMPILATION_BOOTCLASSPATH}":"${COMPILATION_CLASSPATH}":"${CLASSES_DIR}" -jar .okbuck/cache/retrolambda/retrolambda-2.3.0.jar) <<<',
    ],
    deps = [
        '//.okbuck/cache:com.android.support.animated-vector-drawable-25.1.0.aar',
        '//.okbuck/cache:com.android.support.appcompat-v7-25.1.0.aar',
        '//.okbuck/cache:com.android.support.recyclerview-v7-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-annotations-25.1.0.jar',
        '//.okbuck/cache:com.android.support.support-compat-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-core-ui-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-core-utils-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-fragment-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-media-compat-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-v4-25.1.0.aar',
        '//.okbuck/cache:com.android.support.support-vector-drawable-25.1.0.aar',
        '//.okbuck/cache:com.facebook.stetho.stetho-1.4.2.aar',
        '//.okbuck/cache:com.facebook.stetho.stetho-okhttp3-1.4.2.aar',
        '//.okbuck/cache:com.github.akarnokd.rxjava2-interop-0.8.3.jar',
        '//.okbuck/cache:com.github.mrmike.ok2curl-0.2.3.jar',
        '//.okbuck/cache:com.github.piasy.YaMvp-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Component-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Dagger2-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.YaMvp-Rx-1.3.1.aar',
        '//.okbuck/cache:com.github.piasy.safelyandroid-1.2.4.aar',
        '//.okbuck/cache:com.github.yatatsu.autobundle-4.0.0.aar',
        '//.okbuck/cache:com.github.yatatsu.autobundle-annotations-4.0.0.jar',
        '//.okbuck/cache:com.google.code.gson.gson-2.8.0.jar',
        '//.okbuck/cache:com.google.dagger.dagger-2.8.jar',
        '//.okbuck/cache:com.jakewharton.butterknife-8.4.0.aar',
        '//.okbuck/cache:com.jakewharton.butterknife-annotations-8.4.0.jar',
        '//.okbuck/cache:com.jakewharton.retrofit.retrofit2-rxjava2-adapter-1.0.0.jar',
        '//.okbuck/cache:com.jakewharton.rxbinding.rxbinding-1.0.0.aar',
        '//.okbuck/cache:com.jakewharton.rxbinding.rxbinding-appcompat-v7-1.0.0.aar',
        '//.okbuck/cache:com.jakewharton.threetenabp.threetenabp-1.0.4.aar',
        '//.okbuck/cache:com.jakewharton.timber.timber-4.5.0.aar',
        '//.okbuck/cache:com.squareup.okhttp3.logging-interceptor-3.5.0.jar',
        '//.okbuck/cache:com.squareup.okhttp3.okhttp-3.5.0.jar',
        '//.okbuck/cache:com.squareup.okio.okio-1.11.0.jar',
        '//.okbuck/cache:com.squareup.retrofit2.converter-gson-2.1.0.jar',
        '//.okbuck/cache:com.squareup.retrofit2.retrofit-2.1.0.jar',
        '//.okbuck/cache:com.squareup.sqlbrite.sqlbrite-1.1.1.aar',
        '//.okbuck/cache:com.squareup.sqldelight.runtime-0.5.1.aar',
        '//.okbuck/cache:com.vanniktech.onactivityresult-0.6.0.aar',
        '//.okbuck/cache:com.vanniktech.onactivityresult-annotations-0.6.0.jar',
        '//.okbuck/cache:com.vinaysshenoy.mugen-1.0.3.aar',
        '//.okbuck/cache:commons-cli.commons-cli-1.2.jar',
        '//.okbuck/cache:io.reactivex.rxandroid-1.2.1.aar',
        '//.okbuck/cache:io.reactivex.rxjava-1.2.5.jar',
        '//.okbuck/cache:io.reactivex.rxjava2.rxandroid-2.0.1.aar',
        '//.okbuck/cache:io.reactivex.rxjava2.rxjava-2.0.4.jar',
        '//.okbuck/cache:javax.inject.javax.inject-1.jar',
        '//.okbuck/cache:org.glassfish.javax.annotation-10.0-b28.jar',
        '//.okbuck/cache:org.greenrobot.eventbus-3.0.0.jar',
        '//.okbuck/cache:org.reactivestreams.reactive-streams-1.0.0.jar',
        '//.okbuck/cache:org.threeten.threetenbp-1.3.2-no-tzdb.jar',
        ':build_config_release',
        ':res_main',
    ],
    visibility = [
        'PUBLIC',
    ],
)

genrule(
    name = 'lint_release',
    srcs = [
        'src/main/java',
        'build/okbuck/release',
    ],
    out = 'lint_release_out',
    bash = '' \
    'export ANDROID_LINT_JARS="$(location //.okbuck/cache:com.jakewharton.butterknife-8.4.0-lint.jar):$(location //.okbuck/cache:com.jakewharton.timber.timber-4.5.0-lint.jar)"; ' \
    'mkdir -p $OUT; ' \
    'exec java ' \
    '-Djava.awt.headless=true ' \
    '-Xmx1024m ' \
    '-classpath $(location //.okbuck/cache/lint:okbuck_lint) ' \
    'com.android.tools.lint.Main ' \
    '--classpath $(location :src_release) ' \
    '--exitcode ' \
    '--fullpath ' \
    '--config $(location //.okbuck/cache/lint:AndroidCodeQualityConfig_quality_lint_lint.xml) ' \
    '--xml "$OUT/lint-results.xml" ' \
    '--html "$OUT/lint-results.html" ' \
    '--sources src/main/java ' \
    'build/okbuck/release ' \
    '',
)
Piasy commented 7 years ago

I see, the annotation_processors of src_debug and src_release is somehow not complete, it should be:

    annotation_processors = [
        'com.google.auto.value.processor.AutoAnnotationProcessor',
        'com.google.auto.value.processor.AutoValueBuilderProcessor',
        'com.google.auto.value.processor.AutoValueProcessor',
        'dagger.internal.codegen.ComponentProcessor',
    ],

but it is:

    annotation_processors = [
        'dagger.internal.codegen.ComponentProcessor',
    ],

so of course auto-value won't work, and thus some classes are not generated.

I suggest you delete all BUCK files in each module, and delete the buck-out, .okbuck, .buckd dirs, then try again.

tc commented 7 years ago

I deleted all the BUCK files and the buck-out, .okbuck and .buckd; re-generated buck with ./gradlew :buckWrapper same error

I did manually replace:

    annotation_processors = [
        'dagger.internal.codegen.ComponentProcessor',
    ],

with

    annotation_processors = [
        'com.google.auto.value.processor.AutoAnnotationProcessor',
        'com.google.auto.value.processor.AutoValueBuilderProcessor',
        'com.google.auto.value.processor.AutoValueProcessor',
        'dagger.internal.codegen.ComponentProcessor',
    ],

and it compiled.

Piasy commented 7 years ago

That's really strange.