diff --git a/RealWorldAppKotlin/build.gradle b/RealWorldAppKotlin/build.gradle index 7ccf137..4a13e3d 100644 --- a/RealWorldAppKotlin/build.gradle +++ b/RealWorldAppKotlin/build.gradle @@ -16,7 +16,9 @@ buildscript { repositories { + jcenter() mavenCentral() + google() } } diff --git a/app/build.gradle b/app/build.gradle index 56e20ad..cb030f3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,7 +27,7 @@ android { defaultConfig { applicationId "it.cosenonjaviste.daggeroverride" - minSdkVersion 14 + minSdkVersion 24 targetSdkVersion 27 versionCode 1 versionName "1.0" diff --git a/build.gradle b/build.gradle index c7b9d99..3ed19ed 100644 --- a/build.gradle +++ b/build.gradle @@ -17,13 +17,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.2.61' + ext.kotlin_version = '1.3.11' repositories { jcenter() google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.4' + classpath 'com.android.tools.build:gradle:3.2.1' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -34,6 +34,7 @@ buildscript { allprojects { repositories { jcenter() + mavenCentral() maven { url 'https://jitpack.io' } google() } diff --git a/daggermock-kotlin/build.gradle b/daggermock-kotlin/build.gradle index 2cd81c1..69ca925 100644 --- a/daggermock-kotlin/build.gradle +++ b/daggermock-kotlin/build.gradle @@ -21,8 +21,8 @@ apply plugin: 'com.github.dcendents.android-maven' group='com.github.fabioCollini.daggermock' -sourceCompatibility = 1.7 -targetCompatibility = 1.7 +sourceCompatibility = 1.8 +targetCompatibility = 1.8 dependencies { compileOnly "org.mockito:mockito-core:$MOCKITO_VERSION" @@ -30,7 +30,7 @@ dependencies { compileOnly "com.google.dagger:dagger:$DAGGER_VERSION" compile project(':daggermock') - compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" + compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } task sourcesJar(type: Jar, dependsOn: classes) { diff --git a/daggermock/build.gradle b/daggermock/build.gradle index 58fdff1..55d6b78 100644 --- a/daggermock/build.gradle +++ b/daggermock/build.gradle @@ -22,10 +22,11 @@ apply plugin: 'com.github.dcendents.android-maven' group='com.github.fabioCollini.daggermock' -sourceCompatibility = 1.7 -targetCompatibility = 1.7 +sourceCompatibility = 1.8 +targetCompatibility = 1.8 dependencies { + compileOnly 'com.android.support:support-annotations:28.0.0' compileOnly "org.mockito:mockito-core:$MOCKITO_VERSION" compileOnly 'junit:junit:4.12' compileOnly "com.google.dagger:dagger:$DAGGER_VERSION" diff --git a/daggermock/src/main/java/it/cosenonjaviste/daggermock/ObjectWrapper.java b/daggermock/src/main/java/it/cosenonjaviste/daggermock/ObjectWrapper.java index 35d76fe..5197907 100644 --- a/daggermock/src/main/java/it/cosenonjaviste/daggermock/ObjectWrapper.java +++ b/daggermock/src/main/java/it/cosenonjaviste/daggermock/ObjectWrapper.java @@ -21,6 +21,7 @@ import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.util.Arrays; import java.util.List; import javax.inject.Provider; @@ -172,11 +173,24 @@ public Field getField(Class fieldClass) { return null; } + @android.support.annotation.RequiresApi(api = 24) public ObjectWrapper invokeBuilderSetter(Class parameterClass, Object parameter) { try { - Method setMethod = getSetterMethod(obj, parameterClass); - setMethod.setAccessible(true); - return new ObjectWrapper((T) setMethod.invoke(obj, parameter)); + Class aClass = obj.getClass(); + Method[] methods = aClass.getMethods(); + String name = parameterClass.getSimpleName(); + Method method = Arrays.stream(methods).filter(m -> m.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + if(method != null) { + method.setAccessible(true); + return new ObjectWrapper((T) method.invoke(obj, parameter)); + } else { + Field[] declaredFields = aClass.getDeclaredFields(); + Field field = Arrays.stream(declaredFields).filter(m -> m.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + if(field == null) throw new Exception("Method or field not found"); + field.setAccessible(true); + field.set(obj, parameter); + return new ObjectWrapper<>(obj); + } } catch (Exception e) { throw new RuntimeException("Error invoking setter with parameter " + parameterClass + " on object " + obj, e); }