compiler: cleanup 'public', property access syntax
This commit is contained in:
@@ -61,10 +61,10 @@ private fun traverseClass(c: Class<*>): ClassInfo {
|
||||
|
||||
private fun getSetterInfos(c: Class<*>): List<SetterInfo> {
|
||||
val setterInfos = ArrayList<SetterInfo>()
|
||||
for (method in c.getMethods()) {
|
||||
for (annotation in method.getDeclaredAnnotations()) {
|
||||
if (annotation.annotationClass.java.getName().endsWith(".Inject")) {
|
||||
setterInfos.add(SetterInfo(method, method.getGenericParameterTypes().toList()))
|
||||
for (method in c.methods) {
|
||||
for (annotation in method.declaredAnnotations) {
|
||||
if (annotation.annotationClass.java.name.endsWith(".Inject")) {
|
||||
setterInfos.add(SetterInfo(method, method.genericParameterTypes.toList()))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -72,16 +72,16 @@ private fun getSetterInfos(c: Class<*>): List<SetterInfo> {
|
||||
}
|
||||
|
||||
private fun getConstructorInfo(c: Class<*>): ConstructorInfo? {
|
||||
if (Modifier.isAbstract(c.getModifiers()) || c.isPrimitive())
|
||||
if (Modifier.isAbstract(c.modifiers) || c.isPrimitive)
|
||||
return null
|
||||
|
||||
val constructors = c.getConstructors()
|
||||
val hasSinglePublicConstructor = constructors.singleOrNull()?.let { Modifier.isPublic(it.getModifiers()) } ?: false
|
||||
val constructors = c.constructors
|
||||
val hasSinglePublicConstructor = constructors.singleOrNull()?.let { Modifier.isPublic(it.modifiers) } ?: false
|
||||
if (!hasSinglePublicConstructor)
|
||||
return null
|
||||
|
||||
val constructor = constructors.single()
|
||||
return ConstructorInfo(constructor, constructor.getGenericParameterTypes().toList())
|
||||
return ConstructorInfo(constructor, constructor.genericParameterTypes.toList())
|
||||
}
|
||||
|
||||
|
||||
@@ -89,10 +89,10 @@ private fun collectInterfacesRecursive(type: Type, result: MutableSet<Type>) {
|
||||
// TODO: should apply generic substitution through hierarchy
|
||||
val klass : Class<*>? = when(type) {
|
||||
is Class<*> -> type
|
||||
is ParameterizedType -> type.getRawType() as? Class<*>
|
||||
is ParameterizedType -> type.rawType as? Class<*>
|
||||
else -> null
|
||||
}
|
||||
klass?.getGenericInterfaces()?.forEach {
|
||||
klass?.genericInterfaces?.forEach {
|
||||
if (result.add(it)) {
|
||||
collectInterfacesRecursive(it, result)
|
||||
}
|
||||
@@ -104,8 +104,8 @@ private fun getRegistrations(klass: Class<*>): List<Type> {
|
||||
|
||||
val superClasses = sequence<Type>(klass) {
|
||||
when (it) {
|
||||
is Class<*> -> it.getGenericSuperclass()
|
||||
is ParameterizedType -> (it.getRawType() as? Class<*>)?.getGenericSuperclass()
|
||||
is Class<*> -> it.genericSuperclass
|
||||
is ParameterizedType -> (it.rawType as? Class<*>)?.genericSuperclass
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.container
|
||||
|
||||
import java.lang.reflect.*
|
||||
|
||||
public class InstanceComponentDescriptor(val instance: Any) : ComponentDescriptor {
|
||||
class InstanceComponentDescriptor(val instance: Any) : ComponentDescriptor {
|
||||
|
||||
override fun getValue(): Any = instance
|
||||
override fun getRegistrations(): Iterable<Type> = instance.javaClass.getInfo().registrations
|
||||
@@ -26,7 +26,7 @@ public class InstanceComponentDescriptor(val instance: Any) : ComponentDescripto
|
||||
override fun getDependencies(context: ValueResolveContext): Collection<Class<*>> = emptyList()
|
||||
|
||||
override fun toString(): String {
|
||||
return "Instance: ${instance.javaClass.getSimpleName()}"
|
||||
return "Instance: ${instance.javaClass.simpleName}"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,13 +24,13 @@ import java.lang.reflect.WildcardType
|
||||
|
||||
class ContainerConsistencyException(message: String) : Exception(message)
|
||||
|
||||
public interface ComponentContainer {
|
||||
interface ComponentContainer {
|
||||
fun createResolveContext(requestingDescriptor: ValueDescriptor): ValueResolveContext
|
||||
}
|
||||
|
||||
public interface ComponentProvider {
|
||||
public fun resolve(request: Type): ValueDescriptor?
|
||||
public fun <T> create(request: Class<T>): T
|
||||
interface ComponentProvider {
|
||||
fun resolve(request: Type): ValueDescriptor?
|
||||
fun <T> create(request: Class<T>): T
|
||||
}
|
||||
|
||||
object DynamicComponentDescriptor : ValueDescriptor {
|
||||
@@ -38,8 +38,8 @@ object DynamicComponentDescriptor : ValueDescriptor {
|
||||
override fun toString(): String = "Dynamic"
|
||||
}
|
||||
|
||||
public class StorageComponentContainer(id: String) : ComponentContainer, ComponentProvider, Closeable {
|
||||
public val unknownContext: ComponentResolveContext by lazy { ComponentResolveContext(this, DynamicComponentDescriptor) }
|
||||
class StorageComponentContainer(id: String) : ComponentContainer, ComponentProvider, Closeable {
|
||||
val unknownContext: ComponentResolveContext by lazy { ComponentResolveContext(this, DynamicComponentDescriptor) }
|
||||
val componentStorage = ComponentStorage(id)
|
||||
|
||||
override fun createResolveContext(requestingDescriptor: ValueDescriptor): ValueResolveContext {
|
||||
@@ -59,7 +59,7 @@ public class StorageComponentContainer(id: String) : ComponentContainer, Compone
|
||||
|
||||
override fun close() = componentStorage.dispose()
|
||||
|
||||
public fun resolve(request: Type, context: ValueResolveContext): ValueDescriptor? {
|
||||
fun resolve(request: Type, context: ValueResolveContext): ValueDescriptor? {
|
||||
return componentStorage.resolve(request, context) ?: resolveIterable(request, context)
|
||||
}
|
||||
|
||||
@@ -69,14 +69,14 @@ public class StorageComponentContainer(id: String) : ComponentContainer, Compone
|
||||
|
||||
private fun resolveIterable(request: Type, context: ValueResolveContext): ValueDescriptor? {
|
||||
if (request !is ParameterizedType) return null
|
||||
val rawType = request.getRawType()
|
||||
val rawType = request.rawType
|
||||
if (rawType != Iterable::class.java) return null
|
||||
val typeArguments = request.getActualTypeArguments()
|
||||
val typeArguments = request.actualTypeArguments
|
||||
if (typeArguments.size != 1) return null
|
||||
val iterableTypeArgument = typeArguments[0]
|
||||
val iterableType = when (iterableTypeArgument) {
|
||||
is WildcardType -> {
|
||||
val upperBounds = iterableTypeArgument.getUpperBounds()
|
||||
val upperBounds = iterableTypeArgument.upperBounds
|
||||
if (upperBounds.size != 1) return null
|
||||
upperBounds[0]
|
||||
}
|
||||
@@ -87,7 +87,7 @@ public class StorageComponentContainer(id: String) : ComponentContainer, Compone
|
||||
return IterableDescriptor(componentStorage.resolveMultiple(iterableType, context))
|
||||
}
|
||||
|
||||
public fun resolveMultiple(request: Class<*>, context: ValueResolveContext = unknownContext): Iterable<ValueDescriptor> {
|
||||
fun resolveMultiple(request: Class<*>, context: ValueResolveContext = unknownContext): Iterable<ValueDescriptor> {
|
||||
return componentStorage.resolveMultiple(request, context)
|
||||
}
|
||||
|
||||
@@ -103,18 +103,18 @@ public class StorageComponentContainer(id: String) : ComponentContainer, Compone
|
||||
}
|
||||
}
|
||||
|
||||
public fun StorageComponentContainer.registerSingleton(klass: Class<*>): StorageComponentContainer {
|
||||
fun StorageComponentContainer.registerSingleton(klass: Class<*>): StorageComponentContainer {
|
||||
return registerDescriptors(listOf(SingletonTypeComponentDescriptor(this, klass)))
|
||||
}
|
||||
|
||||
public fun StorageComponentContainer.registerInstance(instance: Any): StorageComponentContainer {
|
||||
fun StorageComponentContainer.registerInstance(instance: Any): StorageComponentContainer {
|
||||
return registerDescriptors(listOf(InstanceComponentDescriptor(instance)))
|
||||
}
|
||||
|
||||
public inline fun <reified T : Any> StorageComponentContainer.resolve(context: ValueResolveContext = unknownContext): ValueDescriptor? {
|
||||
inline fun <reified T : Any> StorageComponentContainer.resolve(context: ValueResolveContext = unknownContext): ValueDescriptor? {
|
||||
return resolve(T::class.java, context)
|
||||
}
|
||||
|
||||
public inline fun <reified T : Any> StorageComponentContainer.resolveMultiple(context: ValueResolveContext = unknownContext): Iterable<ValueDescriptor> {
|
||||
inline fun <reified T : Any> StorageComponentContainer.resolveMultiple(context: ValueResolveContext = unknownContext): Iterable<ValueDescriptor> {
|
||||
return resolveMultiple(T::class.java, context)
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.container
|
||||
import java.util.ArrayList
|
||||
import java.util.HashSet
|
||||
|
||||
public fun <T> topologicalSort(items: Iterable<T>, dependencies: (T) -> Iterable<T>): List<T> {
|
||||
fun <T> topologicalSort(items: Iterable<T>, dependencies: (T) -> Iterable<T>): List<T> {
|
||||
val itemsInProgress = HashSet<T>()
|
||||
val completedItems = HashSet<T>()
|
||||
val result = ArrayList<T>()
|
||||
@@ -48,4 +48,4 @@ public fun <T> topologicalSort(items: Iterable<T>, dependencies: (T) -> Iterable
|
||||
return result.apply { reverse() }
|
||||
}
|
||||
|
||||
public class CycleInTopoSortException : Exception()
|
||||
class CycleInTopoSortException : Exception()
|
||||
@@ -18,8 +18,8 @@ package org.jetbrains.kotlin.container
|
||||
|
||||
import java.lang.reflect.*
|
||||
|
||||
public interface ValueDescriptor {
|
||||
public fun getValue(): Any
|
||||
interface ValueDescriptor {
|
||||
fun getValue(): Any
|
||||
}
|
||||
|
||||
internal interface ComponentDescriptor : ValueDescriptor {
|
||||
@@ -29,7 +29,7 @@ internal interface ComponentDescriptor : ValueDescriptor {
|
||||
get() = false
|
||||
}
|
||||
|
||||
public class IterableDescriptor(val descriptors: Iterable<ValueDescriptor>) : ValueDescriptor {
|
||||
class IterableDescriptor(val descriptors: Iterable<ValueDescriptor>) : ValueDescriptor {
|
||||
override fun getValue(): Any {
|
||||
return descriptors.map { it.getValue() }
|
||||
}
|
||||
|
||||
@@ -18,27 +18,26 @@ package org.jetbrains.kotlin.container
|
||||
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
public fun createContainer(id: String, init: StorageComponentContainer.() -> Unit): StorageComponentContainer {
|
||||
fun createContainer(id: String, init: StorageComponentContainer.() -> Unit): StorageComponentContainer {
|
||||
val c = StorageComponentContainer(id)
|
||||
c.init()
|
||||
c.compose()
|
||||
return c
|
||||
}
|
||||
|
||||
public inline fun <reified T : Any> StorageComponentContainer.useImpl() {
|
||||
inline fun <reified T : Any> StorageComponentContainer.useImpl() {
|
||||
registerSingleton(T::class.java)
|
||||
}
|
||||
|
||||
public inline fun <reified T : Any> ComponentProvider.get(): T {
|
||||
inline fun <reified T : Any> ComponentProvider.get(): T {
|
||||
return getService(T::class.java)
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
public fun <T : Any> ComponentProvider.getService(request: Class<T>): T {
|
||||
@Suppress("UNCHECKED_CAST") fun <T : Any> ComponentProvider.getService(request: Class<T>): T {
|
||||
return resolve(request)!!.getValue() as T
|
||||
}
|
||||
|
||||
public fun StorageComponentContainer.useInstance(instance: Any) {
|
||||
fun StorageComponentContainer.useInstance(instance: Any) {
|
||||
registerInstance(instance)
|
||||
}
|
||||
|
||||
|
||||
@@ -33,11 +33,11 @@ internal class ComponentRegistry {
|
||||
|
||||
private var registrationMap = MultiMap.createLinkedSet<Type, ComponentDescriptor>()
|
||||
|
||||
public fun addAll(descriptors: Collection<ComponentDescriptor>) {
|
||||
fun addAll(descriptors: Collection<ComponentDescriptor>) {
|
||||
registrationMap.putAllValues(buildRegistrationMap(descriptors))
|
||||
}
|
||||
|
||||
public fun tryGetEntry(request: Type): Collection<ComponentDescriptor> {
|
||||
fun tryGetEntry(request: Type): Collection<ComponentDescriptor> {
|
||||
return registrationMap.get(request)
|
||||
}
|
||||
}
|
||||
@@ -22,30 +22,30 @@ import java.lang.reflect.Method
|
||||
import java.lang.reflect.Type
|
||||
import java.util.ArrayList
|
||||
|
||||
public interface ValueResolver {
|
||||
interface ValueResolver {
|
||||
fun resolve(request: Type, context: ValueResolveContext): ValueDescriptor?
|
||||
}
|
||||
|
||||
public interface ValueResolveContext {
|
||||
interface ValueResolveContext {
|
||||
fun resolve(registration: Type): ValueDescriptor?
|
||||
}
|
||||
|
||||
public class ComponentResolveContext(val container: StorageComponentContainer, val requestingDescriptor: ValueDescriptor) : ValueResolveContext {
|
||||
class ComponentResolveContext(val container: StorageComponentContainer, val requestingDescriptor: ValueDescriptor) : ValueResolveContext {
|
||||
override fun resolve(registration: Type): ValueDescriptor? = container.resolve(registration, this)
|
||||
|
||||
override fun toString(): String = "for $requestingDescriptor in $container"
|
||||
}
|
||||
|
||||
public class ConstructorBinding(val constructor: Constructor<*>, val argumentDescriptors: List<ValueDescriptor>)
|
||||
class ConstructorBinding(val constructor: Constructor<*>, val argumentDescriptors: List<ValueDescriptor>)
|
||||
|
||||
public class MethodBinding(val method: Method, val argumentDescriptors: List<ValueDescriptor>) {
|
||||
class MethodBinding(val method: Method, val argumentDescriptors: List<ValueDescriptor>) {
|
||||
fun invoke(instance: Any) {
|
||||
val arguments = computeArguments(argumentDescriptors).toTypedArray()
|
||||
method.invoke(instance, *arguments)
|
||||
}
|
||||
}
|
||||
|
||||
public fun computeArguments(argumentDescriptors: List<ValueDescriptor>): List<Any> = argumentDescriptors.map { it.getValue() }
|
||||
fun computeArguments(argumentDescriptors: List<ValueDescriptor>): List<Any> = argumentDescriptors.map { it.getValue() }
|
||||
|
||||
fun Class<*>.bindToConstructor(context: ValueResolveContext): ConstructorBinding {
|
||||
val constructorInfo = getInfo().constructorInfo!!
|
||||
@@ -54,7 +54,7 @@ fun Class<*>.bindToConstructor(context: ValueResolveContext): ConstructorBinding
|
||||
}
|
||||
|
||||
fun Method.bindToMethod(context: ValueResolveContext): MethodBinding {
|
||||
return MethodBinding(this, bindArguments(getGenericParameterTypes().toList(), context))
|
||||
return MethodBinding(this, bindArguments(genericParameterTypes.toList(), context))
|
||||
}
|
||||
|
||||
private fun Member.bindArguments(parameters: List<Type>, context: ValueResolveContext): List<ValueDescriptor> {
|
||||
|
||||
@@ -29,12 +29,12 @@ enum class ComponentState {
|
||||
Disposed
|
||||
}
|
||||
|
||||
public abstract class SingletonDescriptor(val container: ComponentContainer) : ComponentDescriptor, Closeable {
|
||||
abstract class SingletonDescriptor(val container: ComponentContainer) : ComponentDescriptor, Closeable {
|
||||
private var instance: Any? = null
|
||||
protected var state: ComponentState = ComponentState.Null
|
||||
private val disposableObjects by lazy { ArrayList<Closeable>() }
|
||||
|
||||
public override fun getValue(): Any {
|
||||
override fun getValue(): Any {
|
||||
when {
|
||||
state == ComponentState.Corrupted -> throw ContainerConsistencyException("Component descriptor $this is corrupted and cannot be accessed")
|
||||
state == ComponentState.Disposed -> throw ContainerConsistencyException("Component descriptor $this is disposed and cannot be accessed")
|
||||
@@ -115,9 +115,9 @@ public abstract class SingletonDescriptor(val container: ComponentContainer) : C
|
||||
get() = true
|
||||
}
|
||||
|
||||
public open class SingletonTypeComponentDescriptor(container: ComponentContainer, val klass: Class<*>) : SingletonDescriptor(container) {
|
||||
open class SingletonTypeComponentDescriptor(container: ComponentContainer, val klass: Class<*>) : SingletonDescriptor(container) {
|
||||
override fun createInstance(context: ValueResolveContext): Any = createInstanceOf(klass, context)
|
||||
public override fun getRegistrations(): Iterable<Type> = klass.getInfo().registrations
|
||||
override fun getRegistrations(): Iterable<Type> = klass.getInfo().registrations
|
||||
|
||||
private fun createInstanceOf(klass: Class<*>, context: ValueResolveContext): Any {
|
||||
val binding = klass.bindToConstructor(context)
|
||||
@@ -141,11 +141,11 @@ public open class SingletonTypeComponentDescriptor(container: ComponentContainer
|
||||
return classInfo.constructorInfo?.parameters.orEmpty() + classInfo.setterInfos.flatMap { it.parameters }
|
||||
}
|
||||
|
||||
override fun toString(): String = "Singleton: ${klass.getSimpleName()}"
|
||||
override fun toString(): String = "Singleton: ${klass.simpleName}"
|
||||
}
|
||||
|
||||
class ImplicitSingletonTypeComponentDescriptor(container: ComponentContainer, klass: Class<*>) : SingletonTypeComponentDescriptor(container, klass) {
|
||||
override fun toString(): String {
|
||||
return "Implicit: ${klass.getSimpleName()}"
|
||||
return "Implicit: ${klass.simpleName}"
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,7 @@ import java.util.ArrayList
|
||||
import java.util.HashSet
|
||||
import java.util.LinkedHashSet
|
||||
|
||||
public enum class ComponentStorageState {
|
||||
enum class ComponentStorageState {
|
||||
Initial,
|
||||
Initialized,
|
||||
Disposing,
|
||||
@@ -35,7 +35,7 @@ public enum class ComponentStorageState {
|
||||
|
||||
internal class InvalidCardinalityException(message: String, val descriptors: Collection<ComponentDescriptor>) : Exception(message)
|
||||
|
||||
public class ComponentStorage(val myId: String) : ValueResolver {
|
||||
class ComponentStorage(val myId: String) : ValueResolver {
|
||||
var state = ComponentStorageState.Initial
|
||||
private val registry = ComponentRegistry()
|
||||
private val descriptors = LinkedHashSet<ComponentDescriptor>()
|
||||
@@ -65,7 +65,7 @@ public class ComponentStorage(val myId: String) : ValueResolver {
|
||||
}
|
||||
}
|
||||
|
||||
public fun dump(printer: PrintStream): Unit = with (printer) {
|
||||
fun dump(printer: PrintStream): Unit = with (printer) {
|
||||
val heading = "Container: $myId"
|
||||
println(heading)
|
||||
println("=".repeat(heading.length))
|
||||
@@ -88,7 +88,7 @@ public class ComponentStorage(val myId: String) : ValueResolver {
|
||||
}
|
||||
|
||||
|
||||
public fun resolveMultiple(request: Type, context: ValueResolveContext): Iterable<ValueDescriptor> {
|
||||
fun resolveMultiple(request: Type, context: ValueResolveContext): Iterable<ValueDescriptor> {
|
||||
registerDependency(request, context)
|
||||
return registry.tryGetEntry(request)
|
||||
}
|
||||
@@ -106,7 +106,7 @@ public class ComponentStorage(val myId: String) : ValueResolver {
|
||||
|
||||
}
|
||||
|
||||
public fun compose(context: ComponentResolveContext) {
|
||||
fun compose(context: ComponentResolveContext) {
|
||||
if (state != ComponentStorageState.Initial)
|
||||
throw ContainerConsistencyException("Container $myId was already composed.")
|
||||
|
||||
@@ -154,13 +154,13 @@ public class ComponentStorage(val myId: String) : ValueResolver {
|
||||
if (entry.isEmpty()) {
|
||||
val rawType: Class<*>? = when (type) {
|
||||
is Class<*> -> type
|
||||
is ParameterizedType -> type.getRawType() as? Class<*>
|
||||
is ParameterizedType -> type.rawType as? Class<*>
|
||||
else -> null
|
||||
}
|
||||
if (rawType == null)
|
||||
continue
|
||||
|
||||
if (!Modifier.isAbstract(rawType.getModifiers()) && !rawType.isPrimitive()) {
|
||||
if (!Modifier.isAbstract(rawType.modifiers) && !rawType.isPrimitive) {
|
||||
val implicitDescriptor = ImplicitSingletonTypeComponentDescriptor(context.container, rawType)
|
||||
adhocDescriptors.add(implicitDescriptor)
|
||||
collectAdhocComponents(context, implicitDescriptor, visitedTypes, adhocDescriptors)
|
||||
@@ -178,7 +178,7 @@ public class ComponentStorage(val myId: String) : ValueResolver {
|
||||
}
|
||||
}
|
||||
|
||||
public fun dispose() {
|
||||
fun dispose() {
|
||||
if (state != ComponentStorageState.Initialized) {
|
||||
if (state == ComponentStorageState.Initial)
|
||||
return // it is valid to dispose container which was not initialized
|
||||
|
||||
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.container.tests
|
||||
import java.io.*
|
||||
|
||||
interface TestComponentInterface {
|
||||
public val disposed: Boolean
|
||||
val disposed: Boolean
|
||||
fun foo()
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ interface TestClientComponentInterface {
|
||||
}
|
||||
|
||||
class TestComponent : TestComponentInterface, Closeable {
|
||||
public override var disposed: Boolean = false
|
||||
override var disposed: Boolean = false
|
||||
override fun close() {
|
||||
disposed = true
|
||||
}
|
||||
@@ -38,7 +38,7 @@ class TestComponent : TestComponentInterface, Closeable {
|
||||
}
|
||||
|
||||
class ManualTestComponent(val name: String) : TestComponentInterface, Closeable {
|
||||
public override var disposed: Boolean = false
|
||||
override var disposed: Boolean = false
|
||||
override fun close() {
|
||||
disposed = true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user