Skip to content

Commit 327b58d

Browse files
committed
Adopt <T : Any> across the codebase.
1 parent 9c22297 commit 327b58d

File tree

4 files changed

+29
-22
lines changed

4 files changed

+29
-22
lines changed

atplug-runtime/src/main/java/com/diffplug/atplug/PlugInstanceMap.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ class PlugInstanceMap {
1515
descriptors.add(descriptor)
1616
}
1717

18-
fun <T> putInstance(clazz: Class<T>, descriptor: PlugDescriptor, instance: T) {
18+
fun <T : Any> putInstance(clazz: Class<T>, descriptor: PlugDescriptor, instance: T) {
1919
putDescriptor(clazz.name, descriptor)
20-
instanceMap[descriptor] = instance!!
20+
instanceMap[descriptor] = instance
2121
}
2222

2323
fun instanceFor(plugDescriptor: PlugDescriptor) = instanceMap[plugDescriptor]

atplug-runtime/src/main/java/com/diffplug/atplug/PlugRegistry.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,21 @@ import java.util.jar.Manifest
1515
import java.util.zip.ZipException
1616

1717
interface PlugRegistry {
18-
fun <T> registerSocket(socketClass: Class<T>, socketOwner: SocketOwner<T>)
18+
fun <T : Any> registerSocket(socketClass: Class<T>, socketOwner: SocketOwner<T>)
1919

20-
fun <T> instantiatePlug(socketClass: Class<T>, plugDescriptor: PlugDescriptor): T
20+
fun <T : Any> instantiatePlug(socketClass: Class<T>, plugDescriptor: PlugDescriptor): T
2121

2222
companion object {
2323
private val instance: Lazy<PlugRegistry> = lazy { Eager() }
2424

25-
internal fun <T> registerSocket(socketClass: Class<T>, socketOwner: SocketOwner<T>) {
25+
internal fun <T : Any> registerSocket(socketClass: Class<T>, socketOwner: SocketOwner<T>) {
2626
instance.value.registerSocket(socketClass, socketOwner)
2727
}
2828

29-
internal fun <T> instantiatePlug(socketClass: Class<T>, plugDescriptor: PlugDescriptor): T {
29+
internal fun <T : Any> instantiatePlug(
30+
socketClass: Class<T>,
31+
plugDescriptor: PlugDescriptor
32+
): T {
3033
return instance.value.instantiatePlug(socketClass, plugDescriptor)
3134
}
3235

@@ -113,23 +116,26 @@ interface PlugRegistry {
113116
return PlugDescriptor.fromJson(serviceFileContent)
114117
}
115118

116-
override fun <T> registerSocket(socketClass: Class<T>, socketOwner: SocketOwner<T>) {
119+
override fun <T : Any> registerSocket(socketClass: Class<T>, socketOwner: SocketOwner<T>) {
117120
synchronized(this) {
118121
val prevOwner = owners.put(socketClass.name, socketOwner)
119122
assert(prevOwner == null) { "Multiple owners registered for $socketClass" }
120123
data.descriptorMap[socketClass.name]?.forEach(socketOwner::doRegister)
121124
}
122125
}
123126

124-
override fun <T> instantiatePlug(socketClass: Class<T>, plugDescriptor: PlugDescriptor): T {
127+
override fun <T : Any> instantiatePlug(
128+
socketClass: Class<T>,
129+
plugDescriptor: PlugDescriptor
130+
): T {
125131
val value =
126132
lastHarness?.instanceFor(plugDescriptor)
127133
?: instantiate(Class.forName(plugDescriptor.implementation))
128134
assert(socketClass.isInstance(value))
129135
return value as T
130136
}
131137

132-
private fun <T> instantiate(clazz: Class<out T>): T {
138+
private fun <T : Any> instantiate(clazz: Class<out T>): T {
133139
var constructor: Constructor<*>? = null
134140
for (candidate in clazz.declaredConstructors) {
135141
if (candidate.parameterCount == 0) {

atplug-runtime/src/main/java/com/diffplug/atplug/SocketOwner.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import java.util.function.Consumer
1414
import java.util.function.Function
1515
import java.util.function.Predicate
1616

17-
abstract class SocketOwner<T>(val socketClass: Class<T>) {
17+
abstract class SocketOwner<T : Any>(val socketClass: Class<T>) {
1818
abstract fun metadata(plug: T): Map<String, String>
1919

2020
fun asDescriptor(plug: T) =
21-
PlugDescriptor(plug!!::class.java.name, socketClass.name, metadata(plug)).toJson()
21+
PlugDescriptor(plug::class.java.name, socketClass.name, metadata(plug)).toJson()
2222

2323
/**
2424
* Instantiates the given plug. Already implemented by the default implementations [SingletonById]
@@ -39,7 +39,7 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
3939

4040
protected abstract fun remove(plugDescriptor: PlugDescriptor)
4141

42-
abstract class EphemeralByDescriptor<T, ParsedDescriptor>(socketClass: Class<T>) :
42+
abstract class EphemeralByDescriptor<T : Any, ParsedDescriptor>(socketClass: Class<T>) :
4343
SocketOwner<T>(socketClass) {
4444
private val descriptors = mutableMapOf<ParsedDescriptor, PlugDescriptor>()
4545
init {
@@ -51,13 +51,15 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
5151

5252
protected abstract fun parse(plugDescriptor: PlugDescriptor): ParsedDescriptor
5353

54-
protected fun <R> computeAgainstDescriptors(compute: Function<Set<ParsedDescriptor>, R>): R {
54+
protected fun <R : Any> computeAgainstDescriptors(
55+
compute: Function<Set<ParsedDescriptor>, R>
56+
): R {
5557
synchronized(this) {
5658
return compute.apply(descriptors.keys)
5759
}
5860
}
5961

60-
protected fun <R> forEachDescriptor(forEach: Consumer<ParsedDescriptor>) {
62+
protected fun forEachDescriptor(forEach: Consumer<ParsedDescriptor>) {
6163
synchronized(this) { descriptors.keys.forEach(forEach) }
6264
}
6365

@@ -85,8 +87,7 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
8587
predicateInstance: Predicate<T>
8688
): T? {
8789
synchronized(this) {
88-
return descriptors
89-
.keys
90+
return descriptors.keys
9091
.filter { predicateDescriptor.test(it) }
9192
.sortedWith(order)
9293
.map { instantiatePlug(descriptors[it]!!) }
@@ -120,7 +121,7 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
120121
open fun removeHook(plugDescriptor: PlugDescriptor) {}
121122
}
122123

123-
abstract class SingletonById<T>(socketClass: Class<T>) : SocketOwner<T>(socketClass) {
124+
abstract class SingletonById<T : Any>(socketClass: Class<T>) : SocketOwner<T>(socketClass) {
124125
private val descriptorById = mutableMapOf<String, PlugDescriptor>()
125126
private val singletonById = mutableMapOf<String, T>()
126127
init {
@@ -179,7 +180,7 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
179180
companion object {
180181
const val KEY_ID = "id"
181182

182-
fun <T> metadataGeneratorFor(socketClass: Class<T>): Function<T, String> {
183+
fun <T : Any> metadataGeneratorFor(socketClass: Class<T>): Function<T, String> {
183184
var firstAttempt: Throwable? = null
184185
try {
185186
val socketField = socketClass.getDeclaredField("socket")
@@ -204,22 +205,22 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
204205
}
205206
}
206207

207-
private fun <T> generatorForSocket(socket: SocketOwner<T>): Function<T, String> {
208+
private fun <T : Any> generatorForSocket(socket: SocketOwner<T>): Function<T, String> {
208209
return Function { plug ->
209210
try {
210211
socket.asDescriptor(plug)
211212
} catch (e: Exception) {
212213
if (rootCause(e) is ClassNotFoundException) {
213214
throw RuntimeException(
214215
"Unable to generate metadata for " +
215-
plug!!::class.java +
216+
plug::class.java +
216217
", missing transitive dependency " +
217218
rootCause(e).message,
218219
e)
219220
} else {
220221
throw RuntimeException(
221222
"Unable to generate metadata for " +
222-
plug!!::class.java +
223+
plug::class.java +
223224
", make sure that its metadata methods return simple constants: " +
224225
e.message,
225226
e)

atplug-test-harness/src/main/java/com/diffplug/atplug/PlugHarness.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import java.lang.AutoCloseable
1111
class PlugHarness {
1212
var map = PlugInstanceMap()
1313

14-
fun <T> add(clazz: Class<T>, instance: T): PlugHarness {
14+
fun <T : Any> add(clazz: Class<T>, instance: T): PlugHarness {
1515
val descriptor = SocketOwner.metadataGeneratorFor(clazz).apply(instance)
1616
map.putInstance(clazz, PlugDescriptor.fromJson(descriptor), instance)
1717
return this

0 commit comments

Comments
 (0)