Simplify check for that gradle script configurations is up to date
Get time stamp for script inputs before gradle import
This commit is contained in:
+1
-1
@@ -102,7 +102,7 @@ private class ScriptConfigurationSnapshotForFS(
|
||||
|
||||
private var VirtualFile.scriptConfigurationSnapshot: ScriptConfigurationSnapshotForFS? by cachedFileAttribute(
|
||||
name = "kotlin-script-dependencies",
|
||||
version = 4,
|
||||
version = 5,
|
||||
read = { readObject<ScriptConfigurationSnapshotForFS>() },
|
||||
write = { writeObject<ScriptConfigurationSnapshotForFS>(it) }
|
||||
)
|
||||
|
||||
+3
-9
@@ -18,23 +18,17 @@ import org.jetbrains.kotlin.psi.KtFile
|
||||
* 2. When some related file is changed (other gradle script, gradle.properties file)
|
||||
* @see GradleScriptInputsWatcher.areRelatedFilesUpToDate
|
||||
*
|
||||
* [inputsTimeStamp] is needed to check if some related file was changed between updates
|
||||
* [relatedFilesTimeStamp] is needed to check if we already loaded a configuration after the last related file change
|
||||
*
|
||||
* In case when [relatedFilesTimeStamp]s are equal there is no needs to check if related files were changed
|
||||
* [inputsTS] is needed to check if some related file was changed since last update
|
||||
*/
|
||||
data class GradleKotlinScriptConfigurationInputs(
|
||||
val sections: String,
|
||||
val inputsTimeStamp: Long,
|
||||
val relatedFilesTimeStamp: Long
|
||||
val inputsTS: Long
|
||||
) : CachedConfigurationInputs {
|
||||
override fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile?): Boolean {
|
||||
val actualStamp = getGradleScriptInputsStamp(project, file, ktFile) ?: return false
|
||||
|
||||
if (actualStamp.sections != this.sections) return false
|
||||
|
||||
if (actualStamp.relatedFilesTimeStamp == this.relatedFilesTimeStamp) return true
|
||||
|
||||
return project.service<GradleScriptInputsWatcher>().areRelatedFilesUpToDate(file, inputsTimeStamp)
|
||||
return project.service<GradleScriptInputsWatcher>().areRelatedFilesUpToDate(file, inputsTS)
|
||||
}
|
||||
}
|
||||
+1
-3
@@ -40,10 +40,8 @@ class GradleScriptInputsWatcher(val project: Project) : PersistentStateComponent
|
||||
}
|
||||
}
|
||||
|
||||
fun lastModifiedFileTimeStamp(file: VirtualFile): Long = storage.lastModifiedTimeStampExcept(file)
|
||||
|
||||
fun areRelatedFilesUpToDate(file: VirtualFile, timeStamp: Long): Boolean {
|
||||
return lastModifiedFileTimeStamp(file) < timeStamp
|
||||
return storage.lastModifiedTimeStampExcept(file) < timeStamp
|
||||
}
|
||||
|
||||
class Storage(
|
||||
|
||||
+1
-2
@@ -8,8 +8,6 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing
|
||||
import com.intellij.openapi.externalSystem.model.DataNode
|
||||
import com.intellij.openapi.externalSystem.model.project.ProjectData
|
||||
import com.intellij.openapi.util.Key
|
||||
import org.gradle.tooling.model.kotlin.dsl.EditorReportSeverity
|
||||
import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel
|
||||
import org.jetbrains.kotlin.idea.util.NotNullableCopyableDataNodeUserDataProperty
|
||||
|
||||
var DataNode<out ProjectData>.KOTLIN_DSL_SCRIPT_MODELS: MutableList<KotlinDslScriptModel>
|
||||
@@ -22,6 +20,7 @@ var DataNode<out ProjectData>.KOTLIN_DSL_SCRIPT_MODELS: MutableList<KotlinDslScr
|
||||
|
||||
data class KotlinDslScriptModel(
|
||||
val file: String,
|
||||
val inputsTimeStamp: Long,
|
||||
val classPath: List<String>,
|
||||
val sourcePath: List<String>,
|
||||
val imports: List<String>,
|
||||
|
||||
+1
-2
@@ -69,8 +69,7 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData,
|
||||
val scriptFile = File(buildScript.file)
|
||||
val virtualFile = VfsUtil.findFile(scriptFile.toPath(), true)!!
|
||||
|
||||
// todo(KT-34440): take inputs snapshot before starting import
|
||||
val inputs = getGradleScriptInputsStamp(project, virtualFile)
|
||||
val inputs = getGradleScriptInputsStamp(project, virtualFile, givenTimeStamp = buildScript.inputsTimeStamp)
|
||||
|
||||
val definition = virtualFile.findScriptDefinition(project) ?: return@forEach
|
||||
|
||||
|
||||
+2
@@ -61,8 +61,10 @@ abstract class KotlinDslScriptModelResolverCommon : AbstractProjectResolverExten
|
||||
))
|
||||
}
|
||||
|
||||
// todo(KT-34440): take inputs snapshot before starting import
|
||||
KotlinDslScriptModel(
|
||||
file.absolutePath,
|
||||
System.currentTimeMillis(),
|
||||
model.classPath.map { it.absolutePath },
|
||||
model.sourcePath.map { it.absolutePath },
|
||||
model.implicitImports,
|
||||
|
||||
@@ -56,7 +56,8 @@ fun getAffectedGradleProjectFiles(project: Project): List<File> {
|
||||
fun getGradleScriptInputsStamp(
|
||||
project: Project,
|
||||
file: VirtualFile,
|
||||
givenKtFile: KtFile? = null
|
||||
givenKtFile: KtFile? = null,
|
||||
givenTimeStamp: Long = System.currentTimeMillis()
|
||||
): GradleKotlinScriptConfigurationInputs? {
|
||||
if (!isGradleKotlinScript(file)) return null
|
||||
|
||||
@@ -87,8 +88,7 @@ fun getGradleScriptInputsStamp(
|
||||
}
|
||||
}
|
||||
|
||||
val relatedFilesTimeStamp = project.service<GradleScriptInputsWatcher>().lastModifiedFileTimeStamp(file)
|
||||
GradleKotlinScriptConfigurationInputs(result.toString(), file.timeStamp, relatedFilesTimeStamp)
|
||||
GradleKotlinScriptConfigurationInputs(result.toString(), givenTimeStamp)
|
||||
} else null
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user