mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
correctly update RC icon on enter/exit dumb mode (move set call from IconDeferrer handler)
This commit is contained in:
@@ -123,6 +123,7 @@ open class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persi
|
||||
|
||||
private val schemeManagerProvider = SchemeManagerIprProvider("configuration")
|
||||
|
||||
@Suppress("LeakingThis")
|
||||
private val workspaceSchemeManager = SchemeManagerFactory.getInstance(project).create("workspace", RunConfigurationSchemeManager(this, false), streamProvider = schemeManagerProvider, autoSave = false)
|
||||
|
||||
internal var projectSchemeManager: SchemeManager<RunnerAndConfigurationSettingsImpl>? = null
|
||||
@@ -853,20 +854,16 @@ open class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persi
|
||||
}
|
||||
|
||||
override fun getConfigurationIcon(settings: RunnerAndConfigurationSettings, withLiveIndicator: Boolean): Icon {
|
||||
val uniqueID = settings.uniqueID
|
||||
val selectedConfiguration = selectedConfiguration
|
||||
val selectedId = if (selectedConfiguration != null) selectedConfiguration.uniqueID else ""
|
||||
if (selectedId == uniqueID) {
|
||||
iconCache.checkValidity(uniqueID)
|
||||
val uniqueId = settings.uniqueID
|
||||
if (selectedConfiguration?.uniqueID == uniqueId) {
|
||||
iconCache.checkValidity(uniqueId)
|
||||
}
|
||||
var icon = iconCache.get(uniqueID, settings, project)
|
||||
var icon = iconCache.get(uniqueId, settings, project)
|
||||
if (withLiveIndicator) {
|
||||
val runningDescriptors = ExecutionManagerImpl.getInstance(project).getRunningDescriptors { it === settings }
|
||||
if (runningDescriptors.size == 1) {
|
||||
icon = ExecutionUtil.getLiveIndicator(icon)
|
||||
}
|
||||
if (runningDescriptors.size > 1) {
|
||||
icon = IconUtil.addText(icon, runningDescriptors.size.toString())
|
||||
when {
|
||||
runningDescriptors.size == 1 -> icon = ExecutionUtil.getLiveIndicator(icon)
|
||||
runningDescriptors.size > 1 -> icon = IconUtil.addText(icon, runningDescriptors.size.toString())
|
||||
}
|
||||
}
|
||||
return icon
|
||||
@@ -1108,6 +1105,7 @@ open class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persi
|
||||
settings.schemeManager?.removeScheme(settings as RunnerAndConfigurationSettingsImpl)
|
||||
recentlyUsedTemporaries.remove(settings)
|
||||
removed.add(settings)
|
||||
iconCache.remove(settings.uniqueID)
|
||||
}
|
||||
else {
|
||||
var isChanged = false
|
||||
|
||||
@@ -40,51 +40,61 @@ class TimedIconCache {
|
||||
|
||||
fun remove(id: String) {
|
||||
lock.write {
|
||||
idToIcon.remove(id)
|
||||
iconCheckTimes.remove(id)
|
||||
iconCalcTime.remove(id)
|
||||
}
|
||||
}
|
||||
|
||||
fun get(id: String, settings: RunnerAndConfigurationSettings, project: Project): Icon {
|
||||
return lock.read { idToIcon.get(id) } ?: IconDeferrer.getInstance().deferAutoUpdatable(settings.configuration?.icon, project.hashCode() xor settings.hashCode()) { param ->
|
||||
if (project.isDisposed) {
|
||||
return@deferAutoUpdatable null
|
||||
return lock.read { idToIcon.get(id) } ?: lock.write {
|
||||
idToIcon.get(id)?.let {
|
||||
return it
|
||||
}
|
||||
|
||||
lock.write {
|
||||
iconCalcTime.remove(id)
|
||||
}
|
||||
|
||||
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)
|
||||
val icon = IconDeferrer.getInstance().deferAutoUpdatable(settings.configuration.icon, project.hashCode() xor settings.hashCode()) {
|
||||
if (project.isDisposed) {
|
||||
return@deferAutoUpdatable null
|
||||
}
|
||||
}
|
||||
else {
|
||||
try {
|
||||
DumbService.getInstance(project).isAlternativeResolveEnabled = true
|
||||
settings.checkSettings()
|
||||
icon = ProgramRunnerUtil.getConfigurationIcon(settings, false)
|
||||
|
||||
lock.write {
|
||||
iconCalcTime.remove(id)
|
||||
}
|
||||
catch (e: IndexNotReadyException) {
|
||||
icon = ProgramRunnerUtil.getConfigurationIcon(settings, !Registry.`is`("dumb.aware.run.configurations"))
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
catch (ignored: RuntimeConfigurationException) {
|
||||
icon = ProgramRunnerUtil.getConfigurationIcon(settings, true)
|
||||
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
|
||||
}
|
||||
}
|
||||
finally {
|
||||
DumbService.getInstance(project).isAlternativeResolveEnabled = false
|
||||
|
||||
lock.write {
|
||||
iconCalcTime.put(id, System.currentTimeMillis() - startTime)
|
||||
}
|
||||
}
|
||||
|
||||
lock.write {
|
||||
iconCalcTime.put(id, System.currentTimeMillis() - startTime)
|
||||
set(id, icon)
|
||||
icon
|
||||
}
|
||||
|
||||
set(id, icon)
|
||||
icon
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user