@@ -66,7 +66,7 @@ class ExtractAPI extends Phase {
66
66
67
67
val apiTraverser = new ExtractAPICollector
68
68
val classes = apiTraverser.apiSource(unit.tpdTree)
69
- val mainClasses = ctx.entryPoints.toSet
69
+ val mainClasses = apiTraverser.mainClasses
70
70
71
71
if (ctx.settings.YdumpSbtInc .value) {
72
72
// Append to existing file that should have been created by ExtractDependencies
@@ -144,6 +144,7 @@ private class ExtractAPICollector(using Context) extends ThunkHolder {
144
144
private val refinedTypeCache = new mutable.HashMap [(api.Type , api.Definition ), api.Structure ]
145
145
146
146
private val allNonLocalClassesInSrc = new mutable.HashSet [xsbti.api.ClassLike ]
147
+ private val _mainClasses = new mutable.HashSet [String ]
147
148
148
149
private object Constants {
149
150
val emptyStringArray = Array [String ]()
@@ -194,6 +195,11 @@ private class ExtractAPICollector(using Context) extends ThunkHolder {
194
195
def apiClass (sym : ClassSymbol ): api.ClassLikeDef =
195
196
classLikeCache.getOrElseUpdate(sym, computeClass(sym))
196
197
198
+ def mainClasses : Set [String ] = {
199
+ forceThunks()
200
+ _mainClasses.toSet
201
+ }
202
+
197
203
private def computeClass (sym : ClassSymbol ): api.ClassLikeDef = {
198
204
import xsbti .api .{DefinitionType => dt }
199
205
val defType =
@@ -228,6 +234,11 @@ private class ExtractAPICollector(using Context) extends ThunkHolder {
228
234
229
235
allNonLocalClassesInSrc += cl
230
236
237
+ if (sym.isStatic && ! sym.is(Trait ) && ctx.platform.hasMainMethod(sym)) {
238
+ // If sym is an object, all main methods count, otherwise only @static ones count.
239
+ _mainClasses += name
240
+ }
241
+
231
242
api.ClassLikeDef .of(name, acc, modifiers, anns, tparams, defType)
232
243
}
233
244
0 commit comments