@Nullable
<T> ModelView<? extends T> asReadOnly(ModelType<T> type, @Nullable ModelRuleDescriptor ruleDescriptor);
MutableModelNode addLink(String name, ModelRuleDescriptor descriptor, ModelPromise promise, ModelAdapter adapter);
MutableModelNode addLink(ModelCreator creator);
void removeLink(String name);
<BUG><T> void mutateAllLinks(MutationType type, ModelMutator<T> mutator);
@Nullable</BUG>
MutableModelNode getLink(String name);
boolean hasLink(String name);
<T> void setPrivateData(ModelType<T> type, T object);

@Nullable
<T> ModelView<? extends T> asWritable(ModelType<T> type, ModelRuleDescriptor ruleDescriptor, @Nullable Inputs inputs);
@Nullable
<T> ModelView<? extends T> asReadOnly(ModelType<T> type, @Nullable ModelRuleDescriptor ruleDescriptor);
MutableModelNode addLink(String name, ModelRuleDescriptor descriptor, ModelPromise promise, ModelAdapter adapter);
MutableModelNode addLink(ModelCreator creator);
void removeLink(String name);
<T> void mutateAllLinks(MutationType type, ModelMutator<T> mutator);
<T> void mutateLink(MutationType type, ModelMutator<T> mutator);
@Nullable
MutableModelNode getLink(String name);
boolean hasLink(String name);
<T> void setPrivateData(ModelType<T> type, T object);
