/*
* 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.generator.runtime;
import jetbrains.mps.smodel.language.GeneratorRuntime;
import jetbrains.mps.util.annotation.ToRemove;
import org.jetbrains.mps.openapi.language.SLanguage;
import org.jetbrains.mps.openapi.module.SModuleReference;
import java.util.Collection;
import java.util.Set;
/**
* evgeny, 3/10/11
*/
public interface TemplateModule extends GeneratorRuntime {
/**
* @return collection (possibly empty) of priority rules defined in this generator module, never {@code null}.
*/
Collection<TemplateMappingPriorityRule> getPriorities();
/**
* @return set of models in the generator module, generally not empty, never {@code null}.
*/
Collection<TemplateModel> getModels();
/**
* Generators this generator explicitly extends. This effectively means rules and switches from all
* extended generators are considered.
*/
Collection<TemplateModule> getExtendedGenerators();
/**
* Generators that are utilized by this one, e.g. by invoking their templates, <em>excluding</em> extended generators.
* Employed generators do not contribute their reduction rules (other than those involved through $SWITCH$ call of invoked template)
*/
Collection<TemplateModule> getEmployedGenerators();
/**
* Languages we wrote queries in
* XXX is there need for these in generator runtime? or just in Generator SModule?
*/
Set<SLanguage> getQueryLanguages();
/**
* Languages this generator might produce. Exact set of languages used in generator outcome depends on actual execution and
* is always a subset of this set.
*/
Collection<SLanguage> getTargetLanguages();
String getAlias();
/**
* PROVISIONAL CODE, supports migration from fully-reflective access to GeneratedQueries class
* to compiled access, when TemplateModel needs to answer with GQP. TemplateModel class
* generated with 3.4 would use default TMB implementation, which needs to load class without access to SModule
* as it used to do in j.m.utul.QueriesGenerated, hence exposed the mechanism to load a class.
* Access class from the given runtime, generally {@link ClassLoader#loadClass(String)}
* @throws ClassNotFoundException
* @since 3.5
*/
Class<?> loadClass(String qualifiedName) throws ClassNotFoundException;
}