/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.core;
import com.intellij.codeInsight.daemon.impl.EditorTracker;
import com.intellij.debugger.DebuggerManagerEx;
import com.intellij.debugger.impl.DebuggerStateManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.editor.colors.EditorColorsListener;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.impl.DefaultProject;
import com.intellij.openapi.util.Disposer;
import gw.plugin.ij.debugger.GosuPositionHighlighter;
import org.jetbrains.annotations.NotNull;
public class GosuProjectComponent implements ProjectComponent {
@NotNull
private final Project _project;
private final EditorTracker _editorTracker;
@NotNull
private final GosuPositionHighlighter myEditorManager;
protected GosuProjectComponent(@NotNull Project project, EditorTracker editorTracker, @NotNull final EditorColorsManager colorsManager) {
this._project = project;
this._editorTracker = editorTracker;
this.myEditorManager = new GosuPositionHighlighter(_project, getContextManager());
final EditorColorsListener myColorsListener = new EditorColorsListener() {
public void globalSchemeChange(EditorColorsScheme scheme) {
myEditorManager.updateContextPointDescription();
}
};
colorsManager.addEditorColorsListener(myColorsListener);
Disposer.register(project, new Disposable() {
public void dispose() {
colorsManager.removeEditorColorsListener(myColorsListener);
}
});
}
private DebuggerStateManager getContextManager() {
return DebuggerManagerEx.getInstanceEx(_project).getContextManager();
}
// ProjectComponent
@Override
public void projectOpened() {
PluginLoaderUtil.instance(_project).projectOpened();
}
@Override
public void projectClosed() {
PluginLoaderUtil.instance(_project).projectClosed();
}
// BaseComponent
@Override
public void initComponent() {
if (!(_project instanceof DefaultProject) && !PluginLoaderUtil.instance(_project).isStarted()) {
PluginLoaderUtil.instance(_project).setProject();
PluginLoaderUtil.instance(_project).setEditorTracker(_editorTracker);
PluginLoaderUtil.instance(_project).disableIJExternalCompiler();
}
}
@Override
public void disposeComponent() {
}
// NamedComponent
@NotNull
@Override
public String getComponentName() {
return "Gosu Project Component";
}
}