Skip to content

Commit ce6df9c

Browse files
committed
Better names for the SocketOwner methods.
1 parent 2091127 commit ce6df9c

2 files changed

Lines changed: 26 additions & 23 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ And the manifest of the Jar file will have a field `AtPlug-Component` which poin
109109
To use the plugin system, you can do:
110110

111111
```kotlin
112-
Shape.Socket.allIds(): Set<String>
112+
Shape.Socket.availableIds(): List<String>
113113
Shape.Socket.descriptorForId(id: String): PlugDescriptor?
114-
Shape.Socket.forId(id: String): Shape?
114+
Shape.Socket.instanceForId(id: String): Shape?
115115
```
116116

117117
Which are all built-in to every sublass of `SocketOwner.SingletonById`. You can add more methods too for your usecase.

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

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import java.lang.Exception
1010
import java.lang.IllegalArgumentException
1111
import java.lang.RuntimeException
1212
import java.lang.reflect.Modifier
13-
import java.util.*
1413
import java.util.function.Function
1514
import java.util.function.Predicate
1615

@@ -49,19 +48,17 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
4948
override fun instantiatePlug(plugDescriptor: PlugDescriptor): T =
5049
PlugRegistry.instantiatePlug(socketClass, plugDescriptor)
5150

52-
abstract protected fun parse(plugDescriptor: PlugDescriptor): ParsedDescriptor
51+
protected abstract fun parse(plugDescriptor: PlugDescriptor): ParsedDescriptor
5352

54-
protected fun all() = descriptors.keys
53+
protected fun availableDescriptors() = descriptors.keys
5554

56-
protected fun descriptorFiltered(
57-
predicate: Predicate<ParsedDescriptor>
58-
): List<ParsedDescriptor> {
55+
protected fun descriptorsFor(predicate: Predicate<ParsedDescriptor>): List<ParsedDescriptor> {
5956
synchronized(this) {
6057
return descriptors.keys.filter { predicate.test(it) }
6158
}
6259
}
6360

64-
protected fun instantiateFiltered(predicate: Predicate<ParsedDescriptor>): List<T> {
61+
protected fun instancesFor(predicate: Predicate<ParsedDescriptor>): List<T> {
6562
val result = mutableListOf<T>()
6663
synchronized(this) {
6764
descriptors.forEach { (parsed, descriptor) ->
@@ -93,12 +90,13 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
9390
}
9491
}
9592

93+
/** If you override this, make sure you also override [removeHook] */
9694
open fun registerHook(plugDescriptor: PlugDescriptor) {}
9795

9896
open fun removeHook(plugDescriptor: PlugDescriptor) {}
9997
}
10098

101-
abstract open class SingletonById<T>(socketClass: Class<T>) : SocketOwner<T>(socketClass) {
99+
abstract class SingletonById<T>(socketClass: Class<T>) : SocketOwner<T>(socketClass) {
102100
private val descriptorById = mutableMapOf<String, PlugDescriptor>()
103101
private val instanceById = mutableMapOf<String, T>()
104102
init {
@@ -108,15 +106,15 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
108106
override fun instantiatePlug(plugDescriptor: PlugDescriptor): T =
109107
PlugRegistry.instantiatePlug(socketClass, plugDescriptor)
110108

111-
override final fun register(plugDescriptor: PlugDescriptor) {
109+
final override fun register(plugDescriptor: PlugDescriptor) {
112110
synchronized(this) {
113111
val id = plugDescriptor.properties[KEY_ID]!!
114112
descriptorById[id] = plugDescriptor
115113
registerHook(plugDescriptor)
116114
}
117115
}
118116

119-
override final fun remove(plugDescriptor: PlugDescriptor) {
117+
final override fun remove(plugDescriptor: PlugDescriptor) {
120118
synchronized(this) {
121119
val id = plugDescriptor.properties[KEY_ID]!!
122120
val removed = descriptorById.remove(id)
@@ -126,19 +124,14 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
126124
}
127125
}
128126

129-
open protected fun registerHook(plugDescriptor: PlugDescriptor) {}
127+
/** If you override this, make sure you also override [removeHook] */
128+
protected open fun registerHook(plugDescriptor: PlugDescriptor) {}
130129

131-
open protected fun removeHook(plugDescriptor: PlugDescriptor) {}
130+
protected open fun removeHook(plugDescriptor: PlugDescriptor) {}
132131

133-
fun allIds() = Collections.unmodifiableSet(descriptorById.keys)
134-
135-
fun forId(id: String): T? {
132+
fun availableIds(): List<String> {
136133
synchronized(this) {
137-
try {
138-
return instanceById.computeIfAbsent(id) { instantiatePlug(descriptorById[it]!!) }
139-
} catch (e: NullPointerException) {
140-
return null
141-
}
134+
return descriptorById.keys.toList()
142135
}
143136
}
144137

@@ -147,6 +140,16 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
147140
return descriptorById[id]
148141
}
149142
}
143+
144+
fun instanceForId(id: String): T? {
145+
synchronized(this) {
146+
return try {
147+
instanceById.computeIfAbsent(id) { instantiatePlug(descriptorById[it]!!) }
148+
} catch (e: NullPointerException) {
149+
null
150+
}
151+
}
152+
}
150153
}
151154

152155
companion object {
@@ -155,7 +158,7 @@ abstract class SocketOwner<T>(val socketClass: Class<T>) {
155158
fun <T> metadataGeneratorFor(socketClass: Class<T>): Function<T, String> {
156159
var firstAttempt: Throwable? = null
157160
try {
158-
val socketField = socketClass.getDeclaredField("socket")!!
161+
val socketField = socketClass.getDeclaredField("socket")
159162
if (Modifier.isStatic(socketField.modifiers) && Modifier.isFinal(socketField.modifiers)) {
160163
val socket = socketField[null] as SocketOwner<T>
161164
return generatorForSocket(socket)

0 commit comments

Comments
 (0)