From 788c16015fb0cd37e6b15b83fcb13acc3a146b23 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 7 Feb 2019 13:37:13 +0100 Subject: [PATCH] clean up & remove dead code around MetaDataRegistrar --- .../impl/compiled/ClsTypeParameterImpl.java | 6 - .../intellij/psi/meta/MetaDataRegistrar.java | 12 -- .../intellij/psi/impl/meta/MetaRegistry.java | 96 +++------------- .../psi/impl/meta/MetaRegistryTest.java | 104 ------------------ .../intellij/util/xml/DomPerformanceTest.java | 4 - 5 files changed, 17 insertions(+), 205 deletions(-) delete mode 100644 platform/platform-tests/testSrc/com/intellij/psi/impl/meta/MetaRegistryTest.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsTypeParameterImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsTypeParameterImpl.java index e994383aa934..d7e85d143231 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsTypeParameterImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsTypeParameterImpl.java @@ -23,11 +23,9 @@ import com.intellij.psi.impl.PsiSuperMethodImplUtil; import com.intellij.psi.impl.java.stubs.JavaStubElementTypes; import com.intellij.psi.impl.java.stubs.PsiTypeParameterStub; import com.intellij.psi.impl.light.LightEmptyImplementsList; -import com.intellij.psi.impl.meta.MetaRegistry; import com.intellij.psi.impl.source.SourceTreeToPsiMap; import com.intellij.psi.impl.source.tree.TreeElement; import com.intellij.psi.javadoc.PsiDocComment; -import com.intellij.psi.meta.PsiMetaData; import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.search.SearchScope; import com.intellij.psi.util.PsiUtil; @@ -349,10 +347,6 @@ public class ClsTypeParameterImpl extends ClsRepositoryPsiElement void registerMetaData( ElementFilter filter, Class metadataDescriptorClass); - /** - * Associates elements matching given filter with metadata class. - * @param pattern on element for finding metadata matches - * @param metadataDescriptorClass class of metadata, should be instantiable without parameters - */ - public abstract void registerMetaData( - ElementPattern pattern, Supplier metadataDescriptorClass); public static MetaDataRegistrar getInstance() { return ServiceManager.getService(MetaDataRegistrar.class); diff --git a/platform/core-impl/src/com/intellij/psi/impl/meta/MetaRegistry.java b/platform/core-impl/src/com/intellij/psi/impl/meta/MetaRegistry.java index 4411caf29dbf..a6a09f6b260d 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/meta/MetaRegistry.java +++ b/platform/core-impl/src/com/intellij/psi/impl/meta/MetaRegistry.java @@ -2,20 +2,13 @@ package com.intellij.psi.impl.meta; -import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicatorProvider; -import com.intellij.openapi.util.Disposer; -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.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.psi.util.CachedValuesManager; import com.intellij.util.ArrayUtil; @@ -32,45 +25,10 @@ public class MetaRegistry extends MetaDataRegistrar { private static final List ourBindings = ContainerUtil.createLockFreeCopyOnWriteList(); private static volatile boolean ourContributorsLoaded; - private static final Key> META_DATA_KEY = Key.create("META DATA KEY"); - - public static void bindDataToElement(final PsiElement element, final PsiMetaData data) { - CachedValue value = - CachedValuesManager.getManager(element.getProject()).createCachedValue(() -> { - data.init(element); - return new CachedValueProvider.Result<>(data, data.getDependencies()); - }); - element.putUserData(META_DATA_KEY, value); - } - public static PsiMetaData getMeta(final PsiElement element) { return getMetaBase(element); } - private static final UserDataCache, PsiElement, Object> ourCachedMetaCache = - new UserDataCache, PsiElement, Object>() { - @Override - protected CachedValue compute(final PsiElement element, Object p) { - return CachedValuesManager.getManager(element.getProject()).createCachedValue(() -> { - ensureContributorsLoaded(); - for (final MyBinding binding : ourBindings) { - if (binding.myFilter.isClassAcceptable(element.getClass()) && binding.myFilter.isAcceptable(element, element.getParent())) { - final PsiMetaData data = binding.myDataClass.get(); - data.init(element); - Object[] dependences = data.getDependencies(); - for (Object dependence : dependences) { - if (dependence == null) { - LOG.error(data + "(" + binding.myDataClass + ") provided null dependency"); - } - } - return new CachedValueProvider.Result<>(data, ArrayUtil.append(dependences, element)); - } - } - return new CachedValueProvider.Result<>(null, element); - }, false); - } - }; - private static void ensureContributorsLoaded() { if (!ourContributorsLoaded) { synchronized (ourBindings) { @@ -85,42 +43,27 @@ public class MetaRegistry extends MetaDataRegistrar { } @Nullable - public static PsiMetaData getMetaBase(final PsiElement element) { + public static PsiMetaData getMetaBase(PsiElement element) { ProgressIndicatorProvider.checkCanceled(); - return ourCachedMetaCache.get(META_DATA_KEY, element, null).getValue(); - } - - /** - * @see com.intellij.psi.meta.MetaDataContributor - * @deprecated - */ - @Deprecated - static void addMetadataBinding(ElementFilter filter, - Supplier aMetadataClass, - Disposable parentDisposable) { - final MyBinding binding = new MyBinding(filter, aMetadataClass); - addBinding(binding); - Disposer.register(parentDisposable, new Disposable() { - @Override - public void dispose() { - ourBindings.remove(binding); + return CachedValuesManager.getCachedValue(element, () -> { + ensureContributorsLoaded(); + for (final MyBinding binding : ourBindings) { + if (binding.myFilter.isClassAcceptable(element.getClass()) && binding.myFilter.isAcceptable(element, element.getParent())) { + PsiMetaData data = binding.myDataClass.get(); + data.init(element); + Object[] dependencies = data.getDependencies(); + for (Object dependence : dependencies) { + if (dependence == null) { + LOG.error(data + "(" + binding.myDataClass + ") provided null dependency"); + } + } + return new CachedValueProvider.Result<>(data, ArrayUtil.append(dependencies, element)); + } } + return new CachedValueProvider.Result<>(null, element); }); } - /** - * @see com.intellij.psi.meta.MetaDataContributor - * @deprecated - */ - @Deprecated - public static void addMetadataBinding(ElementFilter filter, Supplier aMetadataClass) { - addBinding(new MyBinding(filter, aMetadataClass)); - } - - private static void addBinding(final MyBinding binding) { - ourBindings.add(0, binding); - } - @Override public void registerMetaData(ElementFilter filter, Class metadataDescriptorClass) { Supplier supplier = ()-> { @@ -132,12 +75,7 @@ public class MetaRegistry extends MetaDataRegistrar { } return null; }; - addMetadataBinding(filter, supplier); - } - - @Override - public void registerMetaData(ElementPattern pattern, Supplier metadataDescriptorClass) { - addMetadataBinding(new PatternFilter(pattern), metadataDescriptorClass); + ourBindings.add(0, new MyBinding(filter, supplier)); } private static class MyBinding { diff --git a/platform/platform-tests/testSrc/com/intellij/psi/impl/meta/MetaRegistryTest.java b/platform/platform-tests/testSrc/com/intellij/psi/impl/meta/MetaRegistryTest.java deleted file mode 100644 index 4a38831d1887..000000000000 --- a/platform/platform-tests/testSrc/com/intellij/psi/impl/meta/MetaRegistryTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2000-2016 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.psi.impl.meta; - -import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.psi.PsiElement; -import com.intellij.psi.filters.ElementFilter; -import com.intellij.psi.meta.PsiMetaData; -import com.intellij.psi.xml.XmlFile; -import com.intellij.psi.xml.XmlTag; -import com.intellij.testFramework.LightPlatformTestCase; -import com.intellij.testFramework.UsefulTestCase; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -/** -* @author peter -*/ -public class MetaRegistryTest extends LightPlatformTestCase { - public void testChangingMetaData() { - final boolean[] flag = {false}; - MetaRegistry.addMetadataBinding(new ElementFilter() { - @Override - public boolean isAcceptable(Object element, PsiElement context) { - return flag[0]; - } - - @Override - public boolean isClassAcceptable(Class hintClass) { - return true; - } - }, MyTrueMetaData::new, getTestRootDisposable()); - MetaRegistry.addMetadataBinding(new ElementFilter() { - @Override - public boolean isAcceptable(Object element, PsiElement context) { - return !flag[0]; - } - - @Override - public boolean isClassAcceptable(Class hintClass) { - return true; - } - }, MyFalseMetaData::new, getTestRootDisposable()); - - final XmlTag tag = ((XmlFile)LightPlatformTestCase.createFile("a.xml", "")).getDocument().getRootTag(); - UsefulTestCase.assertInstanceOf(tag.getMetaData(), MyFalseMetaData.class); - flag[0] = true; - WriteCommandAction.runWriteCommandAction(LightPlatformTestCase.getProject(), () -> { - tag.setName("b"); - }); - UsefulTestCase.assertInstanceOf(tag.getMetaData(), MyTrueMetaData.class); - } - - public static class MyAbstractMetaData implements PsiMetaData { - private PsiElement myDeclaration; - - @Override - public PsiElement getDeclaration() { - return myDeclaration; - } - - @NotNull - @Override - public Object[] getDependencies() { - return new Object[]{myDeclaration}; - } - - @Override - @NonNls - public String getName() { - return null; - } - - @Override - @NonNls - public String getName(PsiElement context) { - return null; - } - - @Override - public void init(PsiElement element) { - myDeclaration = element; - } - - } - - public static class MyTrueMetaData extends MyAbstractMetaData {} - public static class MyFalseMetaData extends MyAbstractMetaData {} - -} diff --git a/xml/dom-tests/tests/com/intellij/util/xml/DomPerformanceTest.java b/xml/dom-tests/tests/com/intellij/util/xml/DomPerformanceTest.java index 1eba16506680..783e338341ac 100644 --- a/xml/dom-tests/tests/com/intellij/util/xml/DomPerformanceTest.java +++ b/xml/dom-tests/tests/com/intellij/util/xml/DomPerformanceTest.java @@ -24,11 +24,9 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.impl.PsiManagerImpl; -import com.intellij.psi.impl.meta.MetaRegistry; import com.intellij.psi.xml.XmlFile; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.util.ThrowableRunnable; -import com.intellij.xml.impl.dtd.XmlNSDescriptorImpl; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -42,8 +40,6 @@ public class DomPerformanceTest extends DomHardCoreTestCase { public void testVisitorPerformance() { final MyElement element = createElement("", MyElement.class); - MetaRegistry.bindDataToElement(DomUtil.getFile(element).getDocument(), new XmlNSDescriptorImpl()); - final MyElement child = element.addChildElement(); child.getAttr().setValue("239"); child.getChild239().getAttr().setValue("42");