mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IJPL-218404 Eel: BuildersGeneratorTest can now generate builders for static Kotlin functions
GitOrigin-RevId: 74c78c37340d87c14e343371a68532bb40bbb479
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7d2c397439
commit
6b0029f1f7
@@ -49,6 +49,7 @@ jvm_library(
|
||||
"//platform/util/jdom",
|
||||
"//plugins/kotlin/base/test",
|
||||
"//plugins/kotlin/base/test:test_test_lib",
|
||||
"//plugins/kotlin/base/indices",
|
||||
],
|
||||
runtime_deps = ["//plugins/kotlin:kotlin-plugin-community-main"]
|
||||
)
|
||||
|
||||
@@ -34,8 +34,10 @@ import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.vfs.newvfs.RefreshQueue
|
||||
import com.intellij.openapi.vfs.readText
|
||||
import com.intellij.openapi.vfs.writeText
|
||||
import com.intellij.platform.eel.codegen.BuilderRequest.Ownership
|
||||
import com.intellij.profile.codeInspection.InspectionProjectProfileManager
|
||||
import com.intellij.project.IntelliJProjectConfiguration
|
||||
import com.intellij.project.stateStore
|
||||
@@ -43,7 +45,6 @@ import com.intellij.psi.*
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.stubs.StubUpdatingIndex
|
||||
import com.intellij.psi.util.findParentOfType
|
||||
import com.intellij.testFramework.IndexingTestUtil
|
||||
import com.intellij.testFramework.TestApplicationManager
|
||||
import com.intellij.testFramework.UsefulTestCase
|
||||
@@ -67,6 +68,7 @@ import org.jetbrains.jps.model.module.JpsModuleDependency
|
||||
import org.jetbrains.kotlin.analysis.api.KaExperimentalApi
|
||||
import org.jetbrains.kotlin.analysis.api.analyze
|
||||
import org.jetbrains.kotlin.analysis.api.renderer.types.impl.KaTypeRendererForSource
|
||||
import org.jetbrains.kotlin.analysis.api.types.symbol
|
||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget.*
|
||||
@@ -107,6 +109,7 @@ import kotlin.sequences.filterIsInstance
|
||||
import kotlin.sequences.flatMap
|
||||
import kotlin.sequences.generateSequence
|
||||
import kotlin.sequences.joinToString
|
||||
import kotlin.sequences.lastOrNull
|
||||
import kotlin.sequences.map
|
||||
import kotlin.sequences.takeWhile
|
||||
import kotlin.sequences.toList
|
||||
@@ -118,20 +121,18 @@ import kotlin.text.contains
|
||||
import kotlin.text.endsWith
|
||||
import kotlin.text.indexOf
|
||||
import kotlin.text.isBlank
|
||||
import kotlin.text.isNotBlank
|
||||
import kotlin.text.isNotEmpty
|
||||
import kotlin.text.lines
|
||||
import kotlin.text.lowercase
|
||||
import kotlin.text.matches
|
||||
import kotlin.text.orEmpty
|
||||
import kotlin.text.prependIndent
|
||||
import kotlin.text.removePrefix
|
||||
import kotlin.text.removeSuffix
|
||||
import kotlin.text.replace
|
||||
import kotlin.text.replaceFirstChar
|
||||
import kotlin.text.split
|
||||
import kotlin.text.startsWith
|
||||
import kotlin.text.substring
|
||||
import kotlin.text.substringBeforeLast
|
||||
import kotlin.text.trim
|
||||
import kotlin.text.trimEnd
|
||||
import kotlin.text.trimIndent
|
||||
@@ -256,7 +257,8 @@ class BuildersGeneratorTest {
|
||||
}
|
||||
|
||||
for ((path, contentPair) in filesContent) {
|
||||
val virtualFile = VfsUtil.findFile(path, true)!!
|
||||
if (contentPair.second.isEmpty) continue
|
||||
val virtualFile = VfsUtil.findFile(path, true) ?: error("Failed to find the VFS file for $path")
|
||||
val (_, newContent) = contentPair
|
||||
if (newContent.isPresent) {
|
||||
prettifyFile(tempProject, virtualFile)
|
||||
@@ -288,7 +290,7 @@ class BuildersGeneratorTest {
|
||||
else
|
||||
"${path.toUri()} : " +
|
||||
"The new version of the file has been written to the disk, don't forget to commit it."
|
||||
assertEquals(oldPrettifiedContent, newContent, errorMsg)
|
||||
assertEquals(oldPrettifiedContent.orEmpty(), newContent.orEmpty(), errorMsg)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -437,6 +439,7 @@ private suspend fun fillRequests(
|
||||
|
||||
val queue = ArrayDeque<VirtualFile>()
|
||||
queue.addAll(newEelModule.rootManager.contentRoots)
|
||||
RefreshQueue.getInstance().refresh(false, true, null, *newEelModule.rootManager.contentRoots)
|
||||
while (true) {
|
||||
val virtualFile = queue.removeFirstOrNull() ?: break
|
||||
if (virtualFile.isDirectory) {
|
||||
@@ -463,12 +466,21 @@ private class BuilderRequest(
|
||||
val throwsAnnotation: String?,
|
||||
val annotations: Collection<String>,
|
||||
val argsInterfaceFqn: String,
|
||||
val clsFqn: String,
|
||||
val packageFqn: String,
|
||||
val declarationFileName: String,
|
||||
val ownership: Ownership,
|
||||
val methodName: String,
|
||||
val methodKDoc: String,
|
||||
val returnTypeFqn: String,
|
||||
val imports: Set<String>,
|
||||
)
|
||||
) {
|
||||
sealed class Ownership {
|
||||
// Autogenerated toString() are used for ordering.
|
||||
data object None : Ownership()
|
||||
data class Method(val simpleClsName: String, val clsFqn: String) : Ownership()
|
||||
data class ExtensionFunction(val renderedReceiver: String, val outerTypeFqn: String) : Ownership()
|
||||
}
|
||||
}
|
||||
|
||||
private fun findBuilders(psiFile: PsiFile, methods: MutableList<BuilderRequest>) {
|
||||
val imports = mutableSetOf<String>()
|
||||
@@ -507,7 +519,23 @@ private fun findBuilders(psiFile: PsiFile, methods: MutableList<BuilderRequest>)
|
||||
|
||||
val fn = valueParameter.parent.parent as? KtNamedFunction ?: return
|
||||
val methodName = fn.name ?: return
|
||||
val methodCls = valueParameter.containingClass()?.fqName ?: return
|
||||
val methodPackage = fn.containingKtFile.packageFqName.asString()
|
||||
val ownership =
|
||||
fn.receiverTypeReference
|
||||
?.let { type ->
|
||||
Ownership.ExtensionFunction(
|
||||
renderedReceiver = type.renderWithFqnTypes(),
|
||||
outerTypeFqn = analyze(type) {
|
||||
type.type.symbol?.classId?.asSingleFqName()?.asString() ?: return@let null
|
||||
},
|
||||
)
|
||||
}
|
||||
?: valueParameter.containingClass()
|
||||
?.fqName
|
||||
?.let { fqName ->
|
||||
Ownership.Method(simpleClsName = fqName.shortName().asString(), clsFqn = fqName.asString())
|
||||
}
|
||||
?: Ownership.None
|
||||
|
||||
val annotationsToCopyRegex = Regex("""
|
||||
(
|
||||
@@ -533,10 +561,12 @@ private fun findBuilders(psiFile: PsiFile, methods: MutableList<BuilderRequest>)
|
||||
.let(::preferInternalAnnotation),
|
||||
throwsAnnotation = fn.annotationEntries.filter { it.shortName?.asString() in listOf("Throws", "ThrowsChecked") }.joinToString(" ") { it.text.trim() },
|
||||
argsInterfaceFqn = typeFqn,
|
||||
clsFqn = methodCls.asString(),
|
||||
packageFqn = methodPackage,
|
||||
ownership = ownership,
|
||||
declarationFileName = fn.containingKtFile.name,
|
||||
methodName = methodName,
|
||||
methodKDoc = fn.docComment?.extractText() ?: "",
|
||||
returnTypeFqn = fn.typeReference!!.renderWithFqnTypes(),
|
||||
returnTypeFqn = fn.typeReference?.renderWithFqnTypes() ?: "Unit",
|
||||
imports = imports,
|
||||
)
|
||||
}
|
||||
@@ -559,27 +589,37 @@ private suspend fun writeBuilderFiles(
|
||||
Optional.of(path.readText()) to Optional.empty()
|
||||
}
|
||||
|
||||
methods.sortBy { listOf(it.argsInterfaceFqn, it.clsFqn, it.methodName).joinToString() }
|
||||
methods.sortBy { listOfNotNull(it.argsInterfaceFqn, it.packageFqn, it.ownership.toString(), it.methodName).joinToString() }
|
||||
val imports = TreeSet<String>()
|
||||
methods.flatMapTo(imports) { listOf(it.argsInterfaceFqn, it.clsFqn) }
|
||||
methods.mapTo(imports) { it.argsInterfaceFqn }
|
||||
methods.mapNotNullTo(imports) {
|
||||
when (val o = it.ownership) {
|
||||
is Ownership.Method -> o.clsFqn
|
||||
Ownership.None, is Ownership.ExtensionFunction -> null
|
||||
}
|
||||
}
|
||||
methods.flatMapTo(imports) { request -> request.imports.map { import -> import.removePrefix("import ") } }
|
||||
|
||||
val filesToWrite = mutableMapOf<Path, String>()
|
||||
|
||||
for ((clsFqn, clsBuilderRequests) in methods.groupByTo(linkedMapOf()) { it.clsFqn }) {
|
||||
lateinit var sourcePackage: String
|
||||
for ((key, clsBuilderRequests) in methods.groupByTo(linkedMapOf()) { builderRequest ->
|
||||
builderRequest.packageFqn to when (val o = builderRequest.ownership) {
|
||||
is Ownership.ExtensionFunction -> o.outerTypeFqn
|
||||
.removePrefix(builderRequest.packageFqn + ".")
|
||||
.replace(Regex("[.]\\w")) { it.value.substring(1).uppercase() }
|
||||
.plus("Helpers")
|
||||
|
||||
is Ownership.Method -> o.simpleClsName + "Helpers"
|
||||
|
||||
Ownership.None -> builderRequest.declarationFileName.removeSuffix(".kt") + "KtHelpers"
|
||||
}
|
||||
}) {
|
||||
val (sourcePackage, helpersClassName) = key
|
||||
|
||||
@Language("kotlin")
|
||||
var text = ""
|
||||
|
||||
readAction {
|
||||
val cls = getKtClassFromKtLightClass(
|
||||
JavaPsiFacade.getInstance(tempProject).findClass(clsFqn, GlobalSearchScope.projectScope(tempProject)))
|
||||
check(cls != null) { "PsiClass for ${clsFqn} not found" }
|
||||
check(cls.findParentOfType<KtClass>() == null) { "Nested classes are not supported: ${clsFqn}" }
|
||||
|
||||
sourcePackage = clsFqn.substringBeforeLast('.')
|
||||
|
||||
val argsInterfacesByFqn: Map<String, ArgInterfaceInfo> = clsBuilderRequests.associate { builderRequest ->
|
||||
val javaPsiFacade = JavaPsiFacade.getInstance(tempProject)
|
||||
val projectScope = GlobalSearchScope.projectScope(tempProject)
|
||||
@@ -616,6 +656,7 @@ private suspend fun writeBuilderFiles(
|
||||
name = property.name!!,
|
||||
typeFqn = property.typeReference!!.renderWithFqnTypes(),
|
||||
kdoc = property.docComment?.extractText() ?: "",
|
||||
imports = property.getImportableTypes(),
|
||||
)
|
||||
}
|
||||
.sortedBy { it.name }
|
||||
@@ -630,6 +671,7 @@ private suspend fun writeBuilderFiles(
|
||||
typeFqn = property.typeReference!!.renderWithFqnTypes(),
|
||||
body = property.getter!!.bodyExpression!!.renderWithFqnTypes(),
|
||||
kdoc = property.docComment?.extractText() ?: "",
|
||||
imports = property.getImportableTypes(),
|
||||
)
|
||||
}
|
||||
.sortedBy { it.name }
|
||||
@@ -656,13 +698,8 @@ private suspend fun writeBuilderFiles(
|
||||
}
|
||||
.sortedBy { it.name }
|
||||
|
||||
for (fullTypeFqn in requiredArguments.map { it.typeFqn } + optionalArguments.map { it.typeFqn }) {
|
||||
for (singleTypeFqn in fullTypeFqn.split(Regex("[<>,?()-]"))) {
|
||||
if (singleTypeFqn.isNotBlank()) {
|
||||
imports += singleTypeFqn.trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
requiredArguments.flatMapTo(imports) { it.imports }
|
||||
optionalArguments.flatMapTo(imports) { it.imports }
|
||||
|
||||
builderRequest.argsInterfaceFqn to ArgInterfaceInfo(
|
||||
name = argsInterface.name!!,
|
||||
@@ -686,7 +723,7 @@ private suspend fun writeBuilderFiles(
|
||||
for (builderRequest in clsBuilderRequests) {
|
||||
val ownedBuilderFqn = listOf(
|
||||
sourcePackage,
|
||||
builderRequest.clsFqn.removePrefix("$sourcePackage.") + "Helpers",
|
||||
helpersClassName,
|
||||
builderRequest.methodName.replaceFirstChar(Char::uppercaseChar),
|
||||
).joinToString(".")
|
||||
|
||||
@@ -701,15 +738,20 @@ private suspend fun writeBuilderFiles(
|
||||
}
|
||||
}
|
||||
|
||||
val methodReceiver = when (val o = builderRequest.ownership) {
|
||||
is Ownership.ExtensionFunction -> o.renderedReceiver
|
||||
is Ownership.Method -> o.clsFqn
|
||||
Ownership.None -> null
|
||||
}
|
||||
text += """
|
||||
${kdoc.renderKdoc()}@GeneratedBuilder.Result${builderRequest.annotations.joinToString("\n")}
|
||||
fun ${builderRequest.clsFqn}.${builderRequest.methodName}(${
|
||||
fun ${methodReceiver?.plus(".").orEmpty()}${builderRequest.methodName}(${
|
||||
requiredArguments.joinToString("") { prop ->
|
||||
"\n${prop.name}: ${prop.typeFqn},"
|
||||
}.surroundWithNewlinesIfNotBlank()
|
||||
}): $ownedBuilderFqn =
|
||||
$ownedBuilderFqn(
|
||||
owner = this,${requiredArguments.joinToString("") { prop -> "\n${prop.name} = ${prop.name}," }}
|
||||
${if (methodReceiver != null) "owner = this," else ""} ${requiredArguments.joinToString("") { prop -> "\n${prop.name} = ${prop.name}," }}
|
||||
)
|
||||
"""
|
||||
}
|
||||
@@ -722,18 +764,29 @@ private suspend fun writeBuilderFiles(
|
||||
.sorted()
|
||||
.joinToString("\n")
|
||||
|
||||
text += "$annotationsForGroup object ${clsFqn.removePrefix("$sourcePackage.").split('.').first()}Helpers {"
|
||||
text += "$annotationsForGroup object $helpersClassName {"
|
||||
|
||||
for (builderRequest in clsBuilderRequests) {
|
||||
val argsInterfaceInfo = argsInterfacesByFqn[builderRequest.argsInterfaceFqn]!!
|
||||
|
||||
val ownerForKdoc = when (val o = builderRequest.ownership) {
|
||||
is Ownership.ExtensionFunction -> o.outerTypeFqn
|
||||
is Ownership.Method -> o.clsFqn
|
||||
Ownership.None -> null
|
||||
}
|
||||
val ownerForPropertyType = when (val o = builderRequest.ownership) {
|
||||
is Ownership.ExtensionFunction -> o.renderedReceiver
|
||||
is Ownership.Method -> o.clsFqn
|
||||
else -> null
|
||||
}
|
||||
|
||||
text += """
|
||||
/**
|
||||
* Create it via [${builderRequest.clsFqn}.${builderRequest.methodName}].
|
||||
* Create it via [${ownerForKdoc?.plus(".").orEmpty()}${builderRequest.methodName}].
|
||||
*/
|
||||
@GeneratedBuilder.Result${builderRequest.annotations.joinToString("\n")}
|
||||
class ${builderRequest.methodName.replaceFirstChar(Char::uppercaseChar)}(
|
||||
private val owner: ${builderRequest.clsFqn}, ${
|
||||
${if (ownerForPropertyType != null) "private val owner: $ownerForPropertyType," else ""} ${
|
||||
argsInterfaceInfo.requiredArguments.joinToString("") { prop ->
|
||||
"\nprivate var ${prop.name}: ${prop.typeFqn},"
|
||||
}
|
||||
@@ -757,11 +810,11 @@ private suspend fun writeBuilderFiles(
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete the builder and call [${builderRequest.clsFqn}.${builderRequest.methodName}]
|
||||
* Complete the builder and call [${ownerForKdoc?.plus(".").orEmpty()}${builderRequest.methodName}]
|
||||
* with an instance of [${builderRequest.argsInterfaceFqn}].
|
||||
*/${if (builderRequest.shouldCheckReturnValue) "@org.jetbrains.annotations.CheckReturnValue" else ""}${builderRequest.throwsAnnotation ?: ""}
|
||||
override suspend fun eelIt(): ${builderRequest.returnTypeFqn} =
|
||||
owner.${builderRequest.methodName}(${argsInterfaceInfo.name}Impl(
|
||||
${if (ownerForPropertyType != null) "owner." else ""}${builderRequest.methodName}(${argsInterfaceInfo.name}Impl(
|
||||
${
|
||||
argsInterfaceInfo.properties.map { it.name }.joinToString("\n") { name -> "$name = $name," }
|
||||
})
|
||||
@@ -772,7 +825,7 @@ private suspend fun writeBuilderFiles(
|
||||
|
||||
text += "}"
|
||||
|
||||
filesToWrite[Path.of(genSrcDirName.toString(), sourcePackage.replace('.', '/'), "${cls.name}Helpers.kt")] = fileHeader + text
|
||||
filesToWrite[Path.of(genSrcDirName.toString(), sourcePackage.replace('.', '/'), "$helpersClassName.kt")] = fileHeader + text
|
||||
|
||||
for ((argsInterfaceFqn, argsInterfaceInfo) in argsInterfacesByFqn) {
|
||||
text = """
|
||||
@@ -928,6 +981,23 @@ private fun PsiElement.renderWithFqnTypes(): String {
|
||||
append(element.type.render(KaTypeRendererForSource.WITH_QUALIFIED_NAMES, Variance.INVARIANT))
|
||||
}
|
||||
}
|
||||
element is KtQualifiedExpression -> {
|
||||
val fqName =
|
||||
element.children
|
||||
.takeIf { children ->
|
||||
assert(children.size == 2)
|
||||
children.first() is KtSimpleNameExpression
|
||||
}
|
||||
?.last()
|
||||
?.let { it as KtSimpleNameExpression }
|
||||
?.fqName()
|
||||
if (fqName != null) {
|
||||
append(fqName)
|
||||
}
|
||||
else {
|
||||
super.visitElement(element)
|
||||
}
|
||||
}
|
||||
element.firstChild == null -> {
|
||||
append(element.text)
|
||||
}
|
||||
@@ -936,10 +1006,38 @@ private fun PsiElement.renderWithFqnTypes(): String {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtSimpleNameExpression.fqName(): String? =
|
||||
analyze(this) {
|
||||
val declaration = this@fqName.references.firstOrNull()?.resolve() as? KtNamedDeclaration
|
||||
declaration?.fqName?.asString()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
private fun PsiElement.getImportableTypes(): Collection<String> {
|
||||
val result = hashSetOf<String>()
|
||||
accept(object : PsiRecursiveElementWalkingVisitor() {
|
||||
override fun visitElement(element: PsiElement) {
|
||||
if (element is KtTypeReference) {
|
||||
val clsName = analyze(element) {
|
||||
val maybeNestedClass = element.type.takeIf { !it.isPrimitive && !it.isAnyType && !it.isNothingType }?.expandedSymbol?.classId
|
||||
val rootClass = generateSequence(maybeNestedClass) { it.parentClassId }.lastOrNull()
|
||||
rootClass?.asFqNameString()
|
||||
}
|
||||
if (clsName != null) {
|
||||
result += clsName
|
||||
}
|
||||
}
|
||||
else {
|
||||
super.visitElement(element)
|
||||
}
|
||||
}
|
||||
})
|
||||
return result
|
||||
}
|
||||
|
||||
private fun KDoc.extractText(): String =
|
||||
text
|
||||
.trimIndent()
|
||||
@@ -969,8 +1067,8 @@ private fun getKtClassFromKtLightClass(lightClass: PsiClass?): KtClass? {
|
||||
}
|
||||
}
|
||||
|
||||
private class RequiredArgument(val name: String, val typeFqn: String, val kdoc: String)
|
||||
private class OptionalArgument(val name: String, val typeFqn: String, val kdoc: String, val body: String)
|
||||
private class RequiredArgument(val name: String, val typeFqn: String, val kdoc: String, val imports: Collection<String>)
|
||||
private class OptionalArgument(val name: String, val typeFqn: String, val kdoc: String, val body: String, val imports: Collection<String>)
|
||||
|
||||
private class Property(val name: String, val annotations: Collection<String>) {
|
||||
override fun toString(): String {
|
||||
|
||||
@@ -6,8 +6,6 @@ package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.*
|
||||
import com.intellij.platform.eel.EelExecApi.ExecuteProcessOptions
|
||||
import com.intellij.platform.eel.EelExecApi.InteractionOptions
|
||||
import com.intellij.platform.eel.EelExecApi.PtyOrStdErrSettings
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -119,9 +117,9 @@ object EelExecApiHelpers {
|
||||
|
||||
private var env: Map<String, String> = mapOf()
|
||||
|
||||
private var interactionOptions: InteractionOptions? = null
|
||||
private var interactionOptions: EelExecApi.InteractionOptions? = null
|
||||
|
||||
private var ptyOrStdErrSettings: PtyOrStdErrSettings? = interactionOptions
|
||||
private var ptyOrStdErrSettings: EelExecApi.PtyOrStdErrSettings? = interactionOptions
|
||||
|
||||
private var scope: CoroutineScope? = null
|
||||
|
||||
@@ -166,13 +164,13 @@ object EelExecApiHelpers {
|
||||
* See `termcap(2)`, `terminfo(2)`, `ncurses(3X)` and ISBN `0937175226`.
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
fun interactionOptions(arg: InteractionOptions?): Execute = apply {
|
||||
fun interactionOptions(arg: EelExecApi.InteractionOptions?): Execute = apply {
|
||||
this.interactionOptions = arg
|
||||
}
|
||||
|
||||
@Deprecated("Switch to interactionOptions", replaceWith = ReplaceWith("interactionOptions"))
|
||||
@ApiStatus.Internal
|
||||
fun ptyOrStdErrSettings(arg: PtyOrStdErrSettings?): Execute = apply {
|
||||
fun ptyOrStdErrSettings(arg: EelExecApi.PtyOrStdErrSettings?): Execute = apply {
|
||||
this.ptyOrStdErrSettings = arg
|
||||
}
|
||||
|
||||
@@ -224,9 +222,9 @@ object EelExecApiHelpers {
|
||||
|
||||
private var env: Map<String, String> = mapOf()
|
||||
|
||||
private var interactionOptions: InteractionOptions? = null
|
||||
private var interactionOptions: EelExecApi.InteractionOptions? = null
|
||||
|
||||
private var ptyOrStdErrSettings: PtyOrStdErrSettings? = interactionOptions
|
||||
private var ptyOrStdErrSettings: EelExecApi.PtyOrStdErrSettings? = interactionOptions
|
||||
|
||||
private var scope: CoroutineScope? = null
|
||||
|
||||
@@ -271,13 +269,13 @@ object EelExecApiHelpers {
|
||||
* See `termcap(2)`, `terminfo(2)`, `ncurses(3X)` and ISBN `0937175226`.
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
fun interactionOptions(arg: InteractionOptions?): SpawnProcess = apply {
|
||||
fun interactionOptions(arg: EelExecApi.InteractionOptions?): SpawnProcess = apply {
|
||||
this.interactionOptions = arg
|
||||
}
|
||||
|
||||
@Deprecated("Switch to interactionOptions", replaceWith = ReplaceWith("interactionOptions"))
|
||||
@ApiStatus.Internal
|
||||
fun ptyOrStdErrSettings(arg: PtyOrStdErrSettings?): SpawnProcess = apply {
|
||||
fun ptyOrStdErrSettings(arg: EelExecApi.PtyOrStdErrSettings?): SpawnProcess = apply {
|
||||
this.ptyOrStdErrSettings = arg
|
||||
}
|
||||
|
||||
|
||||
@@ -6,9 +6,7 @@ package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.*
|
||||
import com.intellij.platform.eel.EelExecApi.ExecuteProcessOptions
|
||||
import com.intellij.platform.eel.EelExecApi.InteractionOptions
|
||||
import com.intellij.platform.eel.EelExecApi.PtyOrStdErrSettings
|
||||
import com.intellij.platform.eel.EelExecPosixApi.PosixEnvironmentVariablesOptions.Mode
|
||||
import com.intellij.platform.eel.EelExecPosixApi.PosixEnvironmentVariablesOptions
|
||||
import com.intellij.platform.eel.channels.EelDelicateApi
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -54,9 +52,9 @@ object EelExecPosixApiHelpers {
|
||||
|
||||
private var env: Map<String, String> = mapOf()
|
||||
|
||||
private var interactionOptions: InteractionOptions? = null
|
||||
private var interactionOptions: EelExecApi.InteractionOptions? = null
|
||||
|
||||
private var ptyOrStdErrSettings: PtyOrStdErrSettings? = interactionOptions
|
||||
private var ptyOrStdErrSettings: EelExecApi.PtyOrStdErrSettings? = interactionOptions
|
||||
|
||||
private var scope: CoroutineScope? = null
|
||||
|
||||
@@ -101,13 +99,13 @@ object EelExecPosixApiHelpers {
|
||||
* See `termcap(2)`, `terminfo(2)`, `ncurses(3X)` and ISBN `0937175226`.
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
fun interactionOptions(arg: InteractionOptions?): SpawnProcess = apply {
|
||||
fun interactionOptions(arg: EelExecApi.InteractionOptions?): SpawnProcess = apply {
|
||||
this.interactionOptions = arg
|
||||
}
|
||||
|
||||
@Deprecated("Switch to interactionOptions", replaceWith = ReplaceWith("interactionOptions"))
|
||||
@ApiStatus.Internal
|
||||
fun ptyOrStdErrSettings(arg: PtyOrStdErrSettings?): SpawnProcess = apply {
|
||||
fun ptyOrStdErrSettings(arg: EelExecApi.PtyOrStdErrSettings?): SpawnProcess = apply {
|
||||
this.ptyOrStdErrSettings = arg
|
||||
}
|
||||
|
||||
@@ -154,11 +152,11 @@ object EelExecPosixApiHelpers {
|
||||
class EnvironmentVariables(
|
||||
private val owner: EelExecPosixApi,
|
||||
) : OwnedBuilder<EelExecApi.EnvironmentVariablesDeferred> {
|
||||
private var mode: Mode = Mode.DEFAULT
|
||||
private var mode: PosixEnvironmentVariablesOptions.Mode = PosixEnvironmentVariablesOptions.Mode.DEFAULT
|
||||
|
||||
private var onlyActual: Boolean = false
|
||||
|
||||
fun mode(arg: Mode): EnvironmentVariables = apply {
|
||||
fun mode(arg: PosixEnvironmentVariablesOptions.Mode): EnvironmentVariables = apply {
|
||||
this.mode = arg
|
||||
}
|
||||
|
||||
@@ -172,7 +170,7 @@ object EelExecPosixApiHelpers {
|
||||
* In this mode [EelExecApi.EnvironmentVariablesException] is not thrown.
|
||||
*/
|
||||
fun default(): EnvironmentVariables =
|
||||
mode(Mode.DEFAULT)
|
||||
mode(PosixEnvironmentVariablesOptions.Mode.DEFAULT)
|
||||
|
||||
/**
|
||||
* **Use with caution, avoid when possible.**
|
||||
@@ -196,7 +194,7 @@ object EelExecPosixApiHelpers {
|
||||
*/
|
||||
@EelDelicateApi
|
||||
fun loginInteractive(): EnvironmentVariables =
|
||||
mode(Mode.LOGIN_INTERACTIVE)
|
||||
mode(PosixEnvironmentVariablesOptions.Mode.LOGIN_INTERACTIVE)
|
||||
|
||||
/**
|
||||
* This mode executes a shell process supposed to load various profile scripts:
|
||||
@@ -209,7 +207,7 @@ object EelExecPosixApiHelpers {
|
||||
* **Notice:** In this mode [EelExecApi.EnvironmentVariablesException] MAY be thrown.
|
||||
*/
|
||||
fun loginNonInteractive(): EnvironmentVariables =
|
||||
mode(Mode.LOGIN_NON_INTERACTIVE)
|
||||
mode(PosixEnvironmentVariablesOptions.Mode.LOGIN_NON_INTERACTIVE)
|
||||
|
||||
/**
|
||||
* The fastest way to get environment variables. It doesn't call shell scripts written by users.
|
||||
@@ -219,7 +217,7 @@ object EelExecPosixApiHelpers {
|
||||
* In this mode [EelExecApi.EnvironmentVariablesException] is not thrown.
|
||||
*/
|
||||
fun minimal(): EnvironmentVariables =
|
||||
mode(Mode.MINIMAL)
|
||||
mode(PosixEnvironmentVariablesOptions.Mode.MINIMAL)
|
||||
|
||||
/**
|
||||
* The implementation MAY cache the environment variables by default because they rarely change in real life.
|
||||
|
||||
@@ -6,8 +6,6 @@ package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.*
|
||||
import com.intellij.platform.eel.EelExecApi.ExecuteProcessOptions
|
||||
import com.intellij.platform.eel.EelExecApi.InteractionOptions
|
||||
import com.intellij.platform.eel.EelExecApi.PtyOrStdErrSettings
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -45,9 +43,9 @@ object EelExecWindowsApiHelpers {
|
||||
|
||||
private var env: Map<String, String> = mapOf()
|
||||
|
||||
private var interactionOptions: InteractionOptions? = null
|
||||
private var interactionOptions: EelExecApi.InteractionOptions? = null
|
||||
|
||||
private var ptyOrStdErrSettings: PtyOrStdErrSettings? = interactionOptions
|
||||
private var ptyOrStdErrSettings: EelExecApi.PtyOrStdErrSettings? = interactionOptions
|
||||
|
||||
private var scope: CoroutineScope? = null
|
||||
|
||||
@@ -92,13 +90,13 @@ object EelExecWindowsApiHelpers {
|
||||
* See `termcap(2)`, `terminfo(2)`, `ncurses(3X)` and ISBN `0937175226`.
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
fun interactionOptions(arg: InteractionOptions?): SpawnProcess = apply {
|
||||
fun interactionOptions(arg: EelExecApi.InteractionOptions?): SpawnProcess = apply {
|
||||
this.interactionOptions = arg
|
||||
}
|
||||
|
||||
@Deprecated("Switch to interactionOptions", replaceWith = ReplaceWith("interactionOptions"))
|
||||
@ApiStatus.Internal
|
||||
fun ptyOrStdErrSettings(arg: PtyOrStdErrSettings?): SpawnProcess = apply {
|
||||
fun ptyOrStdErrSettings(arg: EelExecApi.PtyOrStdErrSettings?): SpawnProcess = apply {
|
||||
this.ptyOrStdErrSettings = arg
|
||||
}
|
||||
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.EelExecApi.ExecuteProcessOptions
|
||||
import com.intellij.platform.eel.EelExecApi.InteractionOptions
|
||||
import com.intellij.platform.eel.EelExecApi.PtyOrStdErrSettings
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -28,9 +26,9 @@ class ExecuteProcessOptionsBuilder(
|
||||
|
||||
private var env: Map<String, String> = mapOf()
|
||||
|
||||
private var interactionOptions: InteractionOptions? = null
|
||||
private var interactionOptions: EelExecApi.InteractionOptions? = null
|
||||
|
||||
private var ptyOrStdErrSettings: PtyOrStdErrSettings? = interactionOptions
|
||||
private var ptyOrStdErrSettings: EelExecApi.PtyOrStdErrSettings? = interactionOptions
|
||||
|
||||
private var scope: CoroutineScope? = null
|
||||
|
||||
@@ -75,13 +73,13 @@ class ExecuteProcessOptionsBuilder(
|
||||
* See `termcap(2)`, `terminfo(2)`, `ncurses(3X)` and ISBN `0937175226`.
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
fun interactionOptions(arg: InteractionOptions?): ExecuteProcessOptionsBuilder = apply {
|
||||
fun interactionOptions(arg: EelExecApi.InteractionOptions?): ExecuteProcessOptionsBuilder = apply {
|
||||
this.interactionOptions = arg
|
||||
}
|
||||
|
||||
@Deprecated("Switch to interactionOptions", replaceWith = ReplaceWith("interactionOptions"))
|
||||
@ApiStatus.Internal
|
||||
fun ptyOrStdErrSettings(arg: PtyOrStdErrSettings?): ExecuteProcessOptionsBuilder = apply {
|
||||
fun ptyOrStdErrSettings(arg: EelExecApi.PtyOrStdErrSettings?): ExecuteProcessOptionsBuilder = apply {
|
||||
this.ptyOrStdErrSettings = arg
|
||||
}
|
||||
|
||||
@@ -118,8 +116,8 @@ internal class ExecuteProcessOptionsImpl(
|
||||
override val args: List<String>,
|
||||
override val env: Map<String, String>,
|
||||
override val exe: String,
|
||||
override val interactionOptions: InteractionOptions?,
|
||||
override val ptyOrStdErrSettings: PtyOrStdErrSettings?,
|
||||
override val interactionOptions: EelExecApi.InteractionOptions?,
|
||||
override val ptyOrStdErrSettings: EelExecApi.PtyOrStdErrSettings?,
|
||||
override val scope: CoroutineScope?,
|
||||
override val workingDirectory: EelPath?,
|
||||
) : ExecuteProcessOptions
|
||||
@@ -0,0 +1,33 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
/**
|
||||
* This file is generated by [com.intellij.platform.eel.codegen.BuildersGeneratorTest].
|
||||
*/
|
||||
package com.intellij.platform.eel
|
||||
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
class FoobarOptsBuilder {
|
||||
private var bar: Int? = null
|
||||
|
||||
private var foo: String? = null
|
||||
|
||||
fun bar(arg: Int?): FoobarOptsBuilder = apply {
|
||||
this.bar = arg
|
||||
}
|
||||
|
||||
fun foo(arg: String?): FoobarOptsBuilder = apply {
|
||||
this.foo = arg
|
||||
}
|
||||
|
||||
fun build(): FoobarOpts =
|
||||
FoobarOptsImpl(
|
||||
bar = bar,
|
||||
foo = foo,
|
||||
)
|
||||
}
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
internal class FoobarOptsImpl(
|
||||
override val bar: Int?,
|
||||
override val foo: String?,
|
||||
) : FoobarOpts
|
||||
@@ -0,0 +1,48 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
/**
|
||||
* This file is generated by [com.intellij.platform.eel.codegen.BuildersGeneratorTest].
|
||||
*/
|
||||
package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.*
|
||||
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
fun OurThing.foobar5(): OurThingHelpers.Foobar5 =
|
||||
OurThingHelpers.Foobar5(
|
||||
owner = this,
|
||||
)
|
||||
|
||||
object OurThingHelpers {
|
||||
/**
|
||||
* Create it via [com.intellij.platform.eel.OurThing.foobar5].
|
||||
*/
|
||||
@GeneratedBuilder.Result
|
||||
class Foobar5(
|
||||
private val owner: OurThing,
|
||||
) : OwnedBuilder<Unit> {
|
||||
private var bar: Int? = null
|
||||
|
||||
private var foo: String? = null
|
||||
|
||||
fun bar(arg: Int?): Foobar5 = apply {
|
||||
this.bar = arg
|
||||
}
|
||||
|
||||
fun foo(arg: String?): Foobar5 = apply {
|
||||
this.foo = arg
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete the builder and call [com.intellij.platform.eel.OurThing.foobar5]
|
||||
* with an instance of [com.intellij.platform.eel.FoobarOpts].
|
||||
*/
|
||||
override suspend fun eelIt(): Unit =
|
||||
owner.foobar5(
|
||||
FoobarOptsImpl(
|
||||
bar = bar,
|
||||
foo = foo,
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
+7
-8
@@ -5,7 +5,6 @@
|
||||
package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.EelExecPosixApi.PosixEnvironmentVariablesOptions
|
||||
import com.intellij.platform.eel.EelExecPosixApi.PosixEnvironmentVariablesOptions.Mode
|
||||
import com.intellij.platform.eel.channels.EelDelicateApi
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@@ -13,11 +12,11 @@ import org.jetbrains.annotations.ApiStatus
|
||||
@GeneratedBuilder.Result
|
||||
@ApiStatus.Experimental
|
||||
class PosixEnvironmentVariablesOptionsBuilder {
|
||||
private var mode: Mode = Mode.DEFAULT
|
||||
private var mode: PosixEnvironmentVariablesOptions.Mode = PosixEnvironmentVariablesOptions.Mode.DEFAULT
|
||||
|
||||
private var onlyActual: Boolean = false
|
||||
|
||||
fun mode(arg: Mode): PosixEnvironmentVariablesOptionsBuilder = apply {
|
||||
fun mode(arg: PosixEnvironmentVariablesOptions.Mode): PosixEnvironmentVariablesOptionsBuilder = apply {
|
||||
this.mode = arg
|
||||
}
|
||||
|
||||
@@ -31,7 +30,7 @@ class PosixEnvironmentVariablesOptionsBuilder {
|
||||
* In this mode [EelExecApi.EnvironmentVariablesException] is not thrown.
|
||||
*/
|
||||
fun default(): PosixEnvironmentVariablesOptionsBuilder =
|
||||
mode(Mode.DEFAULT)
|
||||
mode(PosixEnvironmentVariablesOptions.Mode.DEFAULT)
|
||||
|
||||
/**
|
||||
* **Use with caution, avoid when possible.**
|
||||
@@ -55,7 +54,7 @@ class PosixEnvironmentVariablesOptionsBuilder {
|
||||
*/
|
||||
@EelDelicateApi
|
||||
fun loginInteractive(): PosixEnvironmentVariablesOptionsBuilder =
|
||||
mode(Mode.LOGIN_INTERACTIVE)
|
||||
mode(PosixEnvironmentVariablesOptions.Mode.LOGIN_INTERACTIVE)
|
||||
|
||||
/**
|
||||
* This mode executes a shell process supposed to load various profile scripts:
|
||||
@@ -68,7 +67,7 @@ class PosixEnvironmentVariablesOptionsBuilder {
|
||||
* **Notice:** In this mode [EelExecApi.EnvironmentVariablesException] MAY be thrown.
|
||||
*/
|
||||
fun loginNonInteractive(): PosixEnvironmentVariablesOptionsBuilder =
|
||||
mode(Mode.LOGIN_NON_INTERACTIVE)
|
||||
mode(PosixEnvironmentVariablesOptions.Mode.LOGIN_NON_INTERACTIVE)
|
||||
|
||||
/**
|
||||
* The fastest way to get environment variables. It doesn't call shell scripts written by users.
|
||||
@@ -78,7 +77,7 @@ class PosixEnvironmentVariablesOptionsBuilder {
|
||||
* In this mode [EelExecApi.EnvironmentVariablesException] is not thrown.
|
||||
*/
|
||||
fun minimal(): PosixEnvironmentVariablesOptionsBuilder =
|
||||
mode(Mode.MINIMAL)
|
||||
mode(PosixEnvironmentVariablesOptions.Mode.MINIMAL)
|
||||
|
||||
/**
|
||||
* The implementation MAY cache the environment variables by default because they rarely change in real life.
|
||||
@@ -101,6 +100,6 @@ class PosixEnvironmentVariablesOptionsBuilder {
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
internal class PosixEnvironmentVariablesOptionsImpl(
|
||||
override val mode: Mode,
|
||||
override val mode: PosixEnvironmentVariablesOptions.Mode,
|
||||
override val onlyActual: Boolean,
|
||||
) : PosixEnvironmentVariablesOptions
|
||||
@@ -0,0 +1,46 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
/**
|
||||
* This file is generated by [com.intellij.platform.eel.codegen.BuildersGeneratorTest].
|
||||
*/
|
||||
package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.*
|
||||
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
fun foobar1(): TmpExampleKtHelpers.Foobar1 =
|
||||
TmpExampleKtHelpers.Foobar1(
|
||||
|
||||
)
|
||||
|
||||
object TmpExampleKtHelpers {
|
||||
/**
|
||||
* Create it via [foobar1].
|
||||
*/
|
||||
@GeneratedBuilder.Result
|
||||
class Foobar1 : OwnedBuilder<Unit> {
|
||||
private var bar: Int? = null
|
||||
|
||||
private var foo: String? = null
|
||||
|
||||
fun bar(arg: Int?): Foobar1 = apply {
|
||||
this.bar = arg
|
||||
}
|
||||
|
||||
fun foo(arg: String?): Foobar1 = apply {
|
||||
this.foo = arg
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete the builder and call [foobar1]
|
||||
* with an instance of [com.intellij.platform.eel.FoobarOpts].
|
||||
*/
|
||||
override suspend fun eelIt(): Unit =
|
||||
foobar1(
|
||||
FoobarOptsImpl(
|
||||
bar = bar,
|
||||
foo = foo,
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
+9
-11
@@ -5,9 +5,7 @@
|
||||
package com.intellij.platform.eel.fs
|
||||
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileInfo.Permissions
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.ChangeAttributesOptions
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.TimeSinceEpoch
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@@ -17,17 +15,17 @@ import org.jetbrains.annotations.ApiStatus
|
||||
class ChangeAttributesOptionsBuilder(
|
||||
private var path: EelPath,
|
||||
) {
|
||||
private var accessTime: TimeSinceEpoch? = null
|
||||
private var accessTime: EelFileSystemApi.TimeSinceEpoch? = null
|
||||
|
||||
private var modificationTime: TimeSinceEpoch? = null
|
||||
private var modificationTime: EelFileSystemApi.TimeSinceEpoch? = null
|
||||
|
||||
private var permissions: Permissions? = null
|
||||
private var permissions: EelFileInfo.Permissions? = null
|
||||
|
||||
fun accessTime(arg: TimeSinceEpoch?): ChangeAttributesOptionsBuilder = apply {
|
||||
fun accessTime(arg: EelFileSystemApi.TimeSinceEpoch?): ChangeAttributesOptionsBuilder = apply {
|
||||
this.accessTime = arg
|
||||
}
|
||||
|
||||
fun modificationTime(arg: TimeSinceEpoch?): ChangeAttributesOptionsBuilder = apply {
|
||||
fun modificationTime(arg: EelFileSystemApi.TimeSinceEpoch?): ChangeAttributesOptionsBuilder = apply {
|
||||
this.modificationTime = arg
|
||||
}
|
||||
|
||||
@@ -35,7 +33,7 @@ class ChangeAttributesOptionsBuilder(
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun permissions(arg: Permissions?): ChangeAttributesOptionsBuilder = apply {
|
||||
fun permissions(arg: EelFileInfo.Permissions?): ChangeAttributesOptionsBuilder = apply {
|
||||
this.permissions = arg
|
||||
}
|
||||
|
||||
@@ -50,8 +48,8 @@ class ChangeAttributesOptionsBuilder(
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
internal class ChangeAttributesOptionsImpl(
|
||||
override val accessTime: TimeSinceEpoch?,
|
||||
override val modificationTime: TimeSinceEpoch?,
|
||||
override val accessTime: EelFileSystemApi.TimeSinceEpoch?,
|
||||
override val modificationTime: EelFileSystemApi.TimeSinceEpoch?,
|
||||
override val path: EelPath,
|
||||
override val permissions: Permissions?,
|
||||
override val permissions: EelFileInfo.Permissions?,
|
||||
) : ChangeAttributesOptions
|
||||
@@ -8,18 +8,10 @@ import com.intellij.platform.eel.EelResult
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.OwnedBuilder
|
||||
import com.intellij.platform.eel.channels.EelDelicateApi
|
||||
import com.intellij.platform.eel.fs.EelFileInfo.Permissions
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.FileChangeType
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.FileWriterCreationMode
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.ReplaceExistingDuringMove
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.StatError
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.SymlinkPolicy
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.TimeSinceEpoch
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.UnwatchOptions
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WalkDirectoryOptions.WalkDirectoryEntryOrder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WalkDirectoryOptions.WalkDirectoryTraversalOrder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WalkDirectoryOptions
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WatchOptions
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WatchedPath
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -231,17 +223,17 @@ object EelFileSystemApiHelpers {
|
||||
private val owner: EelFileSystemApi,
|
||||
private var path: EelPath,
|
||||
) : OwnedBuilder<EelResult<Unit, EelFileSystemApi.ChangeAttributesError>> {
|
||||
private var accessTime: TimeSinceEpoch? = null
|
||||
private var accessTime: EelFileSystemApi.TimeSinceEpoch? = null
|
||||
|
||||
private var modificationTime: TimeSinceEpoch? = null
|
||||
private var modificationTime: EelFileSystemApi.TimeSinceEpoch? = null
|
||||
|
||||
private var permissions: Permissions? = null
|
||||
private var permissions: EelFileInfo.Permissions? = null
|
||||
|
||||
fun accessTime(arg: TimeSinceEpoch?): ChangeAttributes = apply {
|
||||
fun accessTime(arg: EelFileSystemApi.TimeSinceEpoch?): ChangeAttributes = apply {
|
||||
this.accessTime = arg
|
||||
}
|
||||
|
||||
fun modificationTime(arg: TimeSinceEpoch?): ChangeAttributes = apply {
|
||||
fun modificationTime(arg: EelFileSystemApi.TimeSinceEpoch?): ChangeAttributes = apply {
|
||||
this.modificationTime = arg
|
||||
}
|
||||
|
||||
@@ -249,7 +241,7 @@ object EelFileSystemApiHelpers {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun permissions(arg: Permissions?): ChangeAttributes = apply {
|
||||
fun permissions(arg: EelFileInfo.Permissions?): ChangeAttributes = apply {
|
||||
this.permissions = arg
|
||||
}
|
||||
|
||||
@@ -441,13 +433,13 @@ object EelFileSystemApiHelpers {
|
||||
private val owner: EelFileSystemApi,
|
||||
private var path: EelPath,
|
||||
) : OwnedBuilder<EelResult<Collection<Pair<String, EelFileInfo>>, EelFileSystemApi.ListDirectoryError>> {
|
||||
private var symlinkPolicy: SymlinkPolicy = SymlinkPolicy.DO_NOT_RESOLVE
|
||||
private var symlinkPolicy: EelFileSystemApi.SymlinkPolicy = EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE
|
||||
|
||||
fun path(arg: EelPath): ListDirectoryWithAttrs = apply {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun symlinkPolicy(arg: SymlinkPolicy): ListDirectoryWithAttrs = apply {
|
||||
fun symlinkPolicy(arg: EelFileSystemApi.SymlinkPolicy): ListDirectoryWithAttrs = apply {
|
||||
this.symlinkPolicy = arg
|
||||
}
|
||||
|
||||
@@ -456,20 +448,20 @@ object EelFileSystemApiHelpers {
|
||||
* This option makes the operation a bit more efficient if it is not interested in symlinks.
|
||||
*/
|
||||
fun doNotResolve(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink and returns the information about the target of the symlink,
|
||||
* But does not perform anything on the target of the symlink itself.
|
||||
*/
|
||||
fun justResolve(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.JUST_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.JUST_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink, follows it, and performs the required operation on target.
|
||||
*/
|
||||
fun resolveAndFollow(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
|
||||
/**
|
||||
* Complete the builder and call [com.intellij.platform.eel.fs.EelFileSystemApi.listDirectoryWithAttrs]
|
||||
@@ -497,25 +489,25 @@ object EelFileSystemApiHelpers {
|
||||
) : OwnedBuilder<EelResult<Unit, EelFileSystemApi.MoveError>> {
|
||||
private var followLinks: Boolean = false
|
||||
|
||||
private var replaceExisting: ReplaceExistingDuringMove = ReplaceExistingDuringMove.REPLACE_EVERYTHING
|
||||
private var replaceExisting: EelFileSystemApi.ReplaceExistingDuringMove = EelFileSystemApi.ReplaceExistingDuringMove.REPLACE_EVERYTHING
|
||||
|
||||
fun followLinks(arg: Boolean): Move = apply {
|
||||
this.followLinks = arg
|
||||
}
|
||||
|
||||
fun replaceExisting(arg: ReplaceExistingDuringMove): Move = apply {
|
||||
fun replaceExisting(arg: EelFileSystemApi.ReplaceExistingDuringMove): Move = apply {
|
||||
this.replaceExisting = arg
|
||||
}
|
||||
|
||||
fun doNotReplace(): Move =
|
||||
replaceExisting(ReplaceExistingDuringMove.DO_NOT_REPLACE)
|
||||
replaceExisting(EelFileSystemApi.ReplaceExistingDuringMove.DO_NOT_REPLACE)
|
||||
|
||||
/** For compatibility with Java NIO. */
|
||||
fun doNotReplaceDirectories(): Move =
|
||||
replaceExisting(ReplaceExistingDuringMove.DO_NOT_REPLACE_DIRECTORIES)
|
||||
replaceExisting(EelFileSystemApi.ReplaceExistingDuringMove.DO_NOT_REPLACE_DIRECTORIES)
|
||||
|
||||
fun replaceEverything(): Move =
|
||||
replaceExisting(ReplaceExistingDuringMove.REPLACE_EVERYTHING)
|
||||
replaceExisting(EelFileSystemApi.ReplaceExistingDuringMove.REPLACE_EVERYTHING)
|
||||
|
||||
fun source(arg: EelPath): Move = apply {
|
||||
this.source = arg
|
||||
@@ -700,13 +692,13 @@ object EelFileSystemApiHelpers {
|
||||
private val owner: EelFileSystemApi,
|
||||
private var path: EelPath,
|
||||
) : OwnedBuilder<EelResult<EelFileInfo, StatError>> {
|
||||
private var symlinkPolicy: SymlinkPolicy = SymlinkPolicy.DO_NOT_RESOLVE
|
||||
private var symlinkPolicy: EelFileSystemApi.SymlinkPolicy = EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE
|
||||
|
||||
fun path(arg: EelPath): Stat = apply {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun symlinkPolicy(arg: SymlinkPolicy): Stat = apply {
|
||||
fun symlinkPolicy(arg: EelFileSystemApi.SymlinkPolicy): Stat = apply {
|
||||
this.symlinkPolicy = arg
|
||||
}
|
||||
|
||||
@@ -715,20 +707,20 @@ object EelFileSystemApiHelpers {
|
||||
* This option makes the operation a bit more efficient if it is not interested in symlinks.
|
||||
*/
|
||||
fun doNotResolve(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink and returns the information about the target of the symlink,
|
||||
* But does not perform anything on the target of the symlink itself.
|
||||
*/
|
||||
fun justResolve(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.JUST_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.JUST_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink, follows it, and performs the required operation on target.
|
||||
*/
|
||||
fun resolveAndFollow(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
|
||||
/**
|
||||
* Complete the builder and call [com.intellij.platform.eel.fs.EelFileSystemApi.stat]
|
||||
@@ -781,7 +773,7 @@ object EelFileSystemApiHelpers {
|
||||
private val owner: EelFileSystemApi,
|
||||
private var path: EelPath,
|
||||
) : OwnedBuilder<Flow<WalkDirectoryEntryResult>> {
|
||||
private var entryOrder: WalkDirectoryEntryOrder = WalkDirectoryEntryOrder.RANDOM
|
||||
private var entryOrder: WalkDirectoryOptions.WalkDirectoryEntryOrder = WalkDirectoryOptions.WalkDirectoryEntryOrder.RANDOM
|
||||
|
||||
private var fileContentsHash: Boolean = false
|
||||
|
||||
@@ -789,7 +781,7 @@ object EelFileSystemApiHelpers {
|
||||
|
||||
private var readMetadata: Boolean = false
|
||||
|
||||
private var traversalOrder: WalkDirectoryTraversalOrder = WalkDirectoryTraversalOrder.DFS
|
||||
private var traversalOrder: WalkDirectoryOptions.WalkDirectoryTraversalOrder = WalkDirectoryOptions.WalkDirectoryTraversalOrder.DFS
|
||||
|
||||
private var yieldDirectories: Boolean = true
|
||||
|
||||
@@ -802,7 +794,7 @@ object EelFileSystemApiHelpers {
|
||||
/**
|
||||
* The default is RANDOM.
|
||||
*/
|
||||
fun entryOrder(arg: WalkDirectoryEntryOrder): WalkDirectory = apply {
|
||||
fun entryOrder(arg: WalkDirectoryOptions.WalkDirectoryEntryOrder): WalkDirectory = apply {
|
||||
this.entryOrder = arg
|
||||
}
|
||||
|
||||
@@ -810,14 +802,14 @@ object EelFileSystemApiHelpers {
|
||||
* Yield directory entries in alphabetical order.
|
||||
*/
|
||||
fun alphabetical(): WalkDirectory =
|
||||
entryOrder(WalkDirectoryEntryOrder.ALPHABETICAL)
|
||||
entryOrder(WalkDirectoryOptions.WalkDirectoryEntryOrder.ALPHABETICAL)
|
||||
|
||||
/**
|
||||
* Yield directory entries in order in which they appear on the file system.
|
||||
* If you do not care for the order of the files, this is the preferable option.
|
||||
*/
|
||||
fun random(): WalkDirectory =
|
||||
entryOrder(WalkDirectoryEntryOrder.RANDOM)
|
||||
entryOrder(WalkDirectoryOptions.WalkDirectoryEntryOrder.RANDOM)
|
||||
|
||||
/**
|
||||
* Yield hash of the regular file's contents. Contents are hashed using xxHash. Default is false.
|
||||
@@ -866,7 +858,7 @@ object EelFileSystemApiHelpers {
|
||||
/**
|
||||
* The default is DFS.
|
||||
*/
|
||||
fun traversalOrder(arg: WalkDirectoryTraversalOrder): WalkDirectory = apply {
|
||||
fun traversalOrder(arg: WalkDirectoryOptions.WalkDirectoryTraversalOrder): WalkDirectory = apply {
|
||||
this.traversalOrder = arg
|
||||
}
|
||||
|
||||
@@ -889,7 +881,7 @@ object EelFileSystemApiHelpers {
|
||||
* ```
|
||||
*/
|
||||
fun bfs(): WalkDirectory =
|
||||
traversalOrder(WalkDirectoryTraversalOrder.BFS)
|
||||
traversalOrder(WalkDirectoryOptions.WalkDirectoryTraversalOrder.BFS)
|
||||
|
||||
/**
|
||||
* Depth-first traversal, where directory entries are yielded in order they are encountered.
|
||||
@@ -911,7 +903,7 @@ object EelFileSystemApiHelpers {
|
||||
* ```
|
||||
*/
|
||||
fun dfs(): WalkDirectory =
|
||||
traversalOrder(WalkDirectoryTraversalOrder.DFS)
|
||||
traversalOrder(WalkDirectoryOptions.WalkDirectoryTraversalOrder.DFS)
|
||||
|
||||
/**
|
||||
* Default is true.
|
||||
@@ -971,15 +963,15 @@ object EelFileSystemApiHelpers {
|
||||
class AddWatchRoots(
|
||||
private val owner: EelFileSystemApi,
|
||||
) : OwnedBuilder<Boolean> {
|
||||
private var changeTypes: Set<FileChangeType> = emptySet()
|
||||
private var changeTypes: Set<EelFileSystemApi.FileChangeType> = emptySet()
|
||||
|
||||
private var paths: Set<WatchedPath> = emptySet()
|
||||
private var paths: Set<EelFileSystemApi.WatchedPath> = emptySet()
|
||||
|
||||
fun changeTypes(arg: Set<FileChangeType>): AddWatchRoots = apply {
|
||||
fun changeTypes(arg: Set<EelFileSystemApi.FileChangeType>): AddWatchRoots = apply {
|
||||
this.changeTypes = arg
|
||||
}
|
||||
|
||||
fun paths(arg: Set<WatchedPath>): AddWatchRoots = apply {
|
||||
fun paths(arg: Set<EelFileSystemApi.WatchedPath>): AddWatchRoots = apply {
|
||||
this.paths = arg
|
||||
}
|
||||
|
||||
@@ -1008,7 +1000,7 @@ object EelFileSystemApiHelpers {
|
||||
) : OwnedBuilder<EelResult<EelOpenedFile.ReaderWriter, EelFileSystemApi.FileWriterError>> {
|
||||
private var append: Boolean = false
|
||||
|
||||
private var creationMode: FileWriterCreationMode = FileWriterCreationMode.ALLOW_CREATE
|
||||
private var creationMode: EelFileSystemApi.FileWriterCreationMode = EelFileSystemApi.FileWriterCreationMode.ALLOW_CREATE
|
||||
|
||||
private var truncateExisting: Boolean = true
|
||||
|
||||
@@ -1016,18 +1008,18 @@ object EelFileSystemApiHelpers {
|
||||
this.append = arg
|
||||
}
|
||||
|
||||
fun creationMode(arg: FileWriterCreationMode): OpenForReadingAndWriting = apply {
|
||||
fun creationMode(arg: EelFileSystemApi.FileWriterCreationMode): OpenForReadingAndWriting = apply {
|
||||
this.creationMode = arg
|
||||
}
|
||||
|
||||
fun allowCreate(): OpenForReadingAndWriting =
|
||||
creationMode(FileWriterCreationMode.ALLOW_CREATE)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ALLOW_CREATE)
|
||||
|
||||
fun onlyCreate(): OpenForReadingAndWriting =
|
||||
creationMode(FileWriterCreationMode.ONLY_CREATE)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ONLY_CREATE)
|
||||
|
||||
fun onlyOpenExisting(): OpenForReadingAndWriting =
|
||||
creationMode(FileWriterCreationMode.ONLY_OPEN_EXISTING)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ONLY_OPEN_EXISTING)
|
||||
|
||||
fun path(arg: EelPath): OpenForReadingAndWriting = apply {
|
||||
this.path = arg
|
||||
@@ -1064,7 +1056,7 @@ object EelFileSystemApiHelpers {
|
||||
) : OwnedBuilder<EelResult<EelOpenedFile.Writer, EelFileSystemApi.FileWriterError>> {
|
||||
private var append: Boolean = false
|
||||
|
||||
private var creationMode: FileWriterCreationMode = FileWriterCreationMode.ALLOW_CREATE
|
||||
private var creationMode: EelFileSystemApi.FileWriterCreationMode = EelFileSystemApi.FileWriterCreationMode.ALLOW_CREATE
|
||||
|
||||
private var truncateExisting: Boolean = true
|
||||
|
||||
@@ -1072,18 +1064,18 @@ object EelFileSystemApiHelpers {
|
||||
this.append = arg
|
||||
}
|
||||
|
||||
fun creationMode(arg: FileWriterCreationMode): OpenForWriting = apply {
|
||||
fun creationMode(arg: EelFileSystemApi.FileWriterCreationMode): OpenForWriting = apply {
|
||||
this.creationMode = arg
|
||||
}
|
||||
|
||||
fun allowCreate(): OpenForWriting =
|
||||
creationMode(FileWriterCreationMode.ALLOW_CREATE)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ALLOW_CREATE)
|
||||
|
||||
fun onlyCreate(): OpenForWriting =
|
||||
creationMode(FileWriterCreationMode.ONLY_CREATE)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ONLY_CREATE)
|
||||
|
||||
fun onlyOpenExisting(): OpenForWriting =
|
||||
creationMode(FileWriterCreationMode.ONLY_OPEN_EXISTING)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ONLY_OPEN_EXISTING)
|
||||
|
||||
fun path(arg: EelPath): OpenForWriting = apply {
|
||||
this.path = arg
|
||||
|
||||
+10
-11
@@ -8,7 +8,6 @@ import com.intellij.platform.eel.EelResult
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.OwnedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.StatError
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.SymlinkPolicy
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.annotations.CheckReturnValue
|
||||
@@ -45,13 +44,13 @@ object EelFileSystemPosixApiHelpers {
|
||||
private val owner: EelFileSystemPosixApi,
|
||||
private var path: EelPath,
|
||||
) : OwnedBuilder<EelResult<Collection<Pair<String, EelPosixFileInfo>>, EelFileSystemApi.ListDirectoryError>> {
|
||||
private var symlinkPolicy: SymlinkPolicy = SymlinkPolicy.DO_NOT_RESOLVE
|
||||
private var symlinkPolicy: EelFileSystemApi.SymlinkPolicy = EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE
|
||||
|
||||
fun path(arg: EelPath): ListDirectoryWithAttrs = apply {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun symlinkPolicy(arg: SymlinkPolicy): ListDirectoryWithAttrs = apply {
|
||||
fun symlinkPolicy(arg: EelFileSystemApi.SymlinkPolicy): ListDirectoryWithAttrs = apply {
|
||||
this.symlinkPolicy = arg
|
||||
}
|
||||
|
||||
@@ -60,20 +59,20 @@ object EelFileSystemPosixApiHelpers {
|
||||
* This option makes the operation a bit more efficient if it is not interested in symlinks.
|
||||
*/
|
||||
fun doNotResolve(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink and returns the information about the target of the symlink,
|
||||
* But does not perform anything on the target of the symlink itself.
|
||||
*/
|
||||
fun justResolve(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.JUST_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.JUST_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink, follows it, and performs the required operation on target.
|
||||
*/
|
||||
fun resolveAndFollow(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
|
||||
/**
|
||||
* Complete the builder and call [com.intellij.platform.eel.fs.EelFileSystemPosixApi.listDirectoryWithAttrs]
|
||||
@@ -98,13 +97,13 @@ object EelFileSystemPosixApiHelpers {
|
||||
private val owner: EelFileSystemPosixApi,
|
||||
private var path: EelPath,
|
||||
) : OwnedBuilder<EelResult<EelPosixFileInfo, StatError>> {
|
||||
private var symlinkPolicy: SymlinkPolicy = SymlinkPolicy.DO_NOT_RESOLVE
|
||||
private var symlinkPolicy: EelFileSystemApi.SymlinkPolicy = EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE
|
||||
|
||||
fun path(arg: EelPath): Stat = apply {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun symlinkPolicy(arg: SymlinkPolicy): Stat = apply {
|
||||
fun symlinkPolicy(arg: EelFileSystemApi.SymlinkPolicy): Stat = apply {
|
||||
this.symlinkPolicy = arg
|
||||
}
|
||||
|
||||
@@ -113,20 +112,20 @@ object EelFileSystemPosixApiHelpers {
|
||||
* This option makes the operation a bit more efficient if it is not interested in symlinks.
|
||||
*/
|
||||
fun doNotResolve(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink and returns the information about the target of the symlink,
|
||||
* But does not perform anything on the target of the symlink itself.
|
||||
*/
|
||||
fun justResolve(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.JUST_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.JUST_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink, follows it, and performs the required operation on target.
|
||||
*/
|
||||
fun resolveAndFollow(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
|
||||
/**
|
||||
* Complete the builder and call [com.intellij.platform.eel.fs.EelFileSystemPosixApi.stat]
|
||||
|
||||
+10
-11
@@ -8,7 +8,6 @@ import com.intellij.platform.eel.EelResult
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.OwnedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.StatError
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.SymlinkPolicy
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.annotations.CheckReturnValue
|
||||
@@ -45,13 +44,13 @@ object EelFileSystemWindowsApiHelpers {
|
||||
private val owner: EelFileSystemWindowsApi,
|
||||
private var path: EelPath,
|
||||
) : OwnedBuilder<EelResult<Collection<Pair<String, EelWindowsFileInfo>>, EelFileSystemApi.ListDirectoryError>> {
|
||||
private var symlinkPolicy: SymlinkPolicy = SymlinkPolicy.DO_NOT_RESOLVE
|
||||
private var symlinkPolicy: EelFileSystemApi.SymlinkPolicy = EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE
|
||||
|
||||
fun path(arg: EelPath): ListDirectoryWithAttrs = apply {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun symlinkPolicy(arg: SymlinkPolicy): ListDirectoryWithAttrs = apply {
|
||||
fun symlinkPolicy(arg: EelFileSystemApi.SymlinkPolicy): ListDirectoryWithAttrs = apply {
|
||||
this.symlinkPolicy = arg
|
||||
}
|
||||
|
||||
@@ -60,20 +59,20 @@ object EelFileSystemWindowsApiHelpers {
|
||||
* This option makes the operation a bit more efficient if it is not interested in symlinks.
|
||||
*/
|
||||
fun doNotResolve(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink and returns the information about the target of the symlink,
|
||||
* But does not perform anything on the target of the symlink itself.
|
||||
*/
|
||||
fun justResolve(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.JUST_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.JUST_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink, follows it, and performs the required operation on target.
|
||||
*/
|
||||
fun resolveAndFollow(): ListDirectoryWithAttrs =
|
||||
symlinkPolicy(SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
|
||||
/**
|
||||
* Complete the builder and call [com.intellij.platform.eel.fs.EelFileSystemWindowsApi.listDirectoryWithAttrs]
|
||||
@@ -98,13 +97,13 @@ object EelFileSystemWindowsApiHelpers {
|
||||
private val owner: EelFileSystemWindowsApi,
|
||||
private var path: EelPath,
|
||||
) : OwnedBuilder<EelResult<EelWindowsFileInfo, StatError>> {
|
||||
private var symlinkPolicy: SymlinkPolicy = SymlinkPolicy.DO_NOT_RESOLVE
|
||||
private var symlinkPolicy: EelFileSystemApi.SymlinkPolicy = EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE
|
||||
|
||||
fun path(arg: EelPath): Stat = apply {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun symlinkPolicy(arg: SymlinkPolicy): Stat = apply {
|
||||
fun symlinkPolicy(arg: EelFileSystemApi.SymlinkPolicy): Stat = apply {
|
||||
this.symlinkPolicy = arg
|
||||
}
|
||||
|
||||
@@ -113,20 +112,20 @@ object EelFileSystemWindowsApiHelpers {
|
||||
* This option makes the operation a bit more efficient if it is not interested in symlinks.
|
||||
*/
|
||||
fun doNotResolve(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink and returns the information about the target of the symlink,
|
||||
* But does not perform anything on the target of the symlink itself.
|
||||
*/
|
||||
fun justResolve(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.JUST_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.JUST_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink, follows it, and performs the required operation on target.
|
||||
*/
|
||||
fun resolveAndFollow(): Stat =
|
||||
symlinkPolicy(SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
|
||||
/**
|
||||
* Complete the builder and call [com.intellij.platform.eel.fs.EelFileSystemWindowsApi.stat]
|
||||
|
||||
+6
-7
@@ -6,7 +6,6 @@ package com.intellij.platform.eel.fs
|
||||
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.ListDirectoryWithAttrsArgs
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.SymlinkPolicy
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@@ -16,13 +15,13 @@ import org.jetbrains.annotations.ApiStatus
|
||||
class ListDirectoryWithAttrsArgsBuilder(
|
||||
private var path: EelPath,
|
||||
) {
|
||||
private var symlinkPolicy: SymlinkPolicy = SymlinkPolicy.DO_NOT_RESOLVE
|
||||
private var symlinkPolicy: EelFileSystemApi.SymlinkPolicy = EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE
|
||||
|
||||
fun path(arg: EelPath): ListDirectoryWithAttrsArgsBuilder = apply {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun symlinkPolicy(arg: SymlinkPolicy): ListDirectoryWithAttrsArgsBuilder = apply {
|
||||
fun symlinkPolicy(arg: EelFileSystemApi.SymlinkPolicy): ListDirectoryWithAttrsArgsBuilder = apply {
|
||||
this.symlinkPolicy = arg
|
||||
}
|
||||
|
||||
@@ -31,20 +30,20 @@ class ListDirectoryWithAttrsArgsBuilder(
|
||||
* This option makes the operation a bit more efficient if it is not interested in symlinks.
|
||||
*/
|
||||
fun doNotResolve(): ListDirectoryWithAttrsArgsBuilder =
|
||||
symlinkPolicy(SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink and returns the information about the target of the symlink,
|
||||
* But does not perform anything on the target of the symlink itself.
|
||||
*/
|
||||
fun justResolve(): ListDirectoryWithAttrsArgsBuilder =
|
||||
symlinkPolicy(SymlinkPolicy.JUST_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.JUST_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink, follows it, and performs the required operation on target.
|
||||
*/
|
||||
fun resolveAndFollow(): ListDirectoryWithAttrsArgsBuilder =
|
||||
symlinkPolicy(SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
|
||||
fun build(): ListDirectoryWithAttrsArgs =
|
||||
ListDirectoryWithAttrsArgsImpl(
|
||||
@@ -56,5 +55,5 @@ class ListDirectoryWithAttrsArgsBuilder(
|
||||
@GeneratedBuilder.Result
|
||||
internal class ListDirectoryWithAttrsArgsImpl(
|
||||
override val path: EelPath,
|
||||
override val symlinkPolicy: SymlinkPolicy,
|
||||
override val symlinkPolicy: EelFileSystemApi.SymlinkPolicy,
|
||||
) : ListDirectoryWithAttrsArgs
|
||||
@@ -6,7 +6,6 @@ package com.intellij.platform.eel.fs
|
||||
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.MoveArgs
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.ReplaceExistingDuringMove
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@@ -19,25 +18,25 @@ class MoveArgsBuilder(
|
||||
) {
|
||||
private var followLinks: Boolean = false
|
||||
|
||||
private var replaceExisting: ReplaceExistingDuringMove = ReplaceExistingDuringMove.REPLACE_EVERYTHING
|
||||
private var replaceExisting: EelFileSystemApi.ReplaceExistingDuringMove = EelFileSystemApi.ReplaceExistingDuringMove.REPLACE_EVERYTHING
|
||||
|
||||
fun followLinks(arg: Boolean): MoveArgsBuilder = apply {
|
||||
this.followLinks = arg
|
||||
}
|
||||
|
||||
fun replaceExisting(arg: ReplaceExistingDuringMove): MoveArgsBuilder = apply {
|
||||
fun replaceExisting(arg: EelFileSystemApi.ReplaceExistingDuringMove): MoveArgsBuilder = apply {
|
||||
this.replaceExisting = arg
|
||||
}
|
||||
|
||||
fun doNotReplace(): MoveArgsBuilder =
|
||||
replaceExisting(ReplaceExistingDuringMove.DO_NOT_REPLACE)
|
||||
replaceExisting(EelFileSystemApi.ReplaceExistingDuringMove.DO_NOT_REPLACE)
|
||||
|
||||
/** For compatibility with Java NIO. */
|
||||
fun doNotReplaceDirectories(): MoveArgsBuilder =
|
||||
replaceExisting(ReplaceExistingDuringMove.DO_NOT_REPLACE_DIRECTORIES)
|
||||
replaceExisting(EelFileSystemApi.ReplaceExistingDuringMove.DO_NOT_REPLACE_DIRECTORIES)
|
||||
|
||||
fun replaceEverything(): MoveArgsBuilder =
|
||||
replaceExisting(ReplaceExistingDuringMove.REPLACE_EVERYTHING)
|
||||
replaceExisting(EelFileSystemApi.ReplaceExistingDuringMove.REPLACE_EVERYTHING)
|
||||
|
||||
fun source(arg: EelPath): MoveArgsBuilder = apply {
|
||||
this.source = arg
|
||||
@@ -59,7 +58,7 @@ class MoveArgsBuilder(
|
||||
@GeneratedBuilder.Result
|
||||
internal class MoveArgsImpl(
|
||||
override val followLinks: Boolean,
|
||||
override val replaceExisting: ReplaceExistingDuringMove,
|
||||
override val replaceExisting: EelFileSystemApi.ReplaceExistingDuringMove,
|
||||
override val source: EelPath,
|
||||
override val target: EelPath,
|
||||
) : MoveArgs
|
||||
@@ -6,7 +6,6 @@ package com.intellij.platform.eel.fs
|
||||
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.StatArgs
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.SymlinkPolicy
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@@ -16,13 +15,13 @@ import org.jetbrains.annotations.ApiStatus
|
||||
class StatArgsBuilder(
|
||||
private var path: EelPath,
|
||||
) {
|
||||
private var symlinkPolicy: SymlinkPolicy = SymlinkPolicy.DO_NOT_RESOLVE
|
||||
private var symlinkPolicy: EelFileSystemApi.SymlinkPolicy = EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE
|
||||
|
||||
fun path(arg: EelPath): StatArgsBuilder = apply {
|
||||
this.path = arg
|
||||
}
|
||||
|
||||
fun symlinkPolicy(arg: SymlinkPolicy): StatArgsBuilder = apply {
|
||||
fun symlinkPolicy(arg: EelFileSystemApi.SymlinkPolicy): StatArgsBuilder = apply {
|
||||
this.symlinkPolicy = arg
|
||||
}
|
||||
|
||||
@@ -31,20 +30,20 @@ class StatArgsBuilder(
|
||||
* This option makes the operation a bit more efficient if it is not interested in symlinks.
|
||||
*/
|
||||
fun doNotResolve(): StatArgsBuilder =
|
||||
symlinkPolicy(SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.DO_NOT_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink and returns the information about the target of the symlink,
|
||||
* But does not perform anything on the target of the symlink itself.
|
||||
*/
|
||||
fun justResolve(): StatArgsBuilder =
|
||||
symlinkPolicy(SymlinkPolicy.JUST_RESOLVE)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.JUST_RESOLVE)
|
||||
|
||||
/**
|
||||
* Resolves a symlink, follows it, and performs the required operation on target.
|
||||
*/
|
||||
fun resolveAndFollow(): StatArgsBuilder =
|
||||
symlinkPolicy(SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
symlinkPolicy(EelFileSystemApi.SymlinkPolicy.RESOLVE_AND_FOLLOW)
|
||||
|
||||
fun build(): StatArgs =
|
||||
StatArgsImpl(
|
||||
@@ -56,5 +55,5 @@ class StatArgsBuilder(
|
||||
@GeneratedBuilder.Result
|
||||
internal class StatArgsImpl(
|
||||
override val path: EelPath,
|
||||
override val symlinkPolicy: SymlinkPolicy,
|
||||
override val symlinkPolicy: EelFileSystemApi.SymlinkPolicy,
|
||||
) : StatArgs
|
||||
+10
-12
@@ -6,8 +6,6 @@ package com.intellij.platform.eel.fs
|
||||
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WalkDirectoryOptions
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WalkDirectoryOptions.WalkDirectoryEntryOrder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WalkDirectoryOptions.WalkDirectoryTraversalOrder
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@@ -20,7 +18,7 @@ class WalkDirectoryOptionsBuilder(
|
||||
*/
|
||||
private var path: EelPath,
|
||||
) {
|
||||
private var entryOrder: WalkDirectoryEntryOrder = WalkDirectoryEntryOrder.RANDOM
|
||||
private var entryOrder: WalkDirectoryOptions.WalkDirectoryEntryOrder = WalkDirectoryOptions.WalkDirectoryEntryOrder.RANDOM
|
||||
|
||||
private var fileContentsHash: Boolean = false
|
||||
|
||||
@@ -28,7 +26,7 @@ class WalkDirectoryOptionsBuilder(
|
||||
|
||||
private var readMetadata: Boolean = false
|
||||
|
||||
private var traversalOrder: WalkDirectoryTraversalOrder = WalkDirectoryTraversalOrder.DFS
|
||||
private var traversalOrder: WalkDirectoryOptions.WalkDirectoryTraversalOrder = WalkDirectoryOptions.WalkDirectoryTraversalOrder.DFS
|
||||
|
||||
private var yieldDirectories: Boolean = true
|
||||
|
||||
@@ -41,7 +39,7 @@ class WalkDirectoryOptionsBuilder(
|
||||
/**
|
||||
* The default is RANDOM.
|
||||
*/
|
||||
fun entryOrder(arg: WalkDirectoryEntryOrder): WalkDirectoryOptionsBuilder = apply {
|
||||
fun entryOrder(arg: WalkDirectoryOptions.WalkDirectoryEntryOrder): WalkDirectoryOptionsBuilder = apply {
|
||||
this.entryOrder = arg
|
||||
}
|
||||
|
||||
@@ -49,14 +47,14 @@ class WalkDirectoryOptionsBuilder(
|
||||
* Yield directory entries in alphabetical order.
|
||||
*/
|
||||
fun alphabetical(): WalkDirectoryOptionsBuilder =
|
||||
entryOrder(WalkDirectoryEntryOrder.ALPHABETICAL)
|
||||
entryOrder(WalkDirectoryOptions.WalkDirectoryEntryOrder.ALPHABETICAL)
|
||||
|
||||
/**
|
||||
* Yield directory entries in order in which they appear on the file system.
|
||||
* If you do not care for the order of the files, this is the preferable option.
|
||||
*/
|
||||
fun random(): WalkDirectoryOptionsBuilder =
|
||||
entryOrder(WalkDirectoryEntryOrder.RANDOM)
|
||||
entryOrder(WalkDirectoryOptions.WalkDirectoryEntryOrder.RANDOM)
|
||||
|
||||
/**
|
||||
* Yield hash of the regular file's contents. Contents are hashed using xxHash. Default is false.
|
||||
@@ -105,7 +103,7 @@ class WalkDirectoryOptionsBuilder(
|
||||
/**
|
||||
* The default is DFS.
|
||||
*/
|
||||
fun traversalOrder(arg: WalkDirectoryTraversalOrder): WalkDirectoryOptionsBuilder = apply {
|
||||
fun traversalOrder(arg: WalkDirectoryOptions.WalkDirectoryTraversalOrder): WalkDirectoryOptionsBuilder = apply {
|
||||
this.traversalOrder = arg
|
||||
}
|
||||
|
||||
@@ -128,7 +126,7 @@ class WalkDirectoryOptionsBuilder(
|
||||
* ```
|
||||
*/
|
||||
fun bfs(): WalkDirectoryOptionsBuilder =
|
||||
traversalOrder(WalkDirectoryTraversalOrder.BFS)
|
||||
traversalOrder(WalkDirectoryOptions.WalkDirectoryTraversalOrder.BFS)
|
||||
|
||||
/**
|
||||
* Depth-first traversal, where directory entries are yielded in order they are encountered.
|
||||
@@ -150,7 +148,7 @@ class WalkDirectoryOptionsBuilder(
|
||||
* ```
|
||||
*/
|
||||
fun dfs(): WalkDirectoryOptionsBuilder =
|
||||
traversalOrder(WalkDirectoryTraversalOrder.DFS)
|
||||
traversalOrder(WalkDirectoryOptions.WalkDirectoryTraversalOrder.DFS)
|
||||
|
||||
/**
|
||||
* Default is true.
|
||||
@@ -197,12 +195,12 @@ class WalkDirectoryOptionsBuilder(
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
internal class WalkDirectoryOptionsImpl(
|
||||
override val entryOrder: WalkDirectoryEntryOrder,
|
||||
override val entryOrder: WalkDirectoryOptions.WalkDirectoryEntryOrder,
|
||||
override val fileContentsHash: Boolean,
|
||||
override val maxDepth: Int,
|
||||
override val path: EelPath,
|
||||
override val readMetadata: Boolean,
|
||||
override val traversalOrder: WalkDirectoryTraversalOrder,
|
||||
override val traversalOrder: WalkDirectoryOptions.WalkDirectoryTraversalOrder,
|
||||
override val yieldDirectories: Boolean,
|
||||
override val yieldOtherFileTypes: Boolean,
|
||||
override val yieldRegularFiles: Boolean,
|
||||
|
||||
@@ -5,24 +5,22 @@
|
||||
package com.intellij.platform.eel.fs
|
||||
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.FileChangeType
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WatchOptions
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WatchedPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
@ApiStatus.Internal
|
||||
class WatchOptionsBuilder {
|
||||
private var changeTypes: Set<FileChangeType> = emptySet()
|
||||
private var changeTypes: Set<EelFileSystemApi.FileChangeType> = emptySet()
|
||||
|
||||
private var paths: Set<WatchedPath> = emptySet()
|
||||
private var paths: Set<EelFileSystemApi.WatchedPath> = emptySet()
|
||||
|
||||
fun changeTypes(arg: Set<FileChangeType>): WatchOptionsBuilder = apply {
|
||||
fun changeTypes(arg: Set<EelFileSystemApi.FileChangeType>): WatchOptionsBuilder = apply {
|
||||
this.changeTypes = arg
|
||||
}
|
||||
|
||||
fun paths(arg: Set<WatchedPath>): WatchOptionsBuilder = apply {
|
||||
fun paths(arg: Set<EelFileSystemApi.WatchedPath>): WatchOptionsBuilder = apply {
|
||||
this.paths = arg
|
||||
}
|
||||
|
||||
@@ -35,6 +33,6 @@ class WatchOptionsBuilder {
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
internal class WatchOptionsImpl(
|
||||
override val changeTypes: Set<FileChangeType>,
|
||||
override val paths: Set<WatchedPath>,
|
||||
override val changeTypes: Set<EelFileSystemApi.FileChangeType>,
|
||||
override val paths: Set<EelFileSystemApi.WatchedPath>,
|
||||
) : WatchOptions
|
||||
@@ -5,7 +5,6 @@
|
||||
package com.intellij.platform.eel.fs
|
||||
|
||||
import com.intellij.platform.eel.GeneratedBuilder
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.FileWriterCreationMode
|
||||
import com.intellij.platform.eel.fs.EelFileSystemApi.WriteOptions
|
||||
import com.intellij.platform.eel.path.EelPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -18,7 +17,7 @@ class WriteOptionsBuilder(
|
||||
) {
|
||||
private var append: Boolean = false
|
||||
|
||||
private var creationMode: FileWriterCreationMode = FileWriterCreationMode.ALLOW_CREATE
|
||||
private var creationMode: EelFileSystemApi.FileWriterCreationMode = EelFileSystemApi.FileWriterCreationMode.ALLOW_CREATE
|
||||
|
||||
private var truncateExisting: Boolean = true
|
||||
|
||||
@@ -26,18 +25,18 @@ class WriteOptionsBuilder(
|
||||
this.append = arg
|
||||
}
|
||||
|
||||
fun creationMode(arg: FileWriterCreationMode): WriteOptionsBuilder = apply {
|
||||
fun creationMode(arg: EelFileSystemApi.FileWriterCreationMode): WriteOptionsBuilder = apply {
|
||||
this.creationMode = arg
|
||||
}
|
||||
|
||||
fun allowCreate(): WriteOptionsBuilder =
|
||||
creationMode(FileWriterCreationMode.ALLOW_CREATE)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ALLOW_CREATE)
|
||||
|
||||
fun onlyCreate(): WriteOptionsBuilder =
|
||||
creationMode(FileWriterCreationMode.ONLY_CREATE)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ONLY_CREATE)
|
||||
|
||||
fun onlyOpenExisting(): WriteOptionsBuilder =
|
||||
creationMode(FileWriterCreationMode.ONLY_OPEN_EXISTING)
|
||||
creationMode(EelFileSystemApi.FileWriterCreationMode.ONLY_OPEN_EXISTING)
|
||||
|
||||
fun path(arg: EelPath): WriteOptionsBuilder = apply {
|
||||
this.path = arg
|
||||
@@ -59,7 +58,7 @@ class WriteOptionsBuilder(
|
||||
@GeneratedBuilder.Result
|
||||
internal class WriteOptionsImpl(
|
||||
override val append: Boolean,
|
||||
override val creationMode: FileWriterCreationMode,
|
||||
override val creationMode: EelFileSystemApi.FileWriterCreationMode,
|
||||
override val path: EelPath,
|
||||
override val truncateExisting: Boolean,
|
||||
) : WriteOptions
|
||||
@@ -0,0 +1,86 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
/**
|
||||
* This file is generated by [com.intellij.platform.eel.codegen.BuildersGeneratorTest].
|
||||
*/
|
||||
package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.*
|
||||
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
fun Any.foobar2(): kotlinAnyHelpers.Foobar2 =
|
||||
kotlinAnyHelpers.Foobar2(
|
||||
owner = this,
|
||||
)
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
fun Any.foobar3(): kotlinAnyHelpers.Foobar3 =
|
||||
kotlinAnyHelpers.Foobar3(
|
||||
owner = this,
|
||||
)
|
||||
|
||||
object kotlinAnyHelpers {
|
||||
/**
|
||||
* Create it via [kotlin.Any.foobar2].
|
||||
*/
|
||||
@GeneratedBuilder.Result
|
||||
class Foobar2(
|
||||
private val owner: Any,
|
||||
) : OwnedBuilder<Unit> {
|
||||
private var bar: Int? = null
|
||||
|
||||
private var foo: String? = null
|
||||
|
||||
fun bar(arg: Int?): Foobar2 = apply {
|
||||
this.bar = arg
|
||||
}
|
||||
|
||||
fun foo(arg: String?): Foobar2 = apply {
|
||||
this.foo = arg
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete the builder and call [kotlin.Any.foobar2]
|
||||
* with an instance of [com.intellij.platform.eel.FoobarOpts].
|
||||
*/
|
||||
override suspend fun eelIt(): Unit =
|
||||
owner.foobar2(
|
||||
FoobarOptsImpl(
|
||||
bar = bar,
|
||||
foo = foo,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Create it via [kotlin.Any.foobar3].
|
||||
*/
|
||||
@GeneratedBuilder.Result
|
||||
class Foobar3(
|
||||
private val owner: Any,
|
||||
) : OwnedBuilder<Unit> {
|
||||
private var bar: Int? = null
|
||||
|
||||
private var foo: String? = null
|
||||
|
||||
fun bar(arg: Int?): Foobar3 = apply {
|
||||
this.bar = arg
|
||||
}
|
||||
|
||||
fun foo(arg: String?): Foobar3 = apply {
|
||||
this.foo = arg
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete the builder and call [kotlin.Any.foobar3]
|
||||
* with an instance of [com.intellij.platform.eel.FoobarOpts].
|
||||
*/
|
||||
override suspend fun eelIt(): Unit =
|
||||
owner.foobar3(
|
||||
FoobarOptsImpl(
|
||||
bar = bar,
|
||||
foo = foo,
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
/**
|
||||
* This file is generated by [com.intellij.platform.eel.codegen.BuildersGeneratorTest].
|
||||
*/
|
||||
package com.intellij.platform.eel
|
||||
|
||||
import com.intellij.platform.eel.*
|
||||
|
||||
|
||||
@GeneratedBuilder.Result
|
||||
fun Map<String, String>.foobar4(): kotlinCollectionsMapHelpers.Foobar4 =
|
||||
kotlinCollectionsMapHelpers.Foobar4(
|
||||
owner = this,
|
||||
)
|
||||
|
||||
object kotlinCollectionsMapHelpers {
|
||||
/**
|
||||
* Create it via [kotlin.collections.Map.foobar4].
|
||||
*/
|
||||
@GeneratedBuilder.Result
|
||||
class Foobar4(
|
||||
private val owner: Map<String, String>,
|
||||
) : OwnedBuilder<Unit> {
|
||||
private var bar: Int? = null
|
||||
|
||||
private var foo: String? = null
|
||||
|
||||
fun bar(arg: Int?): Foobar4 = apply {
|
||||
this.bar = arg
|
||||
}
|
||||
|
||||
fun foo(arg: String?): Foobar4 = apply {
|
||||
this.foo = arg
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete the builder and call [kotlin.collections.Map.foobar4]
|
||||
* with an instance of [com.intellij.platform.eel.FoobarOpts].
|
||||
*/
|
||||
override suspend fun eelIt(): Unit =
|
||||
owner.foobar4(
|
||||
FoobarOptsImpl(
|
||||
bar = bar,
|
||||
foo = foo,
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -25,5 +25,6 @@
|
||||
<orderEntry type="module" module-name="intellij.platform.util.jdom" />
|
||||
<orderEntry type="module" module-name="kotlin.base.test" />
|
||||
<orderEntry type="module" module-name="intellij.kotlin.plugin.community.main" scope="RUNTIME" />
|
||||
<orderEntry type="module" module-name="intellij.kotlin.base.indices" scope="TEST" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,56 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.platform.eel
|
||||
|
||||
fun foobar1(@GeneratedBuilder opts: FoobarOpts) {
|
||||
println("foobar1")
|
||||
println(opts.foo)
|
||||
println(opts.bar)
|
||||
}
|
||||
|
||||
fun Any.foobar2(@GeneratedBuilder opts: FoobarOpts) {
|
||||
println("foobar2")
|
||||
println(this)
|
||||
println(opts.foo)
|
||||
println(opts.bar)
|
||||
}
|
||||
|
||||
fun Any.foobar3(@GeneratedBuilder opts: FoobarOpts) {
|
||||
println("foobar3")
|
||||
println(this)
|
||||
println(opts.foo)
|
||||
println(opts.bar)
|
||||
}
|
||||
|
||||
fun Map<String, String>.foobar4(@GeneratedBuilder opts: FoobarOpts) {
|
||||
println("foobar4")
|
||||
println(this)
|
||||
println(opts.foo)
|
||||
println(opts.bar)
|
||||
}
|
||||
|
||||
class OurThing
|
||||
|
||||
fun OurThing.foobar5(@GeneratedBuilder opts: FoobarOpts) {
|
||||
println("foobar5")
|
||||
println(this)
|
||||
println(opts.foo)
|
||||
println(opts.bar)
|
||||
}
|
||||
|
||||
fun OurThingHelpers.Foobar5.hurrDurr() = apply {
|
||||
foo("hurr durr")
|
||||
bar(31337)
|
||||
}
|
||||
|
||||
interface FoobarOpts {
|
||||
val foo: String? get() = null
|
||||
val bar: Int? get() = null
|
||||
}
|
||||
|
||||
suspend fun main() {
|
||||
foobar1().foo("123").bar(456).eelIt()
|
||||
(3.14159).foobar2().foo("xxx").eelIt()
|
||||
(3.14159).foobar3().foo("yyy").eelIt()
|
||||
mapOf("a" to "b").foobar4().foo("zzz").eelIt()
|
||||
OurThing().foobar5().hurrDurr().eelIt()
|
||||
}
|
||||
Reference in New Issue
Block a user