gpt4 book ai didi

dsl - 如何为生成的 XText DSL 添加多个导出

转载 作者:行者123 更新时间:2023-12-01 07:20:47 34 4
gpt4 key购买 nike

默认情况下,生成的 XText 工件会从我的 DSL 生成代码到默认 socket (默认为 src-gen 文件夹)。我知道您可以在 fsa.generateFile("myfile.txt", "MY_OUTLET_NAME", "Some file content") 中显式传递导出配置名称。

我是因为我想用我的 XText DSL 生成代码,并且想使用代沟模式并在一个名为“src-once”的文件夹中生成代码。

我正在使用 XText 2.2.1。

我的问题:

1) 我在哪里以及如何定义像“MY_OUTLET_NAME”这样的网点?

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

最佳答案

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

我创建了一个实现 IOutputConfigurationProvider 的新类 MyOutputConfigurationProvider。 getOutputConfigurations 方法返回两个输出配置,默认的 src-gen 和自定义的 src-gen-once,其设置正确,只生成一次源。

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);
}

}

要使用 MyOutputConfigurationProvider 实现,请将 configure 方法添加到您的模块类:
/**
* 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);
}

}

关于dsl - 如何为生成的 XText DSL 添加多个导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10350022/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com