mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't load inspection profile manager on dom initialization
This commit is contained in:
+13
-39
@@ -46,14 +46,12 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.xml.DomElement;
|
||||
import com.intellij.util.xml.DomFileElement;
|
||||
import com.intellij.util.xml.DomUtil;
|
||||
import gnu.trove.THashMap;
|
||||
import com.intellij.util.xml.impl.DomApplicationComponent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class DomElementAnnotationsManagerImpl extends DomElementAnnotationsManager {
|
||||
public static final Object LOCK = new Object();
|
||||
@@ -63,8 +61,6 @@ public class DomElementAnnotationsManagerImpl extends DomElementAnnotationsManag
|
||||
private static final Key<CachedValue<Boolean>> CACHED_VALUE_KEY = Key.create("DomProblemHolderCachedValue");
|
||||
private final EventDispatcher<DomHighlightingListener> myDispatcher = EventDispatcher.create(DomHighlightingListener.class);
|
||||
|
||||
private final Map<Class, List<DomElementsAnnotator>> myClass2Annotator = new THashMap<Class, List<DomElementsAnnotator>>();
|
||||
|
||||
private static final DomElementsProblemsHolder EMPTY_PROBLEMS_HOLDER = new DomElementsProblemsHolder() {
|
||||
@NotNull
|
||||
public List<DomElementProblemDescriptor> getProblems(DomElement domElement) {
|
||||
@@ -105,16 +101,12 @@ public class DomElementAnnotationsManagerImpl extends DomElementAnnotationsManag
|
||||
}
|
||||
|
||||
};
|
||||
private final DomHighlightingHelperImpl myHighlightingHelper = new DomHighlightingHelperImpl(this);
|
||||
private final ModificationTracker myModificationTracker;
|
||||
private final ProjectRootManager myProjectRootManager;
|
||||
private final CachedValuesManager myCachedValuesManager;
|
||||
private final Project myProject;
|
||||
private long myModificationCount;
|
||||
|
||||
public DomElementAnnotationsManagerImpl(Project project, final InspectionProfileManager inspectionProfileManager, ProjectRootManager projectRootManager,
|
||||
final CachedValuesManager cachedValuesManager) {
|
||||
myCachedValuesManager = cachedValuesManager;
|
||||
myProjectRootManager = projectRootManager;
|
||||
public DomElementAnnotationsManagerImpl(Project project) {
|
||||
myProject = project;
|
||||
myModificationTracker = new ModificationTracker() {
|
||||
public long getModificationCount() {
|
||||
return myModificationCount;
|
||||
@@ -129,6 +121,8 @@ public class DomElementAnnotationsManagerImpl extends DomElementAnnotationsManag
|
||||
dropAnnotationsCache();
|
||||
}
|
||||
};
|
||||
|
||||
final InspectionProfileManager inspectionProfileManager = InspectionProfileManager.getInstance();
|
||||
inspectionProfileManager.addProfileChangeListener(profileChangeAdapter, project);
|
||||
Disposer.register(project, new Disposable() {
|
||||
public void dispose() {
|
||||
@@ -161,9 +155,9 @@ public class DomElementAnnotationsManagerImpl extends DomElementAnnotationsManag
|
||||
if (isHolderOutdated(element.getFile()) || holder == null) {
|
||||
holder = new DomElementsProblemsHolderImpl(element);
|
||||
rootTag.putUserData(DOM_PROBLEM_HOLDER_KEY, holder);
|
||||
final CachedValue<Boolean> cachedValue = myCachedValuesManager.createCachedValue(new CachedValueProvider<Boolean>() {
|
||||
final CachedValue<Boolean> cachedValue = CachedValuesManager.getManager(myProject).createCachedValue(new CachedValueProvider<Boolean>() {
|
||||
public Result<Boolean> compute() {
|
||||
return new Result<Boolean>(Boolean.FALSE, element, PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, myModificationTracker, myProjectRootManager);
|
||||
return new Result<Boolean>(Boolean.FALSE, element, PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, myModificationTracker, ProjectRootManager.getInstance(myProject));
|
||||
}
|
||||
}, false);
|
||||
cachedValue.getValue();
|
||||
@@ -211,33 +205,13 @@ public class DomElementAnnotationsManagerImpl extends DomElementAnnotationsManag
|
||||
return getProblemHolder(element);
|
||||
}
|
||||
|
||||
public void annotate(final DomElement element, final DomElementAnnotationHolder holder, final Class rootClass) {
|
||||
final List<DomElementsAnnotator> list = getAnnotators(rootClass);
|
||||
if (list != null) {
|
||||
for (DomElementsAnnotator annotator : list) {
|
||||
annotator.annotate(element, holder);
|
||||
}
|
||||
public static void annotate(final DomElement element, final DomElementAnnotationHolder holder, final Class rootClass) {
|
||||
final DomElementsAnnotator annotator = DomApplicationComponent.getInstance().getAnnotator(rootClass);
|
||||
if (annotator != null) {
|
||||
annotator.annotate(element, holder);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public final void registerDomElementsAnnotator(DomElementsAnnotator annotator, Class<? extends DomElement> aClass) {
|
||||
getOrCreateAnnotators(aClass).add(annotator);
|
||||
}
|
||||
|
||||
private List<DomElementsAnnotator> getOrCreateAnnotators(final Class aClass) {
|
||||
List<DomElementsAnnotator> annotators = getAnnotators(aClass);
|
||||
if (annotators == null) {
|
||||
myClass2Annotator.put(aClass, annotators = new ArrayList<DomElementsAnnotator>());
|
||||
}
|
||||
return annotators;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private List<DomElementsAnnotator> getAnnotators(final Class aClass) {
|
||||
return myClass2Annotator.get(aClass);
|
||||
}
|
||||
|
||||
public List<ProblemDescriptor> createProblemDescriptors(final InspectionManager manager, DomElementProblemDescriptor problemDescriptor) {
|
||||
return ContainerUtil.createMaybeSingletonList(DomElementsHighlightingUtil.createProblemDescriptors(manager, problemDescriptor));
|
||||
}
|
||||
@@ -256,7 +230,7 @@ public class DomElementAnnotationsManagerImpl extends DomElementAnnotationsManag
|
||||
}
|
||||
|
||||
public DomHighlightingHelper getHighlightingHelper() {
|
||||
return myHighlightingHelper;
|
||||
return DomHighlightingHelperImpl.INSTANCE;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -51,15 +51,15 @@ import java.util.List;
|
||||
* @author peter
|
||||
*/
|
||||
public class DomHighlightingHelperImpl extends DomHighlightingHelper {
|
||||
public static final DomHighlightingHelperImpl INSTANCE = new DomHighlightingHelperImpl();
|
||||
private final GenericValueReferenceProvider myProvider = new GenericValueReferenceProvider();
|
||||
private final DomElementAnnotationsManagerImpl myAnnotationsManager;
|
||||
|
||||
public DomHighlightingHelperImpl(final DomElementAnnotationsManagerImpl annotationsManager) {
|
||||
myAnnotationsManager = annotationsManager;
|
||||
}
|
||||
private final DomApplicationComponent myDomApplicationComponent = DomApplicationComponent.getInstance();
|
||||
|
||||
public void runAnnotators(DomElement element, DomElementAnnotationHolder holder, Class<? extends DomElement> rootClass) {
|
||||
myAnnotationsManager.annotate(element, holder, rootClass);
|
||||
final DomElementsAnnotator annotator = myDomApplicationComponent.getAnnotator(rootClass);
|
||||
if (annotator != null) {
|
||||
annotator.annotate(element, holder);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.intellij.util.xml.DomElement;
|
||||
import com.intellij.util.xml.DomElementVisitor;
|
||||
import com.intellij.util.xml.DomFileDescription;
|
||||
import com.intellij.util.xml.TypeChooserManager;
|
||||
import com.intellij.util.xml.highlighting.DomElementsAnnotator;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -46,6 +47,14 @@ public class DomApplicationComponent {
|
||||
private final ImplementationClassCache myCachedImplementationClasses = new ImplementationClassCache();
|
||||
private final TypeChooserManager myTypeChooserManager = new TypeChooserManager();
|
||||
final ReflectionAssignabilityCache assignabilityCache = new ReflectionAssignabilityCache();
|
||||
private final FactoryMap<Class, DomElementsAnnotator> myClass2Annotator = new ConcurrentFactoryMap<Class, DomElementsAnnotator>() {
|
||||
|
||||
@Override
|
||||
protected DomElementsAnnotator create(Class key) {
|
||||
final DomFileDescription desc = findFileDescription(key);
|
||||
return desc == null ? null : desc.createAnnotator();
|
||||
}
|
||||
};
|
||||
|
||||
private final ConcurrentFactoryMap<Type, StaticGenericInfo> myGenericInfos = new ConcurrentFactoryMap<Type, StaticGenericInfo>() {
|
||||
@NotNull
|
||||
@@ -101,6 +110,28 @@ public class DomApplicationComponent {
|
||||
myTypeChooserManager.copyFrom(description.getTypeChooserManager());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private synchronized DomFileDescription findFileDescription(Class rootElementClass) {
|
||||
for (Set<DomFileDescription> descriptions : myRootTagName2FileDescription.values()) {
|
||||
for (DomFileDescription description : descriptions) {
|
||||
if (description.getRootElementClass() == rootElementClass) {
|
||||
return description;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (DomFileDescription description : myAcceptingOtherRootTagNamesDescriptions) {
|
||||
if (description.getRootElementClass() == rootElementClass) {
|
||||
return description;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public DomElementsAnnotator getAnnotator(Class rootElementClass) {
|
||||
return myClass2Annotator.get(rootElementClass);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
final Class<? extends DomElement> getImplementation(final Class concreteInterface) {
|
||||
//noinspection unchecked
|
||||
|
||||
@@ -5,7 +5,7 @@ package com.intellij.util.xml.impl;
|
||||
|
||||
import com.intellij.ide.startup.StartupManagerEx;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -18,6 +18,7 @@ import com.intellij.openapi.util.Factory;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.vfs.*;
|
||||
import com.intellij.openapi.vfs.newvfs.NewVirtualFile;
|
||||
import com.intellij.pom.PomManager;
|
||||
import com.intellij.pom.PomModel;
|
||||
import com.intellij.pom.PomModelAspect;
|
||||
import com.intellij.pom.event.PomModelEvent;
|
||||
@@ -39,9 +40,6 @@ import com.intellij.util.xml.events.DomEvent;
|
||||
import com.intellij.util.xml.events.ElementChangedEvent;
|
||||
import com.intellij.util.xml.events.ElementDefinedEvent;
|
||||
import com.intellij.util.xml.events.ElementUndefinedEvent;
|
||||
import com.intellij.util.xml.highlighting.DomElementAnnotationsManager;
|
||||
import com.intellij.util.xml.highlighting.DomElementAnnotationsManagerImpl;
|
||||
import com.intellij.util.xml.highlighting.DomElementsAnnotator;
|
||||
import com.intellij.util.xml.reflect.AbstractDomChildrenDescription;
|
||||
import com.intellij.util.xml.reflect.DomGenericInfo;
|
||||
import net.sf.cglib.proxy.AdvancedProxy;
|
||||
@@ -78,7 +76,6 @@ public final class DomManagerImpl extends DomManager {
|
||||
|
||||
private final Project myProject;
|
||||
private final DomApplicationComponent myApplicationComponent;
|
||||
private final DomElementAnnotationsManagerImpl myAnnotationsManager;
|
||||
private final PsiFileFactory myFileFactory;
|
||||
|
||||
private long myModificationCount;
|
||||
@@ -86,19 +83,12 @@ public final class DomManagerImpl extends DomManager {
|
||||
private final ProjectFileIndex myFileIndex;
|
||||
private final SemService mySemService;
|
||||
|
||||
public DomManagerImpl(final PomModel pomModel,
|
||||
final Project project, final PsiManager psiManager,
|
||||
final XmlAspect xmlAspect, final DomElementAnnotationsManager annotationsManager,
|
||||
final VirtualFileManager virtualFileManager,
|
||||
final StartupManager startupManager,
|
||||
final ProjectRootManager projectRootManager,
|
||||
final DomApplicationComponent applicationComponent,
|
||||
final ConverterManager converterManager, SemService semService) {
|
||||
public DomManagerImpl(final Project project, final XmlAspect xmlAspect) {
|
||||
myProject = project;
|
||||
mySemService = semService;
|
||||
myConverterManager = (ConverterManagerImpl)converterManager;
|
||||
myApplicationComponent = applicationComponent;
|
||||
myAnnotationsManager = (DomElementAnnotationsManagerImpl)annotationsManager;
|
||||
mySemService = SemService.getSemService(project);
|
||||
myConverterManager = (ConverterManagerImpl)ServiceManager.getService(ConverterManager.class);
|
||||
myApplicationComponent = DomApplicationComponent.getInstance();
|
||||
final PomModel pomModel = PomManager.getModel(project);
|
||||
pomModel.addModelListener(new PomModelListener() {
|
||||
public void modelChanged(PomModelEvent event) {
|
||||
final XmlChangeSet changeSet = (XmlChangeSet)event.getChangeSet(xmlAspect);
|
||||
@@ -116,6 +106,8 @@ public final class DomManagerImpl extends DomManager {
|
||||
|
||||
myFileFactory = PsiFileFactory.getInstance(project);
|
||||
|
||||
final PsiManager psiManager = PsiManager.getInstance(project);
|
||||
|
||||
final Runnable setupVfsListeners = new Runnable() {
|
||||
public void run() {
|
||||
final VirtualFileAdapter listener = new VirtualFileAdapter() {
|
||||
@@ -171,20 +163,18 @@ public final class DomManagerImpl extends DomManager {
|
||||
}
|
||||
}
|
||||
};
|
||||
virtualFileManager.addVirtualFileListener(listener, project);
|
||||
VirtualFileManager.getInstance().addVirtualFileListener(listener, project);
|
||||
}
|
||||
};
|
||||
|
||||
final StartupManager startupManager = StartupManager.getInstance(project);
|
||||
if (!((StartupManagerEx)startupManager).startupActivityPassed()) {
|
||||
startupManager.registerStartupActivity(setupVfsListeners);
|
||||
} else {
|
||||
setupVfsListeners.run();
|
||||
}
|
||||
|
||||
myFileIndex = projectRootManager.getFileIndex();
|
||||
|
||||
for (final DomFileDescription description : Extensions.getExtensions(DomFileDescription.EP_NAME)) {
|
||||
_registerFileDescription(description);
|
||||
}
|
||||
myFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
}
|
||||
|
||||
private void processVfsChange(final VirtualFile file) {
|
||||
@@ -478,19 +468,9 @@ public final class DomManagerImpl extends DomManager {
|
||||
}
|
||||
|
||||
public final void registerFileDescription(final DomFileDescription description) {
|
||||
_registerFileDescription(description);
|
||||
|
||||
myApplicationComponent.registerFileDescription(description);
|
||||
}
|
||||
|
||||
private void _registerFileDescription(final DomFileDescription description) {
|
||||
mySemService.clearCache();
|
||||
|
||||
final DomElementsAnnotator annotator = description.createAnnotator();
|
||||
if (annotator != null) {
|
||||
//noinspection unchecked
|
||||
myAnnotationsManager.registerDomElementsAnnotator(annotator, description.getRootElementClass());
|
||||
}
|
||||
myApplicationComponent.registerFileDescription(description);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user