/* * $Id$ * * File is automatically generated by the Xtext language generator. * Do not change it. * * SARL is an general-purpose agent programming language. * More details on http://www.sarl.io * * Copyright (C) 2014-2017 the original authors or authors. * * 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 io.sarl.lang.codebuilder; import com.google.inject.AbstractModule; import com.google.inject.Binding; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; import io.sarl.lang.codebuilder.appenders.BlockExpressionSourceAppender; import io.sarl.lang.codebuilder.appenders.ExpressionSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlActionSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlAgentSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlAnnotationTypeSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlArtifactSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlBehaviorSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlBehaviorUnitSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlCapacitySourceAppender; import io.sarl.lang.codebuilder.appenders.SarlClassSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlConstructorSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlEnumLiteralSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlEnumerationSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlEventSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlFieldSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlInterfaceSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlSkillSourceAppender; import io.sarl.lang.codebuilder.appenders.SarlSpaceSourceAppender; import io.sarl.lang.codebuilder.appenders.ScriptSourceAppender; import io.sarl.lang.codebuilder.builders.IBlockExpressionBuilder; import io.sarl.lang.codebuilder.builders.IExpressionBuilder; import io.sarl.lang.codebuilder.builders.ISarlActionBuilder; import io.sarl.lang.codebuilder.builders.ISarlAgentBuilder; import io.sarl.lang.codebuilder.builders.ISarlAnnotationTypeBuilder; import io.sarl.lang.codebuilder.builders.ISarlArtifactBuilder; import io.sarl.lang.codebuilder.builders.ISarlBehaviorBuilder; import io.sarl.lang.codebuilder.builders.ISarlBehaviorUnitBuilder; import io.sarl.lang.codebuilder.builders.ISarlCapacityBuilder; import io.sarl.lang.codebuilder.builders.ISarlClassBuilder; import io.sarl.lang.codebuilder.builders.ISarlConstructorBuilder; import io.sarl.lang.codebuilder.builders.ISarlEnumLiteralBuilder; import io.sarl.lang.codebuilder.builders.ISarlEnumerationBuilder; import io.sarl.lang.codebuilder.builders.ISarlEventBuilder; import io.sarl.lang.codebuilder.builders.ISarlFieldBuilder; import io.sarl.lang.codebuilder.builders.ISarlInterfaceBuilder; import io.sarl.lang.codebuilder.builders.ISarlSkillBuilder; import io.sarl.lang.codebuilder.builders.ISarlSpaceBuilder; import io.sarl.lang.codebuilder.builders.IScriptBuilder; import java.lang.reflect.Type; import java.util.Map; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Provider; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.xtext.Constants; import org.eclipse.xtext.common.types.access.IJvmTypeProvider; import org.eclipse.xtext.resource.IResourceFactory; import org.eclipse.xtext.util.Modules2; import org.eclipse.xtext.xbase.compiler.ImportManager; import org.eclipse.xtext.xbase.lib.Pure; /** * Creates {@link ICodeBuilder}s to insert SARL code snippets. */ @SuppressWarnings("all") public class CodeBuilderFactory { private static final String[] FORBIDDEN_INJECTION_PREFIXES = new String[] { "com.google.inject.", }; private static final String[] FORBIDDEN_INJECTION_POSTFIXES = new String[] { ".Logger", }; @Inject private IResourceFactory resourceFactory; private String fileExtension; @Inject private Provider<ImportManager> importManagerProvider; @Inject private Injector originalInjector; private Injector builderInjector; @Inject public void setFileExtensions(@Named(Constants.FILE_EXTENSIONS) String fileExtensions) { this.fileExtension = fileExtensions.split("[:;,]+")[0]; } /** Compute a unused URI for a synthetic resource. * @param resourceSet - the resource set in which the resource should be located. * @return the uri. */ @Pure protected URI computeUnusedUri(ResourceSet resourceSet) { String name = "__synthetic"; for (int i = 0; i < Integer.MAX_VALUE; ++i) { URI syntheticUri = URI.createURI(name + i + "." + getScriptFileExtension()); if (resourceSet.getResource(syntheticUri, false) == null) { return syntheticUri; } } throw new IllegalStateException(); } /** Replies the script's file extension. */ @Pure public String getScriptFileExtension() { return this.fileExtension; } /** Replies the resource factory. * * @return the resource factory. */ @Pure protected IResourceFactory getResourceFactory() { return this.resourceFactory; } /** Replies the name of the foo package. * * @return the name of the foo package. */ @Pure protected String getFooPackageName() { return "io.sarl.lang.foo"; } /** Replies the name of the foo type. * * @return the name of the foo type. */ @Pure protected String getFooTypeName() { return "FooType"; } /** Replies the name of the foo type member. * * @return the name of the foo type member. */ @Pure protected String getFooMemberName() { return "fooMember"; } /** Create a synthetic resource. * * @param resourceSet the resourceSet. * @return the resource. */ @Pure protected Resource createResource(ResourceSet resourceSet) { URI uri = computeUnusedUri(resourceSet); Resource resource = getResourceFactory().createResource(uri); resourceSet.getResources().add(resource); return resource; } /** Replies the injector. * @return the injector. */ @Pure protected Injector getInjector() { if (this.builderInjector == null) { ImportManager importManager = this.importManagerProvider.get(); this.builderInjector = createOverridingInjector(this.originalInjector, new CodeBuilderModule(importManager)); } return builderInjector; } /** Create an injector that override the given injectors with the modules. * * @param originalInjector the original injector. * @param modules the overriding modules. * @return the new injector. */ public static Injector createOverridingInjector(Injector originalInjector, Module module) { final Map<Key<?>, Binding<?>> bindings = originalInjector.getBindings(); return Guice.createInjector(Modules2.mixin((binder) -> { for(Binding<?> binding: bindings.values()) { final Type typeLiteral = binding.getKey().getTypeLiteral().getType(); if (typeLiteral != null) { final String typeName = typeLiteral.getTypeName(); if (isValid(typeName)) { binding.applyTo(binder); } } } }, module)); } private static boolean isValid(String name) { for (final String prefix : FORBIDDEN_INJECTION_PREFIXES) { if (name.startsWith(prefix)) { return false; } } for (final String postfix : FORBIDDEN_INJECTION_POSTFIXES) { if (name.endsWith(postfix)) { return false; } } return true; } /** Replies a provider for the given type. * <p>The provider uses a local context singleton of the import manager. * @param type the type of the object to provide. * @return the provider. */ @Pure protected <T> Provider<T> getProvider(Class<T> type) { return getInjector().getProvider(type); } private static class CodeBuilderModule extends AbstractModule { private final ImportManager importManager; public CodeBuilderModule(ImportManager importManager) { this.importManager = importManager; } @Override protected void configure() { bind(ImportManager.class).toInstance(this.importManager); } } /** Create the factory for a Sarl script. * @param packageName the name of the package of the script. * @param resourceSet the resource set in which the script is created. * @return the factory. */ @Pure public IScriptBuilder createScript(String packageName, ResourceSet resourceSet) { return createScript(packageName, createResource(resourceSet), null); } /** Create the factory for a Sarl script. * @param packageName the name of the package of the script. * @param resource the resource in which the script is created. * @return the factory. */ @Pure public IScriptBuilder createScript(String packageName, Resource resource) { return createScript(packageName, resource, null); } /** Create the factory for a Sarl script. * @param packageName the name of the package of the script. * @param resource the resource in which the script is created. * @param context the context for type resolution. * @return the factory. */ @Pure public IScriptBuilder createScript(String packageName, Resource resource, IJvmTypeProvider context) { IScriptBuilder builder = getProvider(IScriptBuilder.class).get(); builder.eInit(resource, packageName, context); return builder; } /** Create the factory for a Sarl script. * <p>The resource set is provided by the context. * @param packageName the name of the package of the script. * @param context the context for type resolution. * @return the factory. */ @Pure public IScriptBuilder createScript(String packageName, IJvmTypeProvider context) { return createScript(packageName, createResource(context.getResourceSet()), context); } /** Create the appender for a Sarl script. * @param packageName the name of the package of the script. * @param resourceSet the resource set in which the script is created. * @return the appender. */ @Pure public ScriptSourceAppender buildScript(String packageName, ResourceSet resourceSet) { ScriptSourceAppender a = new ScriptSourceAppender(createScript(packageName, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl script. * @param packageName the name of the package of the script. * @param resource the resource in which the script is created. * @return the appender. */ @Pure public ScriptSourceAppender buildScript(String packageName, Resource resource) { ScriptSourceAppender a = new ScriptSourceAppender(createScript(packageName, resource)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl script. * @param packageName the name of the package of the script. * @param resource the resource in which the script is created. * @param context the context for type resolution. * @return the appender. */ @Pure public ScriptSourceAppender buildScript(String packageName, Resource resource, IJvmTypeProvider context) { ScriptSourceAppender a = new ScriptSourceAppender(createScript(packageName, resource, context)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl script. * <p>The resource set is provided by the context. * @param packageName the name of the package of the script. * @param context the context for type resolution. * @return the appender. */ @Pure public ScriptSourceAppender buildScript(String packageName, IJvmTypeProvider context) { ScriptSourceAppender a = new ScriptSourceAppender(createScript(packageName, context)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl XExpression. * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ public IExpressionBuilder createXExpression(ResourceSet resourceSet) { return createXExpression(createResource(resourceSet)); } /** Create the factory for a Sarl XExpression. * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ public IExpressionBuilder createXExpression(Resource resource) { final IScriptBuilder script = createScript(getFooPackageName(), resource); final ISarlEventBuilder topElement = script.addSarlEvent(getFooTypeName()); final ISarlFieldBuilder memberElement = topElement.addSarlField(getFooMemberName()); return memberElement.getInitialValue(); } /** Create the appender for a Sarl XExpression. * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ public ExpressionSourceAppender buildXExpression(ResourceSet resourceSet) { return new ExpressionSourceAppender(createXExpression(resourceSet)); } /** Create the appender for a Sarl XExpression. * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ public ExpressionSourceAppender buildXExpression(Resource resource) { return new ExpressionSourceAppender(createXExpression(resource)); } /** Create the factory for a Sarl block expression. * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public IBlockExpressionBuilder createXBlockExpression(ResourceSet resourceSet) { return createXBlockExpression(createResource(resourceSet)); } /** Create the factory for a Sarl block expression. * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public IBlockExpressionBuilder createXBlockExpression(Resource resource) { final IScriptBuilder script = createScript(getFooPackageName(), resource); final ISarlAgentBuilder topElement = script.addSarlAgent(getFooTypeName()); final ISarlActionBuilder memberElement = topElement.addSarlAction(getFooMemberName()); return memberElement.getExpression(); } /** Create the appender for a Sarl block expression. * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public BlockExpressionSourceAppender buildXBlockExpression(ResourceSet resourceSet) { return new BlockExpressionSourceAppender(createXBlockExpression(resourceSet)); } /** Create the appender for a Sarl block expression. * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public BlockExpressionSourceAppender buildXBlockExpression(Resource resource) { return new BlockExpressionSourceAppender(createXBlockExpression(resource)); } /** Create the factory for a Sarl SarlEvent. * @param name the name of the SarlEvent * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlEventBuilder createSarlEvent(String name, ResourceSet resourceSet) { return createSarlEvent(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlEvent. * @param name the name of the SarlEvent * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlEventBuilder createSarlEvent(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlEvent(name); } /** Create the appender for a Sarl SarlEvent. * @param name the name of the SarlEvent * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlEventSourceAppender buildSarlEvent(String name, ResourceSet resourceSet) { SarlEventSourceAppender a = new SarlEventSourceAppender(createSarlEvent(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlEvent. * @param name the name of the SarlEvent * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlEventSourceAppender buildSarlEvent(String name, Resource resource) { SarlEventSourceAppender a = new SarlEventSourceAppender(createSarlEvent(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlCapacity. * @param name the name of the SarlCapacity * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlCapacityBuilder createSarlCapacity(String name, ResourceSet resourceSet) { return createSarlCapacity(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlCapacity. * @param name the name of the SarlCapacity * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlCapacityBuilder createSarlCapacity(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlCapacity(name); } /** Create the appender for a Sarl SarlCapacity. * @param name the name of the SarlCapacity * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlCapacitySourceAppender buildSarlCapacity(String name, ResourceSet resourceSet) { SarlCapacitySourceAppender a = new SarlCapacitySourceAppender(createSarlCapacity(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlCapacity. * @param name the name of the SarlCapacity * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlCapacitySourceAppender buildSarlCapacity(String name, Resource resource) { SarlCapacitySourceAppender a = new SarlCapacitySourceAppender(createSarlCapacity(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlAgent. * @param name the name of the SarlAgent * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlAgentBuilder createSarlAgent(String name, ResourceSet resourceSet) { return createSarlAgent(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlAgent. * @param name the name of the SarlAgent * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlAgentBuilder createSarlAgent(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlAgent(name); } /** Create the appender for a Sarl SarlAgent. * @param name the name of the SarlAgent * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlAgentSourceAppender buildSarlAgent(String name, ResourceSet resourceSet) { SarlAgentSourceAppender a = new SarlAgentSourceAppender(createSarlAgent(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlAgent. * @param name the name of the SarlAgent * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlAgentSourceAppender buildSarlAgent(String name, Resource resource) { SarlAgentSourceAppender a = new SarlAgentSourceAppender(createSarlAgent(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlBehavior. * @param name the name of the SarlBehavior * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlBehaviorBuilder createSarlBehavior(String name, ResourceSet resourceSet) { return createSarlBehavior(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlBehavior. * @param name the name of the SarlBehavior * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlBehaviorBuilder createSarlBehavior(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlBehavior(name); } /** Create the appender for a Sarl SarlBehavior. * @param name the name of the SarlBehavior * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlBehaviorSourceAppender buildSarlBehavior(String name, ResourceSet resourceSet) { SarlBehaviorSourceAppender a = new SarlBehaviorSourceAppender(createSarlBehavior(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlBehavior. * @param name the name of the SarlBehavior * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlBehaviorSourceAppender buildSarlBehavior(String name, Resource resource) { SarlBehaviorSourceAppender a = new SarlBehaviorSourceAppender(createSarlBehavior(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlSkill. * @param name the name of the SarlSkill * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlSkillBuilder createSarlSkill(String name, ResourceSet resourceSet) { return createSarlSkill(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlSkill. * @param name the name of the SarlSkill * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlSkillBuilder createSarlSkill(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlSkill(name); } /** Create the appender for a Sarl SarlSkill. * @param name the name of the SarlSkill * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlSkillSourceAppender buildSarlSkill(String name, ResourceSet resourceSet) { SarlSkillSourceAppender a = new SarlSkillSourceAppender(createSarlSkill(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlSkill. * @param name the name of the SarlSkill * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlSkillSourceAppender buildSarlSkill(String name, Resource resource) { SarlSkillSourceAppender a = new SarlSkillSourceAppender(createSarlSkill(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlSpace. * @param name the name of the SarlSpace * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlSpaceBuilder createSarlSpace(String name, ResourceSet resourceSet) { return createSarlSpace(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlSpace. * @param name the name of the SarlSpace * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlSpaceBuilder createSarlSpace(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlSpace(name); } /** Create the appender for a Sarl SarlSpace. * @param name the name of the SarlSpace * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlSpaceSourceAppender buildSarlSpace(String name, ResourceSet resourceSet) { SarlSpaceSourceAppender a = new SarlSpaceSourceAppender(createSarlSpace(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlSpace. * @param name the name of the SarlSpace * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlSpaceSourceAppender buildSarlSpace(String name, Resource resource) { SarlSpaceSourceAppender a = new SarlSpaceSourceAppender(createSarlSpace(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlArtifact. * @param name the name of the SarlArtifact * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlArtifactBuilder createSarlArtifact(String name, ResourceSet resourceSet) { return createSarlArtifact(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlArtifact. * @param name the name of the SarlArtifact * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlArtifactBuilder createSarlArtifact(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlArtifact(name); } /** Create the appender for a Sarl SarlArtifact. * @param name the name of the SarlArtifact * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlArtifactSourceAppender buildSarlArtifact(String name, ResourceSet resourceSet) { SarlArtifactSourceAppender a = new SarlArtifactSourceAppender(createSarlArtifact(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlArtifact. * @param name the name of the SarlArtifact * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlArtifactSourceAppender buildSarlArtifact(String name, Resource resource) { SarlArtifactSourceAppender a = new SarlArtifactSourceAppender(createSarlArtifact(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlClass. * @param name the name of the SarlClass * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlClassBuilder createSarlClass(String name, ResourceSet resourceSet) { return createSarlClass(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlClass. * @param name the name of the SarlClass * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlClassBuilder createSarlClass(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlClass(name); } /** Create the appender for a Sarl SarlClass. * @param name the name of the SarlClass * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlClassSourceAppender buildSarlClass(String name, ResourceSet resourceSet) { SarlClassSourceAppender a = new SarlClassSourceAppender(createSarlClass(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlClass. * @param name the name of the SarlClass * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlClassSourceAppender buildSarlClass(String name, Resource resource) { SarlClassSourceAppender a = new SarlClassSourceAppender(createSarlClass(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlInterface. * @param name the name of the SarlInterface * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlInterfaceBuilder createSarlInterface(String name, ResourceSet resourceSet) { return createSarlInterface(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlInterface. * @param name the name of the SarlInterface * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlInterfaceBuilder createSarlInterface(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlInterface(name); } /** Create the appender for a Sarl SarlInterface. * @param name the name of the SarlInterface * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlInterfaceSourceAppender buildSarlInterface(String name, ResourceSet resourceSet) { SarlInterfaceSourceAppender a = new SarlInterfaceSourceAppender(createSarlInterface(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlInterface. * @param name the name of the SarlInterface * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlInterfaceSourceAppender buildSarlInterface(String name, Resource resource) { SarlInterfaceSourceAppender a = new SarlInterfaceSourceAppender(createSarlInterface(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlEnumeration. * @param name the name of the SarlEnumeration * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlEnumerationBuilder createSarlEnumeration(String name, ResourceSet resourceSet) { return createSarlEnumeration(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlEnumeration. * @param name the name of the SarlEnumeration * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlEnumerationBuilder createSarlEnumeration(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlEnumeration(name); } /** Create the appender for a Sarl SarlEnumeration. * @param name the name of the SarlEnumeration * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlEnumerationSourceAppender buildSarlEnumeration(String name, ResourceSet resourceSet) { SarlEnumerationSourceAppender a = new SarlEnumerationSourceAppender(createSarlEnumeration(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlEnumeration. * @param name the name of the SarlEnumeration * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlEnumerationSourceAppender buildSarlEnumeration(String name, Resource resource) { SarlEnumerationSourceAppender a = new SarlEnumerationSourceAppender(createSarlEnumeration(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlAnnotationType. * @param name the name of the SarlAnnotationType * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlAnnotationTypeBuilder createSarlAnnotationType(String name, ResourceSet resourceSet) { return createSarlAnnotationType(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlAnnotationType. * @param name the name of the SarlAnnotationType * @param resource the resource that must be used for * containing the generated element, and resolving types from names. * @return the factory. */ @Pure public ISarlAnnotationTypeBuilder createSarlAnnotationType(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); return scriptBuilder.addSarlAnnotationType(name); } /** Create the appender for a Sarl SarlAnnotationType. * @param name the name of the SarlAnnotationType * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlAnnotationTypeSourceAppender buildSarlAnnotationType(String name, ResourceSet resourceSet) { SarlAnnotationTypeSourceAppender a = new SarlAnnotationTypeSourceAppender(createSarlAnnotationType(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlAnnotationType. * @param name the name of the SarlAnnotationType * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlAnnotationTypeSourceAppender buildSarlAnnotationType(String name, Resource resource) { SarlAnnotationTypeSourceAppender a = new SarlAnnotationTypeSourceAppender(createSarlAnnotationType(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl constructor. * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlConstructorBuilder createSarlConstructor(ResourceSet resourceSet) { return createSarlConstructor(createResource(resourceSet)); } /** Create the factory for a Sarl constructor. * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlConstructorBuilder createSarlConstructor(Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); ISarlEventBuilder containerBuilder = scriptBuilder.addSarlEvent(getFooTypeName()); return containerBuilder.addSarlConstructor(); } /** Create the appender for a Sarl constructor. * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlConstructorSourceAppender buildSarlConstructor(ResourceSet resourceSet) { SarlConstructorSourceAppender a = new SarlConstructorSourceAppender(createSarlConstructor(resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl constructor. * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlConstructorSourceAppender buildSarlConstructor(Resource resource) { SarlConstructorSourceAppender a = new SarlConstructorSourceAppender(createSarlConstructor(resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlAction. * @param name the name of the SarlAction * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlActionBuilder createDefSarlAction(String name, ResourceSet resourceSet) { return createDefSarlAction(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlAction. * @param name the name of the SarlAction * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlActionBuilder createDefSarlAction(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); ISarlCapacityBuilder containerBuilder = scriptBuilder.addSarlCapacity(getFooTypeName()); return containerBuilder.addDefSarlAction(name); } /** Create the appender for a Sarl SarlAction. * @param name the name of the SarlAction * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlActionSourceAppender buildDefSarlAction(String name, ResourceSet resourceSet) { SarlActionSourceAppender a = new SarlActionSourceAppender(createDefSarlAction(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlAction. * @param name the name of the SarlAction * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlActionSourceAppender buildDefSarlAction(String name, Resource resource) { SarlActionSourceAppender a = new SarlActionSourceAppender(createDefSarlAction(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlAction. * @param name the name of the SarlAction * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlActionBuilder createOverrideSarlAction(String name, ResourceSet resourceSet) { return createOverrideSarlAction(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlAction. * @param name the name of the SarlAction * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlActionBuilder createOverrideSarlAction(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); ISarlCapacityBuilder containerBuilder = scriptBuilder.addSarlCapacity(getFooTypeName()); return containerBuilder.addOverrideSarlAction(name); } /** Create the appender for a Sarl SarlAction. * @param name the name of the SarlAction * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlActionSourceAppender buildOverrideSarlAction(String name, ResourceSet resourceSet) { SarlActionSourceAppender a = new SarlActionSourceAppender(createOverrideSarlAction(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlAction. * @param name the name of the SarlAction * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlActionSourceAppender buildOverrideSarlAction(String name, Resource resource) { SarlActionSourceAppender a = new SarlActionSourceAppender(createOverrideSarlAction(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlBehaviorUnit. * @param name the name of the SarlBehaviorUnit * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlBehaviorUnitBuilder createSarlBehaviorUnit(String name, ResourceSet resourceSet) { return createSarlBehaviorUnit(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlBehaviorUnit. * @param name the name of the SarlBehaviorUnit * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlBehaviorUnitBuilder createSarlBehaviorUnit(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); ISarlAgentBuilder containerBuilder = scriptBuilder.addSarlAgent(getFooTypeName()); return containerBuilder.addSarlBehaviorUnit(name); } /** Create the appender for a Sarl SarlBehaviorUnit. * @param name the name of the SarlBehaviorUnit * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlBehaviorUnitSourceAppender buildSarlBehaviorUnit(String name, ResourceSet resourceSet) { SarlBehaviorUnitSourceAppender a = new SarlBehaviorUnitSourceAppender(createSarlBehaviorUnit(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlBehaviorUnit. * @param name the name of the SarlBehaviorUnit * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlBehaviorUnitSourceAppender buildSarlBehaviorUnit(String name, Resource resource) { SarlBehaviorUnitSourceAppender a = new SarlBehaviorUnitSourceAppender(createSarlBehaviorUnit(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlField. * @param name the name of the SarlField * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlFieldBuilder createVarSarlField(String name, ResourceSet resourceSet) { return createVarSarlField(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlField. * @param name the name of the SarlField * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlFieldBuilder createVarSarlField(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); ISarlEventBuilder containerBuilder = scriptBuilder.addSarlEvent(getFooTypeName()); return containerBuilder.addVarSarlField(name); } /** Create the appender for a Sarl SarlField. * @param name the name of the SarlField * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlFieldSourceAppender buildVarSarlField(String name, ResourceSet resourceSet) { SarlFieldSourceAppender a = new SarlFieldSourceAppender(createVarSarlField(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlField. * @param name the name of the SarlField * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlFieldSourceAppender buildVarSarlField(String name, Resource resource) { SarlFieldSourceAppender a = new SarlFieldSourceAppender(createVarSarlField(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlField. * @param name the name of the SarlField * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlFieldBuilder createValSarlField(String name, ResourceSet resourceSet) { return createValSarlField(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlField. * @param name the name of the SarlField * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlFieldBuilder createValSarlField(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); ISarlEventBuilder containerBuilder = scriptBuilder.addSarlEvent(getFooTypeName()); return containerBuilder.addValSarlField(name); } /** Create the appender for a Sarl SarlField. * @param name the name of the SarlField * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlFieldSourceAppender buildValSarlField(String name, ResourceSet resourceSet) { SarlFieldSourceAppender a = new SarlFieldSourceAppender(createValSarlField(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlField. * @param name the name of the SarlField * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlFieldSourceAppender buildValSarlField(String name, Resource resource) { SarlFieldSourceAppender a = new SarlFieldSourceAppender(createValSarlField(name, resource)); getInjector().injectMembers(a); return a; } /** Create the factory for a Sarl SarlEnumLiteral. * @param name the name of the SarlEnumLiteral * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlEnumLiteralBuilder createSarlEnumLiteral(String name, ResourceSet resourceSet) { return createSarlEnumLiteral(name, createResource(resourceSet)); } /** Create the factory for a Sarl SarlEnumLiteral. * @param name the name of the SarlEnumLiteral * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the factory. */ @Pure public ISarlEnumLiteralBuilder createSarlEnumLiteral(String name, Resource resource) { IScriptBuilder scriptBuilder = createScript(getFooPackageName(), resource); ISarlEnumerationBuilder containerBuilder = scriptBuilder.addSarlEnumeration(getFooTypeName()); return containerBuilder.addSarlEnumLiteral(name); } /** Create the appender for a Sarl SarlEnumLiteral. * @param name the name of the SarlEnumLiteral * @param resourceSet the set of the resources that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlEnumLiteralSourceAppender buildSarlEnumLiteral(String name, ResourceSet resourceSet) { SarlEnumLiteralSourceAppender a = new SarlEnumLiteralSourceAppender(createSarlEnumLiteral(name, resourceSet)); getInjector().injectMembers(a); return a; } /** Create the appender for a Sarl SarlEnumLiteral. * @param name the name of the SarlEnumLiteral * @param resource the resource that must be used for * containing the generated resource, and resolving types from names. * @return the appender. */ @Pure public SarlEnumLiteralSourceAppender buildSarlEnumLiteral(String name, Resource resource) { SarlEnumLiteralSourceAppender a = new SarlEnumLiteralSourceAppender(createSarlEnumLiteral(name, resource)); getInjector().injectMembers(a); return a; } }