override fun allowPaste()

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)
  }