Skip to content

yFiles 3.X #9

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,6 @@ internal class ClassRegistry(
{ it.memberProperties.map { it.name } }
)

private val listenerMap = types
.asSequence()
.filterIsInstance<ExtendedType>()
.associateBy(
{ it.classId },
{ it.events.flatMap { it.listenerNames } }
)

private fun getParents(className: String): List<String> {
val instance = instances.getValue(className)

Expand Down Expand Up @@ -70,31 +62,11 @@ internal class ClassRegistry(
}
}

private fun listenerOverridden(
className: String,
listenerName: String,
checkCurrentClass: Boolean,
): Boolean {
if (checkCurrentClass) {
val listeners = listenerMap.getValue(className)
if (listenerName in listeners) {
return true
}
}
return getParents(className).any {
listenerOverridden(it, listenerName, true)
}
}

fun functionOverridden(className: String, functionName: String): Boolean {
return functionOverridden(className, functionName, false)
}

fun propertyOverridden(className: String, propertyName: String): Boolean {
return propertyOverridden(className, propertyName, false)
}

fun listenerOverridden(className: String, listenerName: String): Boolean {
return listenerOverridden(className, listenerName, false)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,9 @@ private fun String.cleanDoc(): String {
private fun String.getImportedClasses(): List<String> {
val code = split("\n")
.asSequence()
.map { it.trim() }
.filterNot { it.startsWith("import yfiles.") }
.filterNot { it.startsWith(" *") }
.filterNot { it.startsWith("*") }
.joinToString("\n")

val additionalImports = mutableListOf<String>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ internal fun Class.getComponents(): String? =
"yfiles.algorithms.Point2D",
"yfiles.algorithms.Rectangle2D",

"yfiles.algorithms.YDimension",
"yfiles.algorithms.YPoint",
"yfiles.algorithms.YOrientedRectangle",

"yfiles.algorithms.YInsets",
Expand Down
59 changes: 7 additions & 52 deletions buildSrc/src/main/kotlin/com/github/turansky/yfiles/Extensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,65 +13,20 @@ internal fun Class.getExtensions(): String? =

internal fun Interface.getExtensions(): String? =
when (classId) {
// language=kotlin
YOBJECT,
-> """
inline fun <T: $YOBJECT> T.getClass(): $YCLASS<out T> =
$AS_DYNAMIC.getClass()
""".trimIndent()

// language=kotlin
ILOOKUP,
-> """
inline fun <reified T : $YOBJECT> $ILOOKUP.lookup(): T? =
lookup(T::class.js.yclass)
inline fun <T : $YOBJECT> $ILOOKUP.lookupValue(type: $YCLASS<T>):T =
inline fun <reified T: $ANY> $ILOOKUP.lookup(): T? =
lookup(T::class.js.unsafeCast<$ICLASS_METADATA<T>>())

inline fun <T : Any> $ILOOKUP.lookupValue(type: $ICLASS_METADATA<T>):T =
requireNotNull(lookup(type)) {
"Unable to lookup type ${'$'}type"
}
inline fun <reified T : $YOBJECT> $ILOOKUP.lookupValue(): T =
lookupValue(T::class.js.yclass)

inline fun <reified T : $ANY> $ILOOKUP.lookupValue(): T =
lookupValue(T::class.js.unsafeCast<$ICLASS_METADATA<T>>())
""".trimIndent()

IMAPPER_REGISTRY,
-> getMapperRegistryExtensions()

else -> null
}

private fun getMapperRegistryExtensions(): String {
return getMapperRegistryExtensions(GRAPH_DP_KEY, GRAPH, IGRAPH)
}

@Suppress("SameParameterValue")
private fun getMapperRegistryExtensions(
dpKeyType: String,
keyType: String,
modelKeyType: String = keyType,
): String {
var keyClass = "$keyType.yclass"
if (keyType != modelKeyType)
keyClass += ".unsafeCast<$YCLASS<$modelKeyType>>()"

val valueClass = "tag.valueType"

// language=kotlin
return """
inline fun <V : Any> IMapperRegistry.createConstantMapper(
tag: $dpKeyType<V> ,
constant: V?
):IMapper<$modelKeyType, V> =
createConstantMapper($keyClass, $valueClass, tag, constant)

inline fun <V : Any> IMapperRegistry.createDelegateMapper(
tag: $dpKeyType<V> ,
noinline getter: MapperDelegate<$modelKeyType, V>
):IMapper<$modelKeyType, V> =
createDelegateMapper($keyClass, $valueClass, tag, getter)

inline fun <V : Any> IMapperRegistry.createMapper(tag: $dpKeyType<V>):Mapper<$modelKeyType, V> =
createMapper($keyClass, $valueClass, tag)
""".trimIndent()
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,12 @@ internal class TypeGeneratorData(
val jsName = alias ?: name

val fileId: String
get() = if (primitive || isYObject) {
get() = if (primitive) {
"$packageName.$jsName"
} else {
fqn
}

val isYObject: Boolean
get() = isYObjectClass(fqn)

val isYBase: Boolean
get() = fqn == YCLASS || fqn == YENUM

val primitive: Boolean
get() = isPrimitiveClass(fqn)

Expand Down
11 changes: 2 additions & 9 deletions buildSrc/src/main/kotlin/com/github/turansky/yfiles/Generator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import com.github.turansky.yfiles.vsdx.correction.correctVsdxNumbers
import com.github.turansky.yfiles.vsdx.correction.createVsdxDataClasses
import com.github.turansky.yfiles.vsdx.fakeVsdxInterfaces
import java.io.File
import java.nio.file.Paths
import kotlin.io.path.writeText

private const val GENERATOR_COMMENT = "Automatically generated - do not modify!"
private val DEFAULT_SUPPRESSES = """
Expand Down Expand Up @@ -52,19 +54,11 @@ fun generateKotlinDeclarations(
generateTagUtils(context)
generateDataTagUtils(context)
generateStyleTagUtils(context)
generateNodeTypeUtils(context)
generateLayoutDescriptorUtils(context)
generateResourceUtils(context)
generateConvertersUtils(context)
generateEventDispatcherUtils(context)

generateClassUtils(context)
generateFlagsUtils(context)
generateMementoUtils(context)
generateIncrementalHint(context)
generatePartitionCellUtils(context)
generateObstacleData(context)
generateTooltipUtils(context)
generateDragDropData(context)
generateYndefined(context)

Expand All @@ -74,7 +68,6 @@ fun generateKotlinDeclarations(
generateEdgeDirectednessUtils(context)

addIteratorSupport(context)
generateDpKeyDelegates(context)

generateResourceTypes(devguideFile, context)
}
Expand Down
28 changes: 14 additions & 14 deletions buildSrc/src/main/kotlin/com/github/turansky/yfiles/Handlers.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ internal fun getHandlerData(listenerType: String): HandlerData {
"yfiles.graph.NodeLayoutChangedHandler" ->
HandlerData(
handlerType = "(node: $INODE, oldLayout: yfiles.geometry.Rect) -> Unit",
listenerBody = "{ _, node, oldLayout -> handler(node, oldLayout) }"
listenerBody = "{ node, oldLayout, _ -> handler(node, oldLayout) }"
)

"yfiles.graph.BendLocationChangedHandler" ->
HandlerData(
handlerType = "(bend: yfiles.graph.IBend, oldLocation: yfiles.geometry.Point) -> Unit",
listenerBody = "{ _, bend, oldLocation -> handler(bend, oldLocation) }"
listenerBody = "{ bend, oldLocation, _ -> handler(bend, oldLocation) }"
)

else -> throw IllegalArgumentException("No handler data for $listenerType")
Expand All @@ -33,23 +33,23 @@ private fun getEventHandlerData(eventType: String): HandlerData {
val itemType = eventType.between("<", ">")
return HandlerData(
handlerType = "(item:$itemType) -> Unit",
listenerBody = "{ _, event -> handler(event.item) }"
listenerBody = "{ event, _ -> handler(event.item) }"
)
}

if (eventType.startsWith("yfiles.graph.ItemChangedEventArgs<")) {
val (itemType, valueType) = eventType.between("<", ">").split(",")
return HandlerData(
handlerType = "(item:$itemType, oldValue: $valueType?) -> Unit",
listenerBody = "{ _, event -> handler(event.item, event.oldValue) }"
listenerBody = "{ event, _ -> handler(event.item, event.oldValue) }"
)
}

if (eventType.startsWith("yfiles.input.SelectionEventArgs<")) {
val itemType = eventType.between("<", ">")
return HandlerData(
handlerType = "(context:$IINPUT_MODE_CONTEXT, selection: yfiles.view.ISelectionModel<$itemType>) -> Unit",
listenerBody = "{ _, event -> handler(event.context, event.selection) }"
handlerType = "(context:$IINPUT_MODE_CONTEXT, selection: yfiles.collections.IObservableCollection<$itemType>) -> Unit",
listenerBody = "{ event, _ -> handler(event.context, event.selection) }"
)
}

Expand Down Expand Up @@ -78,7 +78,7 @@ private fun getEventHandlerData(eventType: String): HandlerData {
else ->
HandlerData(
handlerType = "(event:$eventType) -> Unit",
listenerBody = "{ _, event -> handler(event) }"
listenerBody = "{ event, _ -> handler(event) }"
)
}
}
Expand All @@ -92,37 +92,37 @@ private val EMPTY_HANDLER_DATA =
private val PROPERTY_HANDLER_DATA =
HandlerData(
handlerType = "(propertyName:String) -> Unit",
listenerBody = "{ _, event -> handler(event.propertyName) }"
listenerBody = "{ event, _ -> handler(event.propertyName) }"
)

private val INPUT_MODE_HANDLER_DATA =
HandlerData(
handlerType = "(context:$IINPUT_MODE_CONTEXT) -> Unit",
listenerBody = "{ _, event -> handler(event.context) }"
listenerBody = "{ event, _ -> handler(event.context) }"
)

private val TEXT_HANDLER_DATA =
HandlerData(
handlerType = "(context:$IINPUT_MODE_CONTEXT, text:String) -> Unit",
listenerBody = "{ _, event -> handler(event.context, event.text) }"
listenerBody = "{ event, _ -> handler(event.context, event.text) }"
)

private val MARQUEE_HANDLER_DATA =
HandlerData(
handlerType = "(rectangle:yfiles.geometry.Rect) -> Unit",
listenerBody = "{ _, event -> handler(event.rectangle) }"
listenerBody = "{ event, _ -> handler(event.rectangle) }"
)

private val LASSO_HANDLER_DATA =
HandlerData(
handlerType = "(selectionPath:yfiles.geometry.GeneralPath) -> Unit",
listenerBody = "{ _, event -> handler(event.selectionPath) }"
handlerType = "(path:yfiles.geometry.GeneralPath) -> Unit",
listenerBody = "{ event, _ -> handler(event.path) }"
)

private val HOVER_HANDLER_DATA =
HandlerData(
handlerType = "(item:$IMODEL_ITEM?, oldItem:$IMODEL_ITEM?) -> Unit",
listenerBody = "{ _, event -> handler(event.item, event.oldItem) }"
listenerBody = "{ event, _ -> handler(event.item, event.oldItem) }"
)

internal data class HandlerData(
Expand Down
Loading