mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
decoupling CachedValueManager from PSI
This commit is contained in:
+2
-2
@@ -10,8 +10,8 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.ModificationTracker;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.ParameterizedCachedValueImpl;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.impl.PsiParameterizedCachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.ParameterizedCachedValue;
|
||||
import com.intellij.psi.util.ParameterizedCachedValueProvider;
|
||||
@@ -123,7 +123,7 @@ public class JavaConcatenationInjectorManager implements ProjectComponent, Modif
|
||||
if (registrar.result != null) {
|
||||
// store this everywhere
|
||||
ParameterizedCachedValue<Places, PsiElement> cachedValue = context.getManager().getCachedValuesManager().createParameterizedCachedValue(this, false);
|
||||
((ParameterizedCachedValueImpl<Places, PsiElement>)cachedValue).setValue(result);
|
||||
((PsiParameterizedCachedValue<Places, PsiElement>)cachedValue).setValue(result);
|
||||
|
||||
for (PsiElement operand : operands) {
|
||||
operand.putUserData(INJECTED_PSI_IN_CONCATENATION, cachedValue);
|
||||
|
||||
@@ -150,6 +150,8 @@ public abstract class PsiManager extends UserDataHolderBase {
|
||||
* which are automatically recalculated based on changes of the elements on which they depend.
|
||||
*
|
||||
* @return the cached values manager instance.
|
||||
* @deprecated
|
||||
* @see CachedValuesManager#getManager(com.intellij.openapi.project.Project)
|
||||
*/
|
||||
@NotNull
|
||||
public abstract CachedValuesManager getCachedValuesManager();
|
||||
|
||||
@@ -17,7 +17,6 @@ package com.intellij.psi.meta;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
/**
|
||||
@@ -39,7 +38,7 @@ public interface PsiMetaData {
|
||||
|
||||
/**
|
||||
* @return objects this meta data depends on.
|
||||
* @see CachedValue
|
||||
* @see com.intellij.psi.util.CachedValue
|
||||
*/
|
||||
Object[] getDependences();
|
||||
}
|
||||
|
||||
@@ -14,9 +14,9 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.util.SmartList;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -9,10 +9,7 @@ import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.impl.CachedValuesManagerImpl;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.impl.PsiModificationTrackerImpl;
|
||||
import com.intellij.psi.impl.PsiTreeChangeEventImpl;
|
||||
import com.intellij.psi.impl.*;
|
||||
import com.intellij.psi.impl.cache.CacheManager;
|
||||
import com.intellij.psi.impl.cache.impl.CompositeCacheManager;
|
||||
import com.intellij.psi.impl.file.impl.FileManager;
|
||||
@@ -24,6 +21,7 @@ import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.ThrowableRunnable;
|
||||
import com.intellij.util.CachedValuesManagerImpl;
|
||||
import gnu.trove.THashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -112,7 +110,7 @@ public class MockPsiManager extends PsiManagerEx {
|
||||
@NotNull
|
||||
public CachedValuesManager getCachedValuesManager() {
|
||||
if (myCachedValuesManager == null) {
|
||||
myCachedValuesManager = new CachedValuesManagerImpl(this);
|
||||
myCachedValuesManager = new CachedValuesManagerImpl(myProject, new PsiCachedValuesFactory(this));
|
||||
}
|
||||
return myCachedValuesManager;
|
||||
}
|
||||
@@ -234,4 +232,4 @@ public class MockPsiManager extends PsiManagerEx {
|
||||
public CacheManager getCacheManager() {
|
||||
return myCompositeCacheManager;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,4 +51,4 @@ public class PsiCachedValuesFactory implements CachedValuesFactory {
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.NotNullLazyValue;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileFilter;
|
||||
import com.intellij.psi.*;
|
||||
@@ -64,7 +65,13 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent {
|
||||
private final CacheManager myCacheManager;
|
||||
private final PsiModificationTrackerImpl myModificationTracker;
|
||||
private final ResolveCache myResolveCache;
|
||||
private final CachedValuesManager myCachedValuesManager;
|
||||
private final NotNullLazyValue<CachedValuesManager> myCachedValuesManager = new NotNullLazyValue<CachedValuesManager>() {
|
||||
@NotNull
|
||||
@Override
|
||||
protected CachedValuesManager compute() {
|
||||
return CachedValuesManager.getManager(myProject);
|
||||
}
|
||||
};
|
||||
|
||||
private final List<PsiTreeChangePreprocessor> myTreeChangePreprocessors = ContainerUtil.createEmptyCOWList();
|
||||
private final List<PsiTreeChangeListener> myTreeChangeListeners = ContainerUtil.createEmptyCOWList();
|
||||
@@ -119,7 +126,6 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent {
|
||||
myModificationTracker = new PsiModificationTrackerImpl(myProject);
|
||||
myTreeChangePreprocessors.add(myModificationTracker);
|
||||
myResolveCache = new ResolveCache(this);
|
||||
myCachedValuesManager = new CachedValuesManagerImpl(this);
|
||||
|
||||
if (startupManager != null) {
|
||||
((StartupManagerEx)startupManager).registerPreStartupActivity(
|
||||
@@ -695,7 +701,7 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent {
|
||||
|
||||
@NotNull
|
||||
public CachedValuesManager getCachedValuesManager() {
|
||||
return myCachedValuesManager;
|
||||
return myCachedValuesManager.getValue();
|
||||
}
|
||||
|
||||
public void moveDirectory(@NotNull final PsiDirectory dir, @NotNull PsiDirectory newParent) throws IncorrectOperationException {
|
||||
|
||||
@@ -61,4 +61,4 @@ public abstract class PsiParameterizedCachedValue<T,P> extends PsiCachedValue<T>
|
||||
public ParameterizedCachedValueProvider<T,P> getValueProvider() {
|
||||
return myProvider;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ import com.intellij.psi.util.ParameterizedCachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -8,13 +8,13 @@ import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.UserDataCache;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.filters.position.PatternFilter;
|
||||
import com.intellij.psi.meta.MetaDataContributor;
|
||||
import com.intellij.psi.meta.MetaDataRegistrar;
|
||||
import com.intellij.psi.meta.PsiMetaData;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
+2
-2
@@ -9,10 +9,10 @@ import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.util.Function;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
+2
-2
@@ -16,9 +16,9 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.ParameterizedCachedValueImpl;
|
||||
import com.intellij.psi.impl.PsiDocumentManagerImpl;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.impl.PsiParameterizedCachedValue;
|
||||
import com.intellij.psi.impl.source.DummyHolder;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
@@ -196,7 +196,7 @@ public class InjectedLanguageUtil {
|
||||
ParameterizedCachedValue<Places, PsiElement> cachedValue = psiManager.getCachedValuesManager().createParameterizedCachedValue(INJECTED_PSI_PROVIDER, false);
|
||||
Document hostDocument = hostPsiFile.getViewProvider().getDocument();
|
||||
CachedValueProvider.Result<Places> result = new CachedValueProvider.Result<Places>(places, PsiModificationTracker.MODIFICATION_COUNT, hostDocument);
|
||||
((ParameterizedCachedValueImpl<Places, PsiElement>)cachedValue).setValue(result);
|
||||
((PsiParameterizedCachedValue<Places, PsiElement>)cachedValue).setValue(result);
|
||||
current.putUserData(INJECTED_PSI_KEY, cachedValue);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
/*
|
||||
* Copyright 2000-2007 JetBrains s.r.o.
|
||||
* 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
|
||||
* 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
|
||||
* 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.
|
||||
* 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.psi.util;
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
/*
|
||||
* Copyright 2000-2007 JetBrains s.r.o.
|
||||
* 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
|
||||
* 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
|
||||
* 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.
|
||||
* 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.psi.util;
|
||||
|
||||
|
||||
@@ -25,4 +25,4 @@ public interface ParameterizedCachedValue<T, P> {
|
||||
ParameterizedCachedValueProvider<T,P> getValueProvider();
|
||||
|
||||
boolean hasUpToDateValue();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -20,4 +20,4 @@ import org.jetbrains.annotations.Nullable;
|
||||
public interface ParameterizedCachedValueProvider<T, P> {
|
||||
@Nullable
|
||||
CachedValueProvider.Result<T> compute(P param);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
package com.intellij.util;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.ModificationTracker;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.reference.SoftReference;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.TimedReference;
|
||||
import com.intellij.util.concurrency.JBLock;
|
||||
import com.intellij.util.concurrency.JBReentrantReadWriteLock;
|
||||
import com.intellij.util.concurrency.LockFactory;
|
||||
@@ -158,6 +157,9 @@ public abstract class CachedValueBase<T> {
|
||||
if (dependency instanceof ModificationTracker) {
|
||||
return ((ModificationTracker)dependency).getModificationCount();
|
||||
}
|
||||
if (dependency instanceof Document) {
|
||||
return ((Document)dependency).getModificationStamp();
|
||||
}
|
||||
else {
|
||||
LOG.error("Wrong dependency type: " + dependency.getClass());
|
||||
return -1;
|
||||
|
||||
@@ -10,7 +10,6 @@ package com.intellij.util;
|
||||
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.util.CachedValueBase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ package com.intellij.util;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.ParameterizedCachedValue;
|
||||
import com.intellij.psi.util.ParameterizedCachedValueProvider;
|
||||
import com.intellij.util.CachedValueBase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
||||
@@ -140,6 +140,9 @@
|
||||
serviceImplementation="com.intellij.pom.core.impl.PomModelImpl"/>
|
||||
<projectService serviceInterface="com.intellij.psi.impl.include.FileIncludeManager"
|
||||
serviceImplementation="com.intellij.psi.impl.include.FileIncludeManagerImpl"/>
|
||||
<projectService serviceInterface="com.intellij.util.CachedValuesFactory"
|
||||
serviceImplementation="com.intellij.psi.impl.PsiCachedValuesFactory"/>
|
||||
|
||||
|
||||
<projectService serviceInterface="com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable"
|
||||
serviceImplementation="com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable"/>
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
<extensionPoint name="projectUndoProvider" interface="com.intellij.openapi.command.impl.UndoProvider"
|
||||
area="IDEA_PROJECT"/>
|
||||
|
||||
<extensionPoint name="cachedValuesFactory" interface="com.intellij.util.CachedValuesFactory" area="IDEA_PROJECT"/>
|
||||
|
||||
<extensionPoint name="syntaxHighlighter"
|
||||
beanClass="com.intellij.openapi.extensions.KeyedFactoryEPBean"/>
|
||||
|
||||
|
||||
@@ -114,6 +114,9 @@
|
||||
|
||||
<projectService serviceInterface="com.intellij.openapi.project.DumbService" serviceImplementation="com.intellij.openapi.project.DumbServiceImpl"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.psi.util.CachedValuesManager"
|
||||
serviceImplementation="com.intellij.util.CachedValuesManagerImpl"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.openapi.vcs.impl.projectlevelman.AllVcsesI"
|
||||
serviceImplementation="com.intellij.openapi.vcs.impl.projectlevelman.AllVcses"/>
|
||||
|
||||
|
||||
+1
-6
@@ -22,7 +22,6 @@ import com.intellij.profile.Profile;
|
||||
import com.intellij.profile.ProfileChangeAdapter;
|
||||
import com.intellij.profile.codeInspection.InspectionProfileManager;
|
||||
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
@@ -99,11 +98,7 @@ public class DomElementAnnotationsManagerImpl extends DomElementAnnotationsManag
|
||||
private final ProjectRootManager myProjectRootManager;
|
||||
private final CachedValuesManager myCachedValuesManager;
|
||||
private long myModificationCount;
|
||||
|
||||
public DomElementAnnotationsManagerImpl(Project project, InspectionProfileManager manager, ProjectRootManager projectRootManager,
|
||||
PsiManager psiManager) {
|
||||
this(project, manager, projectRootManager, psiManager.getCachedValuesManager());
|
||||
}
|
||||
|
||||
public DomElementAnnotationsManagerImpl(Project project, final InspectionProfileManager inspectionProfileManager, ProjectRootManager projectRootManager,
|
||||
final CachedValuesManager cachedValuesManager) {
|
||||
myCachedValuesManager = cachedValuesManager;
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.intellij.pom.impl.PomTransactionBase;
|
||||
import com.intellij.pom.xml.XmlAspect;
|
||||
import com.intellij.pom.xml.impl.events.XmlDocumentChangedImpl;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.CachedValueImpl;
|
||||
import com.intellij.psi.impl.PsiCachedValueImpl;
|
||||
import com.intellij.psi.impl.meta.MetaRegistry;
|
||||
import com.intellij.psi.impl.source.html.dtd.HtmlNSDescriptorImpl;
|
||||
import com.intellij.psi.impl.source.tree.TreeElement;
|
||||
@@ -133,7 +133,7 @@ public class XmlDocumentImpl extends XmlElementImpl implements XmlDocument {
|
||||
|
||||
CachedValue<XmlNSDescriptor> cachedValue = defaultDescriptorsCache.get(namespace);
|
||||
if (cachedValue == null) {
|
||||
defaultDescriptorsCache.put(namespace, cachedValue = new CachedValueImpl<XmlNSDescriptor>(getManager(), new CachedValueProvider<XmlNSDescriptor>() {
|
||||
defaultDescriptorsCache.put(namespace, cachedValue = new PsiCachedValueImpl<XmlNSDescriptor>(getManager(), new CachedValueProvider<XmlNSDescriptor>() {
|
||||
public Result<XmlNSDescriptor> compute() {
|
||||
final XmlNSDescriptor defaultNSDescriptorInner = getDefaultNSDescriptorInner(namespace, strict);
|
||||
|
||||
@@ -145,7 +145,7 @@ public class XmlDocumentImpl extends XmlElementImpl implements XmlDocument {
|
||||
? defaultNSDescriptorInner.getDependences()
|
||||
: ExternalResourceManager.getInstance());
|
||||
}
|
||||
}, false));
|
||||
}));
|
||||
}
|
||||
return cachedValue.getValue();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user