/* * Copyright 2003-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 jetbrains.mps.smodel; import jetbrains.mps.extapi.model.ModelWithDisposeInfo; import jetbrains.mps.smodel.event.SModelListener; import jetbrains.mps.util.annotation.ToRemove; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.language.SLanguage; import org.jetbrains.mps.openapi.model.SModelReference; import org.jetbrains.mps.openapi.module.SModuleReference; import org.jetbrains.mps.openapi.module.SRepository; import java.util.Collection; import java.util.List; /** * Provisional interface our openapi.SModel implementations shall provide in order to manage model dependencies * and internal housekeeping tasks (also for legacy model listeners, pending removal). * * We are not yet confident about API to add model dependencies (languages, models and alike), that's why we keep this * separate, non-{@code openapi} interface. Questions, among others, include whether we shall demand all models to support * imports editing, how to specify dependencies (extra composite Dependency objects or plain SModelReference/SLanguage is ok), * if this interface is intrinsic part of openapi.SModel or just comes with a help thereof (i.e. model.getDependencies() manager object), * and how to dispatch change notifications. */ // XXX move to [smodel] once ImportElement and Language dependencies gone public interface SModelInternal extends ModelWithDisposeInfo { void addModelListener(@NotNull SModelListener listener); void removeModelListener(@NotNull SModelListener listener); // FIXME rename to importedLanguages once original is removed java.util.Collection<SLanguage> importedLanguageIds(); // FIXME refactor, rename to removeLanguage(SLanguage), expose in SModel void deleteLanguageId(@NotNull SLanguage ref); /** * @deprecated use {@link #addLanguage(SLanguage)} instead */ @Deprecated @ToRemove(version = 3.4) void addLanguage(Language language); // 2 uses in mbeddr void addLanguage(@NotNull SLanguage language); void setLanguageImportVersion(@NotNull SLanguage language, int version); int getLanguageImportVersion(SLanguage lang); List<SModuleReference> importedDevkits(); void addDevKit(SModuleReference ref); void deleteDevKit(@NotNull SModuleReference ref); /** * @return collection of models this one depends from. */ @NotNull Collection<SModelReference> getModelImports(); /** * Tell one model depends from another. * @since 3.4 */ void addModelImport(@NotNull SModelReference modelReference); /** * @deprecated use {@link #addModelImport(SModelReference)} instead, second argument of this method is legacy. */ @Deprecated @ToRemove(version = 3.4) void addModelImport(SModelReference modelReference, boolean firstVersion); void deleteModelImport(SModelReference modelReference); /** * @deprecated use {@link #getLanguagesEngagedOnGeneration()} or {@link SModelLegacy#engagedOnGenerationLanguages()} for transition. */ @Deprecated @ToRemove(version = 3.4) List<SModuleReference> engagedOnGenerationLanguages(); /** * @since 3.4 */ @NotNull Collection<SLanguage> getLanguagesEngagedOnGeneration(); /** * @deprecated use {@link #addEngagedOnGenerationLanguage(SLanguage)} instead * Shall move to SModelLegacy */ @Deprecated @ToRemove(version = 3.4) void addEngagedOnGenerationLanguage(SModuleReference ref); void addEngagedOnGenerationLanguage(SLanguage lang); /** * @deprecated use {@link #removeEngagedOnGenerationLanguage(SLanguage)} instead * Shall move to SModelLegacy */ @Deprecated @ToRemove(version = 3.4) void removeEngagedOnGenerationLanguage(SModuleReference ref); void removeEngagedOnGenerationLanguage(SLanguage lang); /** * Model has a chance to bring its external dependencies to a state manifested by supplied repository * @return <code>true</code> if anything has been changed */ boolean updateExternalReferences(@NotNull SRepository repository); void changeModelReference(SModelReference newModelReference); }