package jetbrains.mps.smodel.search; /*Generated by MPS */ import jetbrains.mps.cache.AbstractCache; import jetbrains.mps.cache.KeyProducer; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import jetbrains.mps.cache.CachesManager; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.annotations.NotNull; import java.util.Set; import org.jetbrains.mps.openapi.model.SModel; import java.util.HashSet; import java.util.List; /** * * Should be thread safe. */ /*package*/ class ConceptAndSuperConceptsCache extends AbstractCache { private static final KeyProducer keyProducer = new KeyProducer(); private static final Logger LOG = LogManager.getLogger(ConceptAndSuperConceptsCache.class); private static final CachesManager.CacheCreator<SNode> CREATOR = new CachesManager.CacheCreator<SNode>() { @Override public AbstractCache create(Object key, SNode element) { return new ConceptAndSuperConceptsCache(key, element); } }; @NotNull private SNode myTopConcept; protected ConceptAndSuperConceptsCache(Object key, SNode topConcept) { super(key); myTopConcept = topConcept; } @Override public Set<SModel> getDependsOnModels(Object element) { Set<SModel> dependsOnModel = new HashSet<SModel>(); for (SNode concept : getConcepts()) { // http://youtrack.jetbrains.net/issue/MPS-8362 // http://youtrack.jetbrains.net/issue/MPS-8556 SModel descriptor = concept.getModel(); assert descriptor != null; dependsOnModel.add(descriptor); } return dependsOnModel; } @NotNull public SNode getTopConcept() { return myTopConcept; } public SNode[] getConcepts() { Datasets.ConceptsDataSet dataSet = (Datasets.ConceptsDataSet) getDataSet(Datasets.ConceptsDataSet.ID, Datasets.CONCEPTS_CACHE_CREATOR); return dataSet.getConcepts(); } public SNode getPropertyDeclarationByName(String name) { Datasets.PropertyDeclarationsDataSet dataSet = (Datasets.PropertyDeclarationsDataSet) getDataSet(Datasets.PropertyDeclarationsDataSet.ID, Datasets.PROPDECL_CACHE_CREATOR); return dataSet.getPropertyDeclarationByName(name); } public List<SNode> getPropertyDeclarations() { Datasets.PropertyDeclarationsDataSet dataSet = (Datasets.PropertyDeclarationsDataSet) getDataSet(Datasets.PropertyDeclarationsDataSet.ID, Datasets.PROPDECL_CACHE_CREATOR); return dataSet.getPropertyDeclarations(); } public SNode getLinkDeclarationByRole(String role) { Datasets.LinkDeclarationsDataSet dataSet = (Datasets.LinkDeclarationsDataSet) getDataSet(Datasets.LinkDeclarationsDataSet.ID, Datasets.LINKDECL_CACHE_CREATOR); return dataSet.getLinkDeclarationByRole(role); } public SNode getMostSpecificLinkDeclarationByRole(String role) { Datasets.LinkDeclarationsDataSet dataSet = (Datasets.LinkDeclarationsDataSet) getDataSet(Datasets.LinkDeclarationsDataSet.ID, Datasets.LINKDECL_CACHE_CREATOR); return dataSet.getMostSpecificLinkDeclarationByRole(role); } public List<SNode> getLinkDeclarationsExcludingOverridden() { Datasets.LinkDeclarationsDataSet dataSet = (Datasets.LinkDeclarationsDataSet) getDataSet(Datasets.LinkDeclarationsDataSet.ID, Datasets.LINKDECL_CACHE_CREATOR); return dataSet.getLinkDeclarationsExcludingOverridden(); } public static ConceptAndSuperConceptsCache getInstance(SNode topConcept) { if (topConcept == null) { return null; } Object key = keyProducer.createKey(topConcept); return (ConceptAndSuperConceptsCache) CachesManager.getInstance().getCache(key, topConcept, CREATOR); } }