Class SModel
- java.lang.Object
 - 
- jetbrains.mps.smodel.SModel
 
 
- 
- All Implemented Interfaces:
 SModelData,UpdateModeSupport
- Direct Known Subclasses:
 CustomPersistenceSModel.StubModel,DefaultSModel,SnapshotModelData
public class SModel extends Object implements SModelData, UpdateModeSupport
A generalmodel dataimplementation which (!) does not implementSModel. Foropenapi.SModelimplementations see subclasses ofSModelBase.This is all-purpose model data implementation designed to back up an API representative aka 'model descriptor'. Can work with any
openapi.SModeldescriptor, although be careful to use propersetModelDescriptor(org.jetbrains.mps.openapi.model.SModel, ModelEventDispatch)method to make sure node events get dispatched with proper model descriptor.Generally, it is pure storage and shall not dispatch events, though still does this for legacy
SModelListenerevents. Note, it does that only in case associated model descriptor isSModelDescriptorStub.There's no synchronization nor
model accesscontrol, it's left up to discretion of a holding model descriptor. 
- 
- 
Nested Class Summary
Nested Classes Modifier and Type Class Description static classSModel.ImportElement 
- 
Constructor Summary
Constructors Constructor Description SModel(SModelReference modelReference)SModel(SModelReference modelReference, INodeIdToNodeMap map) 
- 
Method Summary
- 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait 
- 
Methods inherited from interface jetbrains.mps.extapi.model.SModelData
getModelName 
 - 
 
 - 
 
- 
- 
Constructor Detail
- 
SModel
public SModel(@NotNull SModelReference modelReference)
 
- 
SModel
public SModel(@NotNull SModelReference modelReference, INodeIdToNodeMap map)
 
 - 
 
- 
Method Detail
- 
generateUniqueId
public static SNodeId generateUniqueId()
 
- 
getModelId
public SModelId getModelId()
- Specified by:
 getModelIdin interfaceSModelData
 
- 
getReference
@NotNull public SModelReference getReference()
- Specified by:
 getReferencein interfaceSModelData
 
- 
getRootNodes
public Iterable<SNode> getRootNodes()
- Specified by:
 getRootNodesin interfaceSModelData
 
- 
addRootNode
public void addRootNode(SNode node)
- Specified by:
 addRootNodein interfaceSModelData
 
- 
removeRootNode
public void removeRootNode(SNode node)
- Specified by:
 removeRootNodein interfaceSModelData
 
- 
getNode
@Nullable public SNode getNode(@NotNull SNodeId nodeId)
- Specified by:
 getNodein interfaceSModelData
 
- 
waitUpdateModeIsOver
protected final void waitUpdateModeIsOver()
 
- 
isDisposed
public boolean isDisposed()
 
- 
getDisposedStacktrace
public StackTraceElement[] getDisposedStacktrace()
 
- 
getModelDescriptor
public final SModel getModelDescriptor()
 
- 
setModelDescriptor
public void setModelDescriptor(@Nullable SModel modelDescriptor, @Nullable ModelEventDispatch eventDispatch)
Tells this model data implementation is bound to specific model descriptor and uses a supplied mechanism to dispatch events. This method is intended for use bymodel descriptorimplementations only.- Parameters:
 modelDescriptor-eventDispatch- generally, non-null value makes sense only whenmodelDescriptoris not null as well.
 
- 
enforceFullLoad
protected void enforceFullLoad()
 
- 
performUndoableAction
protected void performUndoableAction(@NotNull SNodeUndoableAction action)
Name clash withSNodeOwner.performUndoableAction(org.jetbrains.mps.openapi.model.SNode, SNodeUndoableAction)is unfortunate. This one is rather 'registerActionWithUndo'. 
- 
canFireEvent
public boolean canFireEvent()
 
- 
canFireReadEvent
public boolean canFireReadEvent()
 
- 
dispose
public void dispose()
Make this SModelData unusable, free references to nodes hold to get them available to GC. Doesn't dispatch any event (it's responsibility of openapi.SModel impl). Disconnects from openapi.SModel descriptor, if any. XXX At the moment, doesn't change owner of nodes to DetachedNodeOwner, though it seems it should. The only objection is that doing so would trigger a lot of unregister events we don't really care to get. 
- 
createFastNodeFinder
public FastNodeFinder createFastNodeFinder()
 
- 
usedLanguages
public Collection<SLanguage> usedLanguages()
 
- 
getLanguageImportVersion
public int getLanguageImportVersion(SLanguage lang)
 
- 
setLanguageImportVersion
public void setLanguageImportVersion(SLanguage language, int version)
 
- 
importedDevkits
public List<SModuleReference> importedDevkits()
 
- 
addDevKit
public void addDevKit(SModuleReference ref)
 
- 
deleteDevKit
public void deleteDevKit(@NotNull SModuleReference ref)
 
- 
importedModels
public List<SModel.ImportElement> importedModels()
 
- 
addModelImport
public void addModelImport(SModel.ImportElement importElement)
 
- 
deleteModelImport
public void deleteModelImport(SModel.ImportElement importElement)
 
- 
getImplicitImportsSupport
@NotNull public ImplicitImportsLegacyHolder getImplicitImportsSupport()
This is compatibility method with legacy persistence mechanism, unless used, no implicit imports are tracked. Drop once we no longer need to support serialization of old persistence formats (there's no reason to track implicit imports if we aren't going to serialize them afterwards)It looks that there's no longer consumer of implicit imports. There's code to update them, but no code to read values, except for clients of #getAllImportElements()
 
- 
engagedOnGenerationLanguages
@Deprecated public List<SModuleReference> engagedOnGenerationLanguages()
Deprecated.though it's our internal API, there's 1 use in mbeddr of this exact method we need to fix first. Once mbeddr use and 2 uses in our model persistence gone, remove the method 
- 
getLanguagesEngagedOnGeneration
public Collection<SLanguage> getLanguagesEngagedOnGeneration()
 
- 
addEngagedOnGenerationLanguage
public void addEngagedOnGenerationLanguage(SLanguage ref)
 
- 
removeEngagedOnGenerationLanguage
public void removeEngagedOnGenerationLanguage(SLanguage ref)
 
- 
isUpdateMode
public boolean isUpdateMode()
update mode means we are attaching newly loaded children 
- 
enterUpdateMode
public void enterUpdateMode()
- Specified by:
 enterUpdateModein interfaceUpdateModeSupport
 
- 
leaveUpdateMode
public void leaveUpdateMode()
- Specified by:
 leaveUpdateModein interfaceUpdateModeSupport
 
- 
getRepository
protected SRepository getRepository()
 
- 
updateExternalReferences
public boolean updateExternalReferences(@NotNull SRepository repository)
 
- 
changeModelReference
public void changeModelReference(SModelReference newModelReference)
 
- 
createEmptyCopy
public SModel createEmptyCopy()
 
- 
copyPropertiesTo
public void copyPropertiesTo(SModel to)
 
 - 
 
 -