koppor / jabref

Collection of simple for JabRef issues. Please submit PRs to https://github.com/jabRef/jabref/.
https://github.com/jabRef/jabref/
MIT License
8 stars 13 forks source link

Add Dagger #518

Closed koppor closed 2 months ago

koppor commented 2 years ago

Google's Dagger seems to be a nice dependency injection framework [slides].

Since @Inject is also used by Afterburner, I had to remove private at some places. The dependency injection is not complete; there needs to be proper thought about the "modules". I started with Fetchers to bundle fetchers and adding a quick hack.

Current state: Does not compile:

First error:

Error occurred during initialization of boot layer
java.lang.module.FindException: Error reading module: C:\Users\koppor\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-gradle-plugin\1.5.30\7c6c270759e7959fc772c03af640b5129f5f8b2b\kotlin-gradle-plugin-1.5.30.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Package com.google.gson.stream not found in module

According to https://stackoverflow.com/q/67647474/873282, one has to use id 'org.jetbrains.kotlin.jvm' version '1.5.30'. Then, one gets following error:

Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for C:\Users\koppor\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-native-utils\1.5.30\4440710d4ed3d1669e6e3f6a94b3e0f50af053ff\kotlin-native-utils-1.5.30.jar
Caused by: java.lang.IllegalArgumentException: kotlin.native.utils: Invalid module name: 'native' is not a Java identifier

This probably can be solved by using a different JVM. See https://github.com/JetBrains/kotlin#build-environment-requirements for details.

koppor commented 2 years ago

Example generated code:

// Generated by Dagger (https://dagger.dev).
package org.jabref.cli;

import dagger.Lazy;
import dagger.MembersInjector;
import dagger.internal.DaggerGenerated;
import dagger.internal.DoubleCheck;
import dagger.internal.InjectedFieldSignature;
import javax.inject.Provider;
import org.jabref.logic.util.BuildInfo;

@DaggerGenerated
@SuppressWarnings({
    "unchecked",
    "rawtypes"
})
public final class JabRefCLI_MembersInjector implements MembersInjector<JabRefCLI> {
  private final Provider<BuildInfo> buildInfoProvider;

  public JabRefCLI_MembersInjector(Provider<BuildInfo> buildInfoProvider) {
    this.buildInfoProvider = buildInfoProvider;
  }

  public static MembersInjector<JabRefCLI> create(Provider<BuildInfo> buildInfoProvider) {
    return new JabRefCLI_MembersInjector(buildInfoProvider);
  }

  @Override
  public void injectMembers(JabRefCLI instance) {
    injectBuildInfo(instance, DoubleCheck.lazy(buildInfoProvider));
  }

  @InjectedFieldSignature("org.jabref.cli.JabRefCLI.buildInfo")
  public static void injectBuildInfo(JabRefCLI instance, Lazy<BuildInfo> buildInfo) {
    instance.buildInfo = buildInfo;
  }
}
koppor commented 2 months ago

Superseeded by https://github.com/koppor/jabref/pull/687