是否有可能在GWT编译期间发现正在编译的模块的名称

时间:2015-04-27 13:34:19

标签: gwt

我有一个GWT生成器,需要知道正在编译的模块的名称。

GeneratorContext不提供此信息。只有LinkerContext有一个暴露这个的公共方法,但我在编译期间需要这个。

有什么想法吗?

修改

感谢您的回答。

我真的需要在编译时这个。我正在开发一个库,它扫描项目中具有特定文件扩展名的文件(通过ResourcesOracle),并为它们生成一些资源。我试图识别模块名称,以避免为可能存在于继承模块上的文件生成资源。

1 个答案:

答案 0 :(得分:0)

它在链接器时间之前不可用(它可能 make 可用,但我现在无法说明这个想法的可行性),但它是< / em>在运行时通过XDocument xDoc = XDocument.Load(docDifPath); var infoRegions = from x in xDoc.Descendants("_Region") select new { Name = x.Descendants("_Name").First().Value, X1 = x.Descendants("_X1").First().Value, Y1 = x.Descendants("_Y1").First().Value, X2 = x.Descendants("_X2").First().Value, Y2 = x.Descendants("_Y2").First().Value, BlockTypeEnum = x.Descendants("_BlockTypeEnum").First().Value }; //using obtaining info. I created Region class before List<Region> regions = new List<Region>(); foreach (var i in infoRegions) { Region region = new Region(); region.name = i.Name; region.x1 = Convert.ToInt32(i.X1); region.y1 = Convert.ToInt32(i.Y1); region.x2 = Convert.ToInt32(i.X2); region.y2 = Convert.ToInt32(i.Y2); region.blockTypeEnumElem = (BlockTypeEnum)Enum.Parse(typeof(BlockTypeEnum), i.BlockTypeEnum); regions.Add(region); } 提供。由于编译器将知道模块的名称,这实际上是一个常量,可以放在代码中代替此方法调用,因此GWT.getModuleName()检查equals等应该编译出来如预期的那样。

几乎任何需要模块名称的用例都可以通过这个来解决 - 检查正在构建的模块,将模块名称添加到代码中的某些字符串等等。如果你有另一个,请考虑发布您要解决的问题,而不是您认为需要解决的问题。