如何为生成的XText DSL添加多个插座

如何为生成的XText DSL添加多个插座,dsl,xtext,outlet,Dsl,Xtext,Outlet,默认情况下,生成的XText工件将代码从我的DSL生成到默认出口(默认为src gen folder)。我知道您可以在fsa.generateFile(“myfile.txt”、“MY_outlet_name”、“某些文件内容”)中显式传递插座配置名称 我之所以这么做,是因为我想用我的xtextdsl生成代码,并想使用代沟模式,在一个名为“src once”的文件夹中生成代码 我正在使用XTEXT2.2.1 我的问题是: 1) 我在哪里以及如何定义我的门店,如“我的门店名称” 2) 有没有办法防

默认情况下,生成的XText工件将代码从我的DSL生成到默认出口(默认为src gen folder)。我知道您可以在fsa.generateFile(“myfile.txt”、“MY_outlet_name”、“某些文件内容”)中显式传递插座配置名称

我之所以这么做,是因为我想用我的xtextdsl生成代码,并想使用代沟模式,在一个名为“src once”的文件夹中生成代码

我正在使用XTEXT2.2.1

我的问题是:

1) 我在哪里以及如何定义我的门店,如“我的门店名称”


2) 有没有办法防止覆盖特定插座中的现有文件?

实现自定义IOutputConfigurationProvider应该做到这一点

Christian Dietrich的提示表单为我指明了正确的方向。下面是我最终得到的代码

我创建了一个新类MyOutputConfigurationProvider,它实现了IOOutputConfigurationProvider。getOutputConfigurations方法返回两个输出配置,一次是默认的src gen,另一次是自定义的src gen,其正确设置仅用于生成一次源

package com.my.dsl;

import static com.google.common.collect.Sets.newHashSet;

import java.util.Set;

import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.generator.IOutputConfigurationProvider;
import org.eclipse.xtext.generator.OutputConfiguration;

public class MyOutputConfigurationProvider implements
    IOutputConfigurationProvider {

public final static String DEFAULT_OUTPUT_ONCE = "DEFAULT_OUTPUT_ONCE";

/**
 * @return a set of {@link OutputConfiguration} available for the generator
 */
public Set<OutputConfiguration> getOutputConfigurations() {
    OutputConfiguration defaultOutput = new OutputConfiguration(IFileSystemAccess.DEFAULT_OUTPUT);
    defaultOutput.setDescription("Output Folder");
    defaultOutput.setOutputDirectory("./src-gen");
    defaultOutput.setOverrideExistingResources(true);
    defaultOutput.setCreateOutputDirectory(true);
    defaultOutput.setCleanUpDerivedResources(true);
    defaultOutput.setSetDerivedProperty(true);

    OutputConfiguration onceOutput = new OutputConfiguration(DEFAULT_OUTPUT_ONCE);
    onceOutput.setDescription("Output Folder (once)");
    onceOutput.setOutputDirectory("./src-gen-once");
    onceOutput.setOverrideExistingResources(false);
    onceOutput.setCreateOutputDirectory(true);
    onceOutput.setCleanUpDerivedResources(false);
    onceOutput.setSetDerivedProperty(true);
    return newHashSet(defaultOutput, onceOutput);
}

}

}

这非常有用!一旦我让它在编辑器(DefaultUiModule)中工作,我就必须将它放入独立生成器(用于命令行构建)。如果你已经这么做了,我将非常感谢你给我一个指针。我发现你的示例非常有用。但它遗漏了一些东西,一些人四处挖掘,得到了这个网址:谢谢分享
/**
 * Use this class to register components to be used within the IDE.
 */
public class MyDslUiModule extends com.my.dsl.ui.AbstractMyDslUiModule {
public MyDslUiModule(AbstractUIPlugin plugin) {
    super(plugin);
}

@Override
public void configure(Binder binder) {
    super.configure(binder);

    binder.bind(IOutputConfigurationProvider.class).to(MyOutputConfigurationProvider.class).in(Singleton.class);
}