aboutsummaryrefslogtreecommitdiff
path: root/integration/src/main/kotlin/org/jetbrains
diff options
context:
space:
mode:
authorSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2016-12-06 16:05:01 +0300
committerSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2016-12-06 16:05:01 +0300
commit546e8edfd95c16665319bc371c6ccf63706ad1e4 (patch)
tree1db397a9efc5545c1e27db3fc2d920cfab35550a /integration/src/main/kotlin/org/jetbrains
parent13bda7371cc60beaa4cc8302239efd21695b9e1f (diff)
downloaddokka-546e8edfd95c16665319bc371c6ccf63706ad1e4.tar.gz
dokka-546e8edfd95c16665319bc371c6ccf63706ad1e4.tar.bz2
dokka-546e8edfd95c16665319bc371c6ccf63706ad1e4.zip
Post-review changes, simplified proxies
Diffstat (limited to 'integration/src/main/kotlin/org/jetbrains')
-rw-r--r--integration/src/main/kotlin/org/jetbrains/dokka/DokkaBootstrap.kt4
-rw-r--r--integration/src/main/kotlin/org/jetbrains/dokka/DokkaLogger.kt8
-rw-r--r--integration/src/main/kotlin/org/jetbrains/dokka/ProxyUtils.kt76
3 files changed, 3 insertions, 85 deletions
diff --git a/integration/src/main/kotlin/org/jetbrains/dokka/DokkaBootstrap.kt b/integration/src/main/kotlin/org/jetbrains/dokka/DokkaBootstrap.kt
index 548aceb0..50e8fb8d 100644
--- a/integration/src/main/kotlin/org/jetbrains/dokka/DokkaBootstrap.kt
+++ b/integration/src/main/kotlin/org/jetbrains/dokka/DokkaBootstrap.kt
@@ -1,8 +1,10 @@
package org.jetbrains.dokka
+import java.util.function.BiConsumer
+
interface DokkaBootstrap {
- fun configure(logger: DokkaLogger,
+ fun configure(logger: BiConsumer<String, String>,
moduleName: String,
classpath: List<String>,
sources: List<String>,
diff --git a/integration/src/main/kotlin/org/jetbrains/dokka/DokkaLogger.kt b/integration/src/main/kotlin/org/jetbrains/dokka/DokkaLogger.kt
deleted file mode 100644
index fc1fac22..00000000
--- a/integration/src/main/kotlin/org/jetbrains/dokka/DokkaLogger.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.jetbrains.dokka
-
-interface DokkaLogger {
- fun info(message: String)
- fun warn(message: String)
- fun error(message: String)
-}
-
diff --git a/integration/src/main/kotlin/org/jetbrains/dokka/ProxyUtils.kt b/integration/src/main/kotlin/org/jetbrains/dokka/ProxyUtils.kt
deleted file mode 100644
index 66356f66..00000000
--- a/integration/src/main/kotlin/org/jetbrains/dokka/ProxyUtils.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.jetbrains.dokka
-
-import java.lang.reflect.InvocationHandler
-import java.lang.reflect.InvocationTargetException
-import java.lang.reflect.Method
-import java.lang.reflect.Proxy
-import java.util.function.Predicate
-
-
-/**
- * Warning! Hard reflection magic used here.
- *
- * Creates [java.lang.reflect.Proxy] with pass through invocation algorithm,
- * to create access proxy for [delegate] from [targetClassLoader] to [delegateClassLoader].
- *
- * Every object type contained in method calls will be translated to proxy, if [filter.test] will success for it's class
- *
- */
-@Suppress("UNCHECKED_CAST")
-fun <T> automagicTypedProxy(targetClassLoader: ClassLoader, targetType: Class<T>,
- delegateClassLoader: ClassLoader, delegate: Any,
- filter: Predicate<Class<*>>): T =
- automagicProxy(targetClassLoader, targetType, delegateClassLoader, delegate, filter) as T
-
-
-/**
- * Warning! Hard reflection magic used here.
- *
- * Creates [java.lang.reflect.Proxy] with pass through invocation algorithm,
- * to create access proxy for [delegate] from [targetClassLoader] to [delegateClassLoader].
- *
- * Every object type contained in method calls will be translated to proxy, if [filter.test] will success for it's class
- *
- */
-fun automagicProxy(targetClassLoader: ClassLoader, targetType: Class<*>,
- delegateClassLoader: ClassLoader, delegate: Any,
- filter: Predicate<Class<*>>): Any =
- Proxy.newProxyInstance(
- targetClassLoader,
- arrayOf(targetType),
- DelegatedInvocationHandler(
- delegate,
- delegateClassLoader,
- filter
- )
- )
-
-class DelegatedInvocationHandler(private val delegate: Any,
- private val delegateClassLoader: ClassLoader,
- private val filter: Predicate<Class<*>>)
- : InvocationHandler {
-
- @Throws(Throwable::class)
- override fun invoke(proxy: Any, method: Method, args: Array<Any?>?): Any? {
- val (argTypes, argValues) = method.parameterTypes.zip(args ?: emptyArray()).map { typeAndValue ->
- val (type, value) = typeAndValue
- if (filter.test(type)) {
- val newType = delegateClassLoader.loadClass(type.name)
- val newValue = value?.let {
- automagicProxy(delegateClassLoader, newType, type.classLoader, value, filter)
- }
- newType to newValue
- } else
- typeAndValue
- }.unzip()
-
- val delegateMethod = delegate.javaClass.getMethod(method.name, *argTypes.toTypedArray())
- try {
- delegateMethod.isAccessible = true
- return delegateMethod.invoke(delegate, *argValues.toTypedArray())
- } catch (ex: InvocationTargetException) {
- throw ex.targetException
- }
-
- }
-}