@@ -5,22 +5,21 @@ import com.intellij.openapi.diagnostic.logger
5
5
import com.intellij.openapi.project.Project
6
6
import com.intellij.openapi.util.io.FileUtil
7
7
import com.intellij.workspaceModel.ide.toPath
8
- import com.jetbrains.rider.model.RdTargetFrameworkId
9
8
import com.jetbrains.rider.projectView.workspace.ProjectModelEntity
10
9
import com.jetbrains.rider.run.environment.MSBuildEvaluator
11
10
import com.jetbrains.rider.runtime.DotNetRuntime
12
11
import com.jetbrains.rider.runtime.RiderDotNetActiveRuntimeHost
13
12
import com.jetbrains.rider.runtime.dotNetCore.DotNetCoreRuntime
14
13
import me.fornever.avaloniarider.exceptions.AvaloniaPreviewerInitializationException
14
+ import me.fornever.avaloniarider.idea.settings.AvaloniaWorkspaceSettings
15
15
import me.fornever.avaloniarider.model.RdProjectOutput
16
16
import me.fornever.avaloniarider.rider.AvaloniaRiderProjectModelHost
17
17
import org.jetbrains.concurrency.await
18
18
import java.nio.file.Path
19
19
import java.nio.file.Paths
20
- import kotlin.io.path.ExperimentalPathApi
21
20
import kotlin.io.path.nameWithoutExtension
22
21
23
- @Service
22
+ @Service( Service . Level . PROJECT )
24
23
class MsBuildParameterCollector (private val project : Project ) {
25
24
companion object {
26
25
fun getInstance (project : Project ): MsBuildParameterCollector =
@@ -29,18 +28,22 @@ class MsBuildParameterCollector(private val project: Project) {
29
28
private val logger = logger<MsBuildParameterCollector >()
30
29
}
31
30
31
+ private val workspaceSettings
32
+ get() = AvaloniaWorkspaceSettings .getInstance(project)
33
+
32
34
private fun getPathKey (runtime : DotNetRuntime ): String = when (runtime) {
33
35
is DotNetCoreRuntime -> " AvaloniaPreviewerNetCoreToolPath"
34
36
else -> " AvaloniaPreviewerNetFullToolPath"
35
37
}
36
38
37
- @OptIn(ExperimentalPathApi ::class )
38
39
private fun createParameters (
39
40
runtime : DotNetRuntime ,
40
41
runnableProjectFilePath : Path ,
41
42
avaloniaPreviewerPathKey : String ,
42
43
runnableProjectProperties : Map <String , String >,
43
- xamlContainingProjectProperties : Map <String , String >): AvaloniaPreviewerParameters {
44
+ xamlContainingProjectProperties : Map <String , String >,
45
+ runnableProjectWorkingDirectory : Path
46
+ ): AvaloniaPreviewerParameters {
44
47
fun getProperty (properties : Map <String , String >, key : String , errorMessage : String? = null): String {
45
48
val property = properties[key]
46
49
if (property.isNullOrEmpty()) {
@@ -64,7 +67,15 @@ class MsBuildParameterCollector(private val project: Project) {
64
67
65
68
val xamlAssemblyPath = Paths .get(getProperty(xamlContainingProjectProperties, " TargetPath" ))
66
69
67
- return AvaloniaPreviewerParameters (runtime, previewerPath, targetDir, targetName, targetPath, xamlAssemblyPath)
70
+ return AvaloniaPreviewerParameters (
71
+ runtime,
72
+ previewerPath,
73
+ targetDir,
74
+ targetName,
75
+ targetPath,
76
+ xamlAssemblyPath,
77
+ workspaceSettings.state.workingDirectory.getPath()
78
+ )
68
79
}
69
80
70
81
@Suppress(" UnstableApiUsage" )
@@ -95,14 +106,9 @@ class MsBuildParameterCollector(private val project: Project) {
95
106
val runtime = DotNetRuntime .detectRuntimeForProjectOrThrow(
96
107
runnableProject.kind,
97
108
runtimeHost,
98
- null ,
109
+ runtimeType = null ,
99
110
runnableProjectOutput.outputPath,
100
- RdTargetFrameworkId (
101
- tfm.shortName,
102
- tfm.presentableName,
103
- isNetCoreApp = tfm.isNetCoreApp,
104
- isNetFramework = tfm.isNetFramework
105
- )
111
+ tfm
106
112
)
107
113
val avaloniaPreviewerPathKey = getPathKey(runtime)
108
114
@@ -126,6 +132,8 @@ class MsBuildParameterCollector(private val project: Project) {
126
132
runnableProjectFilePath,
127
133
avaloniaPreviewerPathKey,
128
134
runnableProjectProperties.await(),
129
- xamlProjectProperties.await())
135
+ xamlProjectProperties.await(),
136
+ TODO (" Determine program working directory from the runnableProject" )
137
+ )
130
138
}
131
139
}
0 commit comments