calculate run configuration icons without very expensive resolve during indexing, don't mark them as invalid if it haven't succeeded

This commit is contained in:
peter
2017-05-24 20:25:38 +02:00
parent a68e5d9e1d
commit fc6ee7f9ee
@@ -63,29 +63,7 @@ class TimedIconCache {
val startTime = System.currentTimeMillis()
var icon: Icon
if (DumbService.isDumb(project) && !Registry.`is`("dumb.aware.run.configurations")) {
icon = IconLoader.getDisabledIcon(ProgramRunnerUtil.getRawIcon(settings))!!
if (settings.isTemporary) {
icon = ProgramRunnerUtil.getTemporaryIcon(icon)
}
}
else {
try {
DumbService.getInstance(project).isAlternativeResolveEnabled = true
settings.checkSettings()
icon = ProgramRunnerUtil.getConfigurationIcon(settings, false)
}
catch (e: IndexNotReadyException) {
icon = ProgramRunnerUtil.getConfigurationIcon(settings, !Registry.`is`("dumb.aware.run.configurations"))
}
catch (ignored: RuntimeConfigurationException) {
icon = ProgramRunnerUtil.getConfigurationIcon(settings, true)
}
finally {
DumbService.getInstance(project).isAlternativeResolveEnabled = false
}
}
val icon = calcIcon(settings, project)
lock.write {
iconCalcTime.put(id, System.currentTimeMillis() - startTime)
@@ -99,6 +77,19 @@ class TimedIconCache {
}
}
private fun calcIcon(settings: RunnerAndConfigurationSettings, project: Project): Icon {
try {
settings.checkSettings()
return ProgramRunnerUtil.getConfigurationIcon(settings, false)
}
catch (e: IndexNotReadyException) {
return ProgramRunnerUtil.getConfigurationIcon(settings, false)
}
catch (ignored: RuntimeConfigurationException) {
return ProgramRunnerUtil.getConfigurationIcon(settings, !DumbService.isDumb(project))
}
}
private fun set(id: String, icon: Icon) {
idToIcon.put(id, icon)
iconCheckTimes.put(id, System.currentTimeMillis())