mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix a deadlock when waiting under write action for the FileStatus class to be loaded by another thread, which attempts to initialize a service in <clinit> and requires a read action
This commit is contained in:
@@ -75,7 +75,7 @@ public class PeerFactoryImpl extends PeerFactory {
|
||||
private final UIHelper myUIHelper = new MyUIHelper();
|
||||
|
||||
public FileStatusFactory getFileStatusFactory() {
|
||||
return ServiceManager.getService(FileStatusFactory.class);
|
||||
return FileStatusFactory.getInstance();
|
||||
}
|
||||
|
||||
public DialogWrapperPeerFactory getDialogWrapperPeerFactory() {
|
||||
|
||||
+1
-1
@@ -469,7 +469,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract
|
||||
|
||||
private static void initFileStatusDescriptors(ArrayList<EditorSchemeAttributeDescriptor> descriptions, MyColorScheme scheme) {
|
||||
|
||||
FileStatus[] statuses = FileStatusFactory.SERVICE.getInstance().getAllFileStatuses();
|
||||
FileStatus[] statuses = FileStatusFactory.getInstance().getAllFileStatuses();
|
||||
|
||||
for (FileStatus fileStatus : statuses) {
|
||||
addEditorSettingDescription(descriptions,
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ class FileStatusColorsPageFactory implements ColorAndFontPanelFactory {
|
||||
|
||||
private static Collection<String> collectFileTypes() {
|
||||
ArrayList<String> result = new ArrayList<String>();
|
||||
FileStatus[] statuses = FileStatusFactory.SERVICE.getInstance().getAllFileStatuses();
|
||||
FileStatus[] statuses = FileStatusFactory.getInstance().getAllFileStatuses();
|
||||
|
||||
for (FileStatus status : statuses) {
|
||||
result.add(status.getText());
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.openapi.vcs;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.editor.colors.ColorKey;
|
||||
import com.intellij.ui.Gray;
|
||||
|
||||
@@ -32,25 +31,25 @@ public interface FileStatus {
|
||||
Color COLOR_SWITCHED = new Color(8, 151, 143);
|
||||
Color COLOR_UNKNOWN = new Color(153, 51, 0);
|
||||
|
||||
FileStatus NOT_CHANGED = ServiceManager.getService(FileStatusFactory.class).createFileStatus("NOT_CHANGED", VcsBundle.message("file.status.name.up.to.date"), COLOR_NOT_CHANGED);
|
||||
FileStatus DELETED = ServiceManager.getService(FileStatusFactory.class).createFileStatus("DELETED", VcsBundle.message("file.status.name.deleted"), COLOR_MISSING);
|
||||
FileStatus MODIFIED = ServiceManager.getService(FileStatusFactory.class).createFileStatus("MODIFIED", VcsBundle.message("file.status.name.modified"), COLOR_MODIFIED);
|
||||
FileStatus ADDED = ServiceManager.getService(FileStatusFactory.class).createFileStatus("ADDED", VcsBundle.message("file.status.name.added"), COLOR_ADDED);
|
||||
FileStatus MERGE = ServiceManager.getService(FileStatusFactory.class).createFileStatus("MERGED", VcsBundle.message("file.status.name.merged"), COLOR_MERGE);
|
||||
FileStatus UNKNOWN = ServiceManager.getService(FileStatusFactory.class).createFileStatus("UNKNOWN", VcsBundle.message("file.status.name.unknown"), COLOR_UNKNOWN);
|
||||
FileStatus IGNORED = ServiceManager.getService(FileStatusFactory.class).createFileStatus("IDEA_FILESTATUS_IGNORED", VcsBundle.message("file.status.name.ignored"), new Color(114, 114, 56));
|
||||
FileStatus HIJACKED = ServiceManager.getService(FileStatusFactory.class).createFileStatus("HIJACKED", VcsBundle.message("file.status.name.hijacked"), COLOR_HIJACKED);
|
||||
FileStatus MERGED_WITH_CONFLICTS = ServiceManager.getService(FileStatusFactory.class)
|
||||
FileStatus NOT_CHANGED = FileStatusFactory.getInstance().createFileStatus("NOT_CHANGED", VcsBundle.message("file.status.name.up.to.date"), COLOR_NOT_CHANGED);
|
||||
FileStatus DELETED = FileStatusFactory.getInstance().createFileStatus("DELETED", VcsBundle.message("file.status.name.deleted"), COLOR_MISSING);
|
||||
FileStatus MODIFIED = FileStatusFactory.getInstance().createFileStatus("MODIFIED", VcsBundle.message("file.status.name.modified"), COLOR_MODIFIED);
|
||||
FileStatus ADDED = FileStatusFactory.getInstance().createFileStatus("ADDED", VcsBundle.message("file.status.name.added"), COLOR_ADDED);
|
||||
FileStatus MERGE = FileStatusFactory.getInstance().createFileStatus("MERGED", VcsBundle.message("file.status.name.merged"), COLOR_MERGE);
|
||||
FileStatus UNKNOWN = FileStatusFactory.getInstance().createFileStatus("UNKNOWN", VcsBundle.message("file.status.name.unknown"), COLOR_UNKNOWN);
|
||||
FileStatus IGNORED = FileStatusFactory.getInstance().createFileStatus("IDEA_FILESTATUS_IGNORED", VcsBundle.message("file.status.name.ignored"), new Color(114, 114, 56));
|
||||
FileStatus HIJACKED = FileStatusFactory.getInstance().createFileStatus("HIJACKED", VcsBundle.message("file.status.name.hijacked"), COLOR_HIJACKED);
|
||||
FileStatus MERGED_WITH_CONFLICTS = FileStatusFactory.getInstance()
|
||||
.createFileStatus("IDEA_FILESTATUS_MERGED_WITH_CONFLICTS", VcsBundle.message("file.status.name.merged.with.conflicts"), Color.red);
|
||||
FileStatus MERGED_WITH_BOTH_CONFLICTS = ServiceManager.getService(FileStatusFactory.class)
|
||||
FileStatus MERGED_WITH_BOTH_CONFLICTS = FileStatusFactory.getInstance()
|
||||
.createFileStatus("IDEA_FILESTATUS_MERGED_WITH_BOTH_CONFLICTS", VcsBundle.message("file.status.name.merged.with.both.conflicts"), Color.red);
|
||||
FileStatus MERGED_WITH_PROPERTY_CONFLICTS = ServiceManager.getService(FileStatusFactory.class)
|
||||
FileStatus MERGED_WITH_PROPERTY_CONFLICTS = FileStatusFactory.getInstance()
|
||||
.createFileStatus("IDEA_FILESTATUS_MERGED_WITH_PROPERTY_CONFLICTS", VcsBundle.message("file.status.name.merged.with.property.conflicts"), Color.red);
|
||||
FileStatus DELETED_FROM_FS = ServiceManager.getService(FileStatusFactory.class)
|
||||
FileStatus DELETED_FROM_FS = FileStatusFactory.getInstance()
|
||||
.createFileStatus("IDEA_FILESTATUS_DELETED_FROM_FILE_SYSTEM", VcsBundle.message("file.status.name.deleted.from.file.system"),
|
||||
new Color(119, 56, 149));
|
||||
FileStatus SWITCHED = ServiceManager.getService(FileStatusFactory.class).createFileStatus("SWITCHED", VcsBundle.message("file.status.name.switched"), COLOR_SWITCHED);
|
||||
FileStatus OBSOLETE = ServiceManager.getService(FileStatusFactory.class).createFileStatus("OBSOLETE", VcsBundle.message("file.status.name.obsolete"), COLOR_OUT_OF_DATE);
|
||||
FileStatus SWITCHED = FileStatusFactory.getInstance().createFileStatus("SWITCHED", VcsBundle.message("file.status.name.switched"), COLOR_SWITCHED);
|
||||
FileStatus OBSOLETE = FileStatusFactory.getInstance().createFileStatus("OBSOLETE", VcsBundle.message("file.status.name.obsolete"), COLOR_OUT_OF_DATE);
|
||||
|
||||
String getText();
|
||||
|
||||
|
||||
@@ -15,21 +15,33 @@
|
||||
*/
|
||||
package com.intellij.openapi.vcs;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.editor.colors.ColorKey;
|
||||
import com.intellij.openapi.vcs.impl.FileStatusImpl;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public interface FileStatusFactory {
|
||||
FileStatus createFileStatus(@NonNls String id, String description, Color color);
|
||||
FileStatus[] getAllFileStatuses();
|
||||
public class FileStatusFactory {
|
||||
private static final FileStatusFactory ourInstance = new FileStatusFactory();
|
||||
private final List<FileStatus> myStatuses = new ArrayList<FileStatus>();
|
||||
|
||||
class SERVICE {
|
||||
private SERVICE() {
|
||||
}
|
||||
|
||||
public static FileStatusFactory getInstance() {
|
||||
return ServiceManager.getService(FileStatusFactory.class);
|
||||
}
|
||||
private FileStatusFactory() {
|
||||
}
|
||||
|
||||
public synchronized FileStatus createFileStatus(@NonNls String id, String description, Color color) {
|
||||
FileStatusImpl result = new FileStatusImpl(id, ColorKey.createColorKey("FILESTATUS_" + id, color), description);
|
||||
myStatuses.add(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public synchronized FileStatus[] getAllFileStatuses() {
|
||||
return myStatuses.toArray(new FileStatus[myStatuses.size()]);
|
||||
}
|
||||
|
||||
public static FileStatusFactory getInstance() {
|
||||
return ourInstance;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.openapi.vcs.impl;
|
||||
|
||||
import com.intellij.openapi.editor.colors.ColorKey;
|
||||
import com.intellij.openapi.vcs.FileStatus;
|
||||
import com.intellij.openapi.vcs.FileStatusFactory;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class FileStatusFactoryImpl implements FileStatusFactory {
|
||||
private final List<FileStatus> myStatuses = new ArrayList<FileStatus>();
|
||||
|
||||
public FileStatus createFileStatus(String id, String description, Color color) {
|
||||
FileStatusImpl result = new FileStatusImpl(id, ColorKey.createColorKey("FILESTATUS_" + id, color), description);
|
||||
myStatuses.add(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public FileStatus[] getAllFileStatuses() {
|
||||
return myStatuses.toArray(new FileStatus[myStatuses.size()]);
|
||||
}
|
||||
}
|
||||
@@ -63,8 +63,6 @@
|
||||
|
||||
<applicationService serviceInterface="com.intellij.openapi.ui.DialogWrapperPeerFactory"
|
||||
serviceImplementation="com.intellij.openapi.ui.impl.DialogWrapperPeerFactoryImpl"/>
|
||||
<applicationService serviceInterface="com.intellij.openapi.vcs.FileStatusFactory"
|
||||
serviceImplementation="com.intellij.openapi.vcs.impl.FileStatusFactoryImpl"/>
|
||||
<applicationService serviceInterface="com.intellij.ui.content.ContentFactory"
|
||||
serviceImplementation="com.intellij.ui.content.ContentFactoryImpl"/>
|
||||
<applicationService serviceInterface="com.intellij.ui.TreeUIHelper"
|
||||
|
||||
+3
-3
@@ -33,11 +33,11 @@ import java.awt.*;
|
||||
public class ChangelistConflictFileStatusProvider implements FileStatusProvider {
|
||||
|
||||
private static final FileStatus MODIFIED_OUTSIDE =
|
||||
FileStatusFactory.SERVICE.getInstance().createFileStatus("modifiedOutside", "Modified in not active changelist", FileStatus.COLOR_MODIFIED.brighter());
|
||||
FileStatusFactory.getInstance().createFileStatus("modifiedOutside", "Modified in not active changelist", FileStatus.COLOR_MODIFIED.brighter());
|
||||
private static final FileStatus ADDED_OUTSIDE =
|
||||
FileStatusFactory.SERVICE.getInstance().createFileStatus("addedOutside", "Added in not active changelist", FileStatus.COLOR_ADDED.brighter());
|
||||
FileStatusFactory.getInstance().createFileStatus("addedOutside", "Added in not active changelist", FileStatus.COLOR_ADDED.brighter());
|
||||
private static final FileStatus CHANGELIST_CONFLICT =
|
||||
FileStatusFactory.SERVICE.getInstance().createFileStatus("changelistConflict", "Changelist conflict", Color.red);
|
||||
FileStatusFactory.getInstance().createFileStatus("changelistConflict", "Changelist conflict", Color.red);
|
||||
|
||||
private final ChangelistConflictTracker myConflictTracker;
|
||||
private final ChangeListManager myChangeListManager;
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
// limitations under the License.
|
||||
package org.zmlx.hg4idea.provider;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -37,9 +36,8 @@ public class HgChangeProvider implements ChangeProvider {
|
||||
private final Project myProject;
|
||||
private final VcsKey myVcsKey;
|
||||
|
||||
public static final FileStatus COPIED =
|
||||
ServiceManager.getService(FileStatusFactory.class).createFileStatus("COPIED", "Copied", FileStatus.COLOR_ADDED);
|
||||
public static final FileStatus RENAMED = ServiceManager.getService(FileStatusFactory.class).createFileStatus("RENAMED", "Renamed",
|
||||
public static final FileStatus COPIED = FileStatusFactory.getInstance().createFileStatus("COPIED", "Copied", FileStatus.COLOR_ADDED);
|
||||
public static final FileStatus RENAMED = FileStatusFactory.getInstance().createFileStatus("RENAMED", "Renamed",
|
||||
Color.cyan.darker().darker());
|
||||
|
||||
private static final EnumMap<HgFileStatusEnum, HgChangeProcessor> PROCESSORS =
|
||||
|
||||
@@ -27,15 +27,15 @@ public class SvnFileStatus {
|
||||
}
|
||||
|
||||
public static final FileStatus EXTERNAL =
|
||||
FileStatusFactory.SERVICE.getInstance()
|
||||
FileStatusFactory.getInstance()
|
||||
.createFileStatus("IDEA_SVN_FILESTATUS_EXTERNAL", SvnBundle.message("file.status.external"), new Color(0x72A038));
|
||||
|
||||
public static final FileStatus OBSTRUCTED =
|
||||
FileStatusFactory.SERVICE.getInstance()
|
||||
FileStatusFactory.getInstance()
|
||||
.createFileStatus("IDEA_SVN_FILESTATUS_OBSTRUCTED", SvnBundle.message("file.status.obstructed"), new Color(0x727238));
|
||||
|
||||
public static final FileStatus REPLACED =
|
||||
FileStatusFactory.SERVICE.getInstance().createFileStatus("IDEA_SVN_REPLACED",
|
||||
FileStatusFactory.getInstance().createFileStatus("IDEA_SVN_REPLACED",
|
||||
SvnBundle.message("file.status.replaced"),
|
||||
FileStatus.COLOR_ADDED);
|
||||
}
|
||||
|
||||
@@ -27,15 +27,15 @@ public class SvnFileStatus {
|
||||
}
|
||||
|
||||
public static final FileStatus EXTERNAL =
|
||||
FileStatusFactory.SERVICE.getInstance()
|
||||
FileStatusFactory.getInstance()
|
||||
.createFileStatus("IDEA_SVN_FILESTATUS_EXTERNAL", SvnBundle.message("file.status.external"), new Color(0x72A038));
|
||||
|
||||
public static final FileStatus OBSTRUCTED =
|
||||
FileStatusFactory.SERVICE.getInstance()
|
||||
FileStatusFactory.getInstance()
|
||||
.createFileStatus("IDEA_SVN_FILESTATUS_OBSTRUCTED", SvnBundle.message("file.status.obstructed"), new Color(0x727238));
|
||||
|
||||
public static final FileStatus REPLACED =
|
||||
FileStatusFactory.SERVICE.getInstance().createFileStatus("IDEA_SVN_REPLACED",
|
||||
FileStatusFactory.getInstance().createFileStatus("IDEA_SVN_REPLACED",
|
||||
SvnBundle.message("file.status.replaced"),
|
||||
FileStatus.COLOR_ADDED);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user