mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 23:39:07 +07:00
[coverage] Convert CoverageViewManager to Kotlin
GitOrigin-RevId: fd2c82ea274ab2d34c7bb7eef916f87f4af2d0a9
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5c445223e2
commit
6b4bc8b15c
@@ -1,234 +1,218 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.coverage.view;
|
||||
package com.intellij.coverage.view
|
||||
|
||||
import com.intellij.coverage.CoverageBundle;
|
||||
import com.intellij.coverage.CoverageOptionsProvider;
|
||||
import com.intellij.coverage.CoverageSuitesBundle;
|
||||
import com.intellij.execution.configurations.RunConfigurationBase;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.*;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.NlsSafe;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.ui.AppUIUtil;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.ContentManager;
|
||||
import com.intellij.util.containers.DisposableWrapperList;
|
||||
import kotlin.Unit;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import com.intellij.coverage.CoverageBundle
|
||||
import com.intellij.coverage.CoverageOptionsProvider
|
||||
import com.intellij.coverage.CoverageSuitesBundle
|
||||
import com.intellij.coverage.view.CoverageViewManager.StateBean
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.components.*
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor
|
||||
import com.intellij.openapi.wm.ToolWindowManager
|
||||
import com.intellij.ui.AppUIUtil.invokeLaterIfProjectAlive
|
||||
import com.intellij.ui.content.Content
|
||||
import com.intellij.ui.content.ContentManager
|
||||
import com.intellij.util.containers.DisposableWrapperList
|
||||
import org.jetbrains.annotations.NonNls
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@State(name = "CoverageViewManager", storages = @Storage(StoragePathMacros.PRODUCT_WORKSPACE_FILE))
|
||||
@State(name = "CoverageViewManager", storages = [Storage(StoragePathMacros.PRODUCT_WORKSPACE_FILE)])
|
||||
@Service(Service.Level.PROJECT)
|
||||
public final class CoverageViewManager implements PersistentStateComponent<CoverageViewManager.StateBean>, Disposable.Default {
|
||||
private static final Logger LOG = Logger.getInstance(CoverageViewManager.class);
|
||||
public static final @NonNls String TOOLWINDOW_ID = "Coverage";
|
||||
private final Project myProject;
|
||||
private ContentManager myContentManager;
|
||||
private StateBean myStateBean = new StateBean();
|
||||
private final Map<CoverageSuitesBundle, CoverageView> myViews = new HashMap<>();
|
||||
class CoverageViewManager(private val myProject: Project) : PersistentStateComponent<StateBean?>, Disposable.Default {
|
||||
private var myContentManager: ContentManager? = null
|
||||
var stateBean = StateBean()
|
||||
private set
|
||||
private val myViews: MutableMap<CoverageSuitesBundle, CoverageView> = HashMap()
|
||||
|
||||
public CoverageViewManager(@NotNull Project project) {
|
||||
myProject = project;
|
||||
|
||||
AppUIUtil.invokeLaterIfProjectAlive(myProject, () -> {
|
||||
ToolWindow toolWindow = ToolWindowManager.getInstance(project).registerToolWindow(TOOLWINDOW_ID, builder -> {
|
||||
builder.sideTool = true;
|
||||
builder.icon = AllIcons.Toolwindows.ToolWindowCoverage;
|
||||
builder.anchor = ToolWindowAnchor.RIGHT;
|
||||
builder.stripeTitle = CoverageBundle.messagePointer("coverage.view.title");
|
||||
return Unit.INSTANCE;
|
||||
});
|
||||
toolWindow.setHelpId(CoverageView.HELP_ID);
|
||||
myContentManager = toolWindow.getContentManager();
|
||||
});
|
||||
}
|
||||
|
||||
public static CoverageViewManager getInstance(@NotNull Project project) {
|
||||
return project.getService(CoverageViewManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StateBean getState() {
|
||||
if (!myViews.isEmpty()) {
|
||||
final CoverageView view = myViews.values().iterator().next();
|
||||
view.saveSize();
|
||||
}
|
||||
return myStateBean;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadState(@NotNull StateBean state) {
|
||||
myStateBean = state;
|
||||
}
|
||||
|
||||
public StateBean getStateBean() {
|
||||
return myStateBean;
|
||||
}
|
||||
|
||||
public synchronized CoverageView getView(CoverageSuitesBundle suitesBundle) {
|
||||
return myViews.get(suitesBundle);
|
||||
}
|
||||
|
||||
public CoverageSuitesBundle getOpenedSuite() {
|
||||
ContentManager manager = myContentManager;
|
||||
if (manager == null) return null;
|
||||
Content selectedContent = manager.getSelectedContent();
|
||||
if (selectedContent == null) return null;
|
||||
for (var entry : myViews.entrySet()) {
|
||||
Content content = manager.getContent(entry.getValue());
|
||||
if (content == selectedContent) {
|
||||
return entry.getKey();
|
||||
init {
|
||||
invokeLaterIfProjectAlive(myProject) {
|
||||
val toolWindow = ToolWindowManager.getInstance(myProject).registerToolWindow(TOOLWINDOW_ID) {
|
||||
sideTool = true
|
||||
icon = AllIcons.Toolwindows.ToolWindowCoverage
|
||||
anchor = ToolWindowAnchor.RIGHT
|
||||
stripeTitle = CoverageBundle.messagePointer("coverage.view.title")
|
||||
}
|
||||
toolWindow.helpId = CoverageView.HELP_ID
|
||||
myContentManager = toolWindow.contentManager
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void activateToolwindow(@NotNull CoverageView view) {
|
||||
myContentManager.setSelectedContent(myContentManager.getContent(view));
|
||||
ToolWindow toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(TOOLWINDOW_ID);
|
||||
LOG.assertTrue(toolWindow != null);
|
||||
toolWindow.activate(null, false);
|
||||
override fun getState(): StateBean {
|
||||
if (!myViews.isEmpty()) {
|
||||
val view = myViews.values.iterator().next()
|
||||
view.saveSize()
|
||||
}
|
||||
return stateBean
|
||||
}
|
||||
|
||||
public synchronized void createView(CoverageSuitesBundle suitesBundle, boolean activate) {
|
||||
CoverageView coverageView = myViews.get(suitesBundle);
|
||||
Content content;
|
||||
override fun loadState(state: StateBean) {
|
||||
stateBean = state
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun getView(suitesBundle: CoverageSuitesBundle): CoverageView? {
|
||||
return myViews[suitesBundle]
|
||||
}
|
||||
|
||||
val openedSuite: CoverageSuitesBundle?
|
||||
get() {
|
||||
val manager = myContentManager
|
||||
if (manager == null) return null
|
||||
val selectedContent = manager.selectedContent
|
||||
if (selectedContent == null) return null
|
||||
for ((key, value) in myViews) {
|
||||
val content = manager.getContent(value)
|
||||
if (content === selectedContent) {
|
||||
return key
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun activateToolwindow(view: CoverageView) {
|
||||
myContentManager!!.setSelectedContent(myContentManager!!.getContent(view))
|
||||
val toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(TOOLWINDOW_ID)
|
||||
LOG.assertTrue(toolWindow != null)
|
||||
toolWindow!!.activate(null, false)
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun createView(suitesBundle: CoverageSuitesBundle, activate: Boolean) {
|
||||
var coverageView = myViews[suitesBundle]
|
||||
val content: Content
|
||||
if (coverageView == null) {
|
||||
coverageView = new CoverageView(myProject, suitesBundle, myStateBean);
|
||||
myViews.put(suitesBundle, coverageView);
|
||||
content = myContentManager.getFactory().createContent(coverageView, getDisplayName(suitesBundle), false);
|
||||
myContentManager.addContent(content);
|
||||
coverageView = CoverageView(myProject, suitesBundle, stateBean)
|
||||
myViews[suitesBundle] = coverageView
|
||||
content = myContentManager!!.factory.createContent(coverageView, getDisplayName(suitesBundle), false)
|
||||
myContentManager!!.addContent(content)
|
||||
}
|
||||
else {
|
||||
content = myContentManager.getContent(coverageView);
|
||||
content = myContentManager!!.getContent(coverageView)
|
||||
}
|
||||
myContentManager.setSelectedContent(content);
|
||||
myContentManager!!.setSelectedContent(content)
|
||||
|
||||
if (CoverageOptionsProvider.getInstance(myProject).activateViewOnRun() && activate) {
|
||||
activateToolwindow(coverageView);
|
||||
activateToolwindow(coverageView)
|
||||
}
|
||||
}
|
||||
|
||||
public void closeView(CoverageSuitesBundle suitesBundle) {
|
||||
CoverageView oldView = myViews.remove(suitesBundle);
|
||||
fun closeView(suitesBundle: CoverageSuitesBundle) {
|
||||
val oldView = myViews.remove(suitesBundle)
|
||||
if (oldView != null) {
|
||||
oldView.saveSize();
|
||||
ApplicationManager.getApplication().invokeLater(() -> {
|
||||
Content content = myContentManager.getContent(oldView);
|
||||
oldView.saveSize()
|
||||
ApplicationManager.getApplication().invokeLater {
|
||||
val content = myContentManager!!.getContent(oldView)
|
||||
if (content != null) {
|
||||
myContentManager.removeContent(content, false);
|
||||
myContentManager!!.removeContent(content, false)
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NlsSafe
|
||||
public static String getDisplayName(@NotNull CoverageSuitesBundle suitesBundle) {
|
||||
RunConfigurationBase<?> configuration = suitesBundle.getRunConfiguration();
|
||||
return configuration != null ? configuration.getName() : suitesBundle.getPresentableName();
|
||||
|
||||
@Deprecated("Use getView(CoverageSuitesBundle) instead", ReplaceWith("getView(suitesBundle)"))
|
||||
fun getToolwindow(suitesBundle: CoverageSuitesBundle): CoverageView? {
|
||||
return getView(suitesBundle)
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #getView(CoverageSuitesBundle)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public CoverageView getToolwindow(CoverageSuitesBundle suitesBundle) {
|
||||
return getView(suitesBundle);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #activateToolwindow(CoverageView)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public void activateToolwindow(@NotNull CoverageView view, boolean activate) {
|
||||
@Deprecated("Use activateToolwindow(CoverageView) instead", ReplaceWith("if (activate) activateToolwindow(view)"))
|
||||
fun activateToolwindow(view: CoverageView, activate: Boolean) {
|
||||
if (activate) {
|
||||
activateToolwindow(view);
|
||||
activateToolwindow(view)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #createView(CoverageSuitesBundle, boolean)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public void createToolWindow(CoverageSuitesBundle suitesBundle, boolean activate) {
|
||||
createView(suitesBundle, activate);
|
||||
|
||||
@Deprecated("Use createView instead", ReplaceWith("createView(suitesBundle, activate)"))
|
||||
fun createToolWindow(suitesBundle: CoverageSuitesBundle, activate: Boolean) {
|
||||
createView(suitesBundle, activate)
|
||||
}
|
||||
|
||||
public static final class StateBean {
|
||||
private boolean myFlattenPackages = false;
|
||||
public boolean myAutoScrollToSource = false;
|
||||
public boolean myAutoScrollFromSource = false;
|
||||
public List<Integer> myColumnSize;
|
||||
public boolean myAscendingOrder = true;
|
||||
public int mySortingColumn = 0;
|
||||
private boolean myHideFullyCovered = false;
|
||||
private boolean myShowOnlyModified = true;
|
||||
private boolean myDefaultFilters = true;
|
||||
class StateBean {
|
||||
private var myFlattenPackages = false
|
||||
|
||||
private final DisposableWrapperList<CoverageViewSettingsListener> myListeners = new DisposableWrapperList<>();
|
||||
@JvmField
|
||||
var myAutoScrollToSource: Boolean = false
|
||||
|
||||
public boolean isFlattenPackages() {
|
||||
return myFlattenPackages;
|
||||
}
|
||||
@JvmField
|
||||
var myAutoScrollFromSource: Boolean = false
|
||||
|
||||
public void setFlattenPackages(boolean flattenPackages) {
|
||||
if (myFlattenPackages != flattenPackages) {
|
||||
myFlattenPackages = flattenPackages;
|
||||
fireChanged();
|
||||
@JvmField
|
||||
var myColumnSize: List<Int>? = null
|
||||
|
||||
@JvmField
|
||||
var myAscendingOrder: Boolean = true
|
||||
|
||||
@JvmField
|
||||
var mySortingColumn: Int = 0
|
||||
|
||||
private var myHideFullyCovered = false
|
||||
private var myShowOnlyModified = true
|
||||
var isDefaultFilters: Boolean = true
|
||||
private set
|
||||
|
||||
private val myListeners = DisposableWrapperList<CoverageViewSettingsListener>()
|
||||
|
||||
var isFlattenPackages: Boolean
|
||||
get() = myFlattenPackages
|
||||
set(flattenPackages) {
|
||||
if (myFlattenPackages != flattenPackages) {
|
||||
myFlattenPackages = flattenPackages
|
||||
fireChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isHideFullyCovered() {
|
||||
return myHideFullyCovered;
|
||||
}
|
||||
|
||||
public void setHideFullyCovered(boolean hideFullyCovered) {
|
||||
if (myHideFullyCovered != hideFullyCovered) {
|
||||
myHideFullyCovered = hideFullyCovered;
|
||||
myDefaultFilters = false;
|
||||
fireChanged();
|
||||
var isHideFullyCovered: Boolean
|
||||
get() = myHideFullyCovered
|
||||
set(hideFullyCovered) {
|
||||
if (myHideFullyCovered != hideFullyCovered) {
|
||||
myHideFullyCovered = hideFullyCovered
|
||||
isDefaultFilters = false
|
||||
fireChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isShowOnlyModified() {
|
||||
return myShowOnlyModified;
|
||||
}
|
||||
|
||||
public void setShowOnlyModified(boolean showOnlyModified) {
|
||||
if (myShowOnlyModified != showOnlyModified) {
|
||||
myShowOnlyModified = showOnlyModified;
|
||||
myDefaultFilters = false;
|
||||
fireChanged();
|
||||
var isShowOnlyModified: Boolean
|
||||
get() = myShowOnlyModified
|
||||
set(showOnlyModified) {
|
||||
if (myShowOnlyModified != showOnlyModified) {
|
||||
myShowOnlyModified = showOnlyModified
|
||||
isDefaultFilters = false
|
||||
fireChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isDefaultFilters() {
|
||||
return myDefaultFilters;
|
||||
}
|
||||
|
||||
public void addListener(Disposable disposable, CoverageViewSettingsListener listener) {
|
||||
myListeners.add(listener, disposable);
|
||||
fun addListener(disposable: Disposable, listener: CoverageViewSettingsListener) {
|
||||
myListeners.add(listener, disposable)
|
||||
}
|
||||
|
||||
|
||||
private void fireChanged() {
|
||||
for (CoverageViewSettingsListener listener : myListeners) {
|
||||
listener.onSettingsChanged(this);
|
||||
private fun fireChanged() {
|
||||
for (listener in myListeners) {
|
||||
listener.onSettingsChanged(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface CoverageViewSettingsListener {
|
||||
void onSettingsChanged(StateBean stateBean);
|
||||
fun interface CoverageViewSettingsListener {
|
||||
fun onSettingsChanged(stateBean: StateBean?)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val LOG = Logger.getInstance(CoverageViewManager::class.java)
|
||||
const val TOOLWINDOW_ID: @NonNls String = "Coverage"
|
||||
|
||||
@JvmStatic
|
||||
fun getInstance(project: Project): CoverageViewManager = project.service()
|
||||
|
||||
fun getDisplayName(suitesBundle: CoverageSuitesBundle): @NlsSafe String? {
|
||||
val configuration = suitesBundle.runConfiguration
|
||||
return configuration?.name ?: suitesBundle.presentableName
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user