@@ -2,7 +2,7 @@ package org.jetbrains.jps.incremental.scala.local
2
2
3
3
import org .jetbrains .jps .incremental .scala .Client
4
4
import org .jetbrains .plugins .scala .compiler .data .{CompilationData , DocumentCompilationData }
5
- import sbt .internal .inc .{AnalyzingCompiler , CompileOutput , PlainVirtualFileConverter , StringVirtualFile }
5
+ import sbt .internal .inc .{AnalyzingCompiler , CompileOutput , StringVirtualFile }
6
6
import xsbti ._
7
7
import xsbti .api .{ClassLike , DependencyContext }
8
8
import xsbti .compile .DependencyChanges
@@ -21,7 +21,8 @@ class IdeaIncrementalCompiler(scalac: AnalyzingCompiler)
21
21
val progress = getProgress(client, compilationData.sources.size)
22
22
val reporter = getReporter(client)
23
23
val logger = getLogger(client)
24
- val clientCallback = new ClientCallback (client, compilationData.output.toPath)
24
+ val converter = sbt.internal.inc.PlainVirtualFileConverter .converter
25
+ val clientCallback = new ClientCallback (client, compilationData.output.toPath, converter)
25
26
26
27
val outputDirsCount = compilationData.outputGroups.map(_._2).distinct.size
27
28
val out =
@@ -36,9 +37,9 @@ class IdeaIncrementalCompiler(scalac: AnalyzingCompiler)
36
37
37
38
try {
38
39
scalac.compile(
39
- compilationData.sources.toArray.map(file => PlainVirtualFileConverter . converter.toVirtualFile(file.toPath)),
40
- compilationData.classpath.map(file => PlainVirtualFileConverter . converter.toVirtualFile(file.toPath)).toArray,
41
- PlainVirtualFileConverter . converter,
40
+ compilationData.sources.toArray.map(file => converter.toVirtualFile(file.toPath)),
41
+ compilationData.classpath.map(file => converter.toVirtualFile(file.toPath)).toArray,
42
+ converter,
42
43
emptyChanges,
43
44
compilationData.scalaOptions.toArray,
44
45
out,
@@ -58,19 +59,34 @@ class IdeaIncrementalCompiler(scalac: AnalyzingCompiler)
58
59
def compileDocument (compilationData : DocumentCompilationData , client : Client ): Unit = {
59
60
val DocumentCompilationData (sourcePath, sourceContent, output, classpath, scalacOptions) = compilationData
60
61
62
+ val virtualFile = StringVirtualFile (sourcePath.toString, sourceContent)
63
+
64
+ val converter = new FileConverter {
65
+ private val plain = sbt.internal.inc.PlainVirtualFileConverter .converter
66
+
67
+ override def toPath (ref : VirtualFileRef ): Path = ref match {
68
+ case `virtualFile` => sourcePath
69
+ case vfr => plain.toPath(vfr)
70
+ }
71
+
72
+ override def toVirtualFile (path : Path ): VirtualFile = path match {
73
+ case `sourcePath` => virtualFile
74
+ case p => plain.toVirtualFile(p)
75
+ }
76
+ }
77
+
61
78
val progress = getProgress(client, 1 )
62
79
val reporter = getReporter(client)
63
80
val logger = getLogger(client)
64
- val clientCallback = new ClientCallback (client, output)
81
+ val clientCallback = new ClientCallback (client, output, converter )
65
82
66
83
val out = CompileOutput (output)
67
84
68
- val virtualFile = StringVirtualFile (sourcePath.toString, sourceContent)
69
85
try {
70
86
scalac.compile(
71
87
Array (virtualFile),
72
- classpath.toArray.map(PlainVirtualFileConverter . converter.toVirtualFile),
73
- PlainVirtualFileConverter . converter,
88
+ classpath.toArray.map(converter.toVirtualFile),
89
+ converter,
74
90
emptyChanges,
75
91
scalacOptions.toArray,
76
92
out,
@@ -88,25 +104,25 @@ class IdeaIncrementalCompiler(scalac: AnalyzingCompiler)
88
104
89
105
}
90
106
91
- private class ClientCallback (client : Client , output : Path ) extends ClientCallbackBase {
107
+ private class ClientCallback (client : Client , output : Path , converter : FileConverter ) extends ClientCallbackBase (converter) {
92
108
93
109
override def generatedNonLocalClass (source : VirtualFileRef ,
94
110
classFile : Path ,
95
111
binaryClassName : String ,
96
112
srcClassName : String ): Unit =
97
- client.generated(PlainVirtualFileConverter . converter.toPath(source).toFile, classFile.toFile, binaryClassName)
113
+ client.generated(converter.toPath(source).toFile, classFile.toFile, binaryClassName)
98
114
99
115
override def generatedLocalClass (source : VirtualFileRef , classFile : Path ): Unit =
100
116
if (classFile.startsWith(output)) {
101
117
val relative = output.relativize(classFile)
102
118
val binaryClassName = relative.iterator().asScala.mkString(" ." ).dropRight(" .class" .length)
103
- client.generated(PlainVirtualFileConverter . converter.toPath(source).toFile, classFile.toFile, binaryClassName)
119
+ client.generated(converter.toPath(source).toFile, classFile.toFile, binaryClassName)
104
120
}
105
121
106
122
override def enabled (): Boolean = false
107
123
}
108
124
109
- abstract class ClientCallbackBase extends xsbti.AnalysisCallback2 {
125
+ abstract class ClientCallbackBase ( converter : FileConverter ) extends xsbti.AnalysisCallback2 {
110
126
111
127
override def isPickleJava : Boolean = false
112
128
@@ -116,7 +132,7 @@ abstract class ClientCallbackBase extends xsbti.AnalysisCallback2 {
116
132
117
133
// noinspection ScalaDeprecation
118
134
final override def api (sourceFile : File , classApi : ClassLike ): Unit =
119
- api(PlainVirtualFileConverter . converter.toVirtualFile(sourceFile.toPath), classApi)
135
+ api(converter.toVirtualFile(sourceFile.toPath), classApi)
120
136
121
137
override def binaryDependency (onBinaryEntry : Path ,
122
138
onBinaryClassName : String ,
@@ -134,7 +150,7 @@ abstract class ClientCallbackBase extends xsbti.AnalysisCallback2 {
134
150
onBinary.toPath,
135
151
onBinaryClassName,
136
152
fromClassName,
137
- PlainVirtualFileConverter . converter.toVirtualFile(fromSourceFile.toPath),
153
+ converter.toVirtualFile(fromSourceFile.toPath),
138
154
context
139
155
)
140
156
@@ -145,15 +161,15 @@ abstract class ClientCallbackBase extends xsbti.AnalysisCallback2 {
145
161
146
162
// noinspection ScalaDeprecation
147
163
override def generatedLocalClass (source : File , classFile : File ): Unit =
148
- generatedLocalClass(PlainVirtualFileConverter . converter.toVirtualFile(source.toPath), classFile.toPath)
164
+ generatedLocalClass(converter.toVirtualFile(source.toPath), classFile.toPath)
149
165
150
166
// noinspection ScalaDeprecation
151
167
final override def generatedNonLocalClass (source : File ,
152
168
classFile : File ,
153
169
binaryClassName : String ,
154
170
srcClassName : String ): Unit =
155
171
generatedNonLocalClass(
156
- PlainVirtualFileConverter . converter.toVirtualFile(source.toPath),
172
+ converter.toVirtualFile(source.toPath),
157
173
classFile.toPath,
158
174
binaryClassName,
159
175
srcClassName
@@ -177,7 +193,7 @@ abstract class ClientCallbackBase extends xsbti.AnalysisCallback2 {
177
193
178
194
// noinspection ScalaDeprecation
179
195
final override def startSource (source : File ): Unit =
180
- startSource(PlainVirtualFileConverter . converter.toVirtualFile(source.toPath))
196
+ startSource(converter.toVirtualFile(source.toPath))
181
197
182
198
override def usedName (className : String , name : String , useScopes : util.EnumSet [xsbti.UseScope ]): Unit = {}
183
199
@@ -191,7 +207,7 @@ abstract class ClientCallbackBase extends xsbti.AnalysisCallback2 {
191
207
192
208
// noinspection ScalaDeprecation
193
209
final override def mainClass (sourceFile : File , className : String ): Unit =
194
- mainClass(PlainVirtualFileConverter . converter.toVirtualFile(sourceFile.toPath), className)
210
+ mainClass(converter.toVirtualFile(sourceFile.toPath), className)
195
211
}
196
212
197
213
private object emptyChanges extends DependencyChanges {
0 commit comments