Skip to content

Commit 682dc7e

Browse files
committed
Convert the compatibility package to Kotlin
1 parent 012d710 commit 682dc7e

File tree

3 files changed

+44
-46
lines changed

3 files changed

+44
-46
lines changed

src/main/java/com/developerphil/adbidea/compatibility/BackwardCompatibleGetter.java

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.developerphil.adbidea.compatibility
2+
3+
import org.joor.ReflectException
4+
5+
/**
6+
* Abstracts the logic to call the current implementation and fall back on reflection for previous versions
7+
*/
8+
abstract class BackwardCompatibleGetter<T> {
9+
fun get(): T {
10+
return try {
11+
getCurrentImplementation()
12+
} catch (error: LinkageError) {
13+
getPreviousImplementation()
14+
} catch (e: Throwable) {
15+
if (isReflectiveException(e)) {
16+
getPreviousImplementation()
17+
} else {
18+
throw RuntimeException(e)
19+
}
20+
}
21+
}
22+
23+
private fun isReflectiveException(t: Throwable): Boolean {
24+
return t is ClassNotFoundException ||
25+
t is NoSuchFieldException ||
26+
t is LinkageError ||
27+
t is NoSuchMethodException ||
28+
t is ReflectException
29+
}
30+
31+
abstract fun getCurrentImplementation() : T
32+
33+
abstract fun getPreviousImplementation() : T
34+
}

src/test/kotlin/com/developerphil/adbidea/compatibility/BackwardCompatibleGetterTest.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ class BackwardCompatibleGetterTest {
99
@Test
1010
fun onlyCallCurrentImplementationWhenItIsValid() {
1111
var value = false
12-
object : BackwardCompatibleGetter<Boolean?>() {
13-
override fun getCurrentImplementation(): Boolean? {
12+
object : BackwardCompatibleGetter<Boolean>() {
13+
override fun getCurrentImplementation(): Boolean {
1414
value = true
1515
return true
1616
}
1717

18-
override fun getPreviousImplementation(): Boolean? {
18+
override fun getPreviousImplementation(): Boolean {
1919
fail("should not be called")
2020
return true
2121
}
@@ -34,26 +34,26 @@ class BackwardCompatibleGetterTest {
3434

3535
@Test(expected = RuntimeException::class)
3636
fun throwExceptionsWhenTheyAreNotRelatedToBackwardCompatibility() {
37-
object : BackwardCompatibleGetter<Boolean?>() {
38-
override fun getCurrentImplementation(): Boolean? {
37+
object : BackwardCompatibleGetter<Boolean>() {
38+
override fun getCurrentImplementation(): Boolean {
3939
throw RuntimeException("exception!")
4040
}
4141

42-
override fun getPreviousImplementation(): Boolean? {
42+
override fun getPreviousImplementation(): Boolean {
4343
fail("should not be called")
44-
return true
44+
return false
4545
}
4646
}.get()
4747
}
4848

4949
private fun expectPreviousImplementationIsCalledFor(throwable: Throwable) {
5050
var value = false
51-
object : BackwardCompatibleGetter<Boolean?>() {
52-
override fun getCurrentImplementation(): Boolean? {
51+
object : BackwardCompatibleGetter<Boolean>() {
52+
override fun getCurrentImplementation(): Boolean {
5353
throw throwable
5454
}
5555

56-
override fun getPreviousImplementation(): Boolean? {
56+
override fun getPreviousImplementation(): Boolean {
5757
value = true
5858
return true
5959
}

0 commit comments

Comments
 (0)