in rider-fsharp/src/main/java/com/jetbrains/rider/plugins/fsharp/projectView/FSharpMoveProviderExtension.kt [69:132]
override fun allowPaste(
entities: Collection<ProjectModelEntity>,
relativeTo: ProjectElementView,
orderType: RdDndOrderType
): Boolean {
if (entities.any { it.isProjectFolder() && it.containingProjectEntity()?.url?.virtualFile?.extension == "fsproj" })
return false
if (orderType == RdDndOrderType.None) {
return super.allowPaste(entities, relativeTo, orderType)
}
if (relativeTo is ProjectEntityView && isFSharpNode(relativeTo.entity)) {
val nodesItemType = getNodesItemType(entities)
if (nodesItemType == FSharpItemType.Mix) return false
val relativeToEntity = relativeTo.entity
when (orderType) {
RdDndOrderType.Before -> {
when (nodesItemType) {
FSharpItemType.Default -> {
if (relativeToEntity.isCompileBefore(RdDndOrderType.Before))
return false
if (relativeToEntity.prevSibling().isCompileAfter(RdDndOrderType.After))
return false
return true
}
FSharpItemType.CompileBefore ->
return relativeToEntity.isCompileBefore(RdDndOrderType.Before) ||
relativeToEntity.prevSibling().isCompileBefore(RdDndOrderType.After)
FSharpItemType.CompileAfter -> return relativeToEntity.isCompileAfter(RdDndOrderType.Before)
else -> {
}
}
}
RdDndOrderType.After -> {
when (nodesItemType) {
FSharpItemType.Default -> {
if (relativeToEntity.isCompileAfter(RdDndOrderType.After))
return false
if (relativeToEntity.nextSibling().isCompileBefore(RdDndOrderType.Before))
return false
return true
}
FSharpItemType.CompileBefore -> return relativeToEntity.isCompileBefore(RdDndOrderType.After)
FSharpItemType.CompileAfter ->
return relativeToEntity.isCompileAfter(RdDndOrderType.After) ||
relativeToEntity.nextSibling().isCompileAfter(RdDndOrderType.Before)
else -> {
}
}
}
RdDndOrderType.None -> throw Exception()
}
}
return super.allowPaste(entities, relativeTo, orderType)
}