【问题标题】:Manipulating location is failing because of < and > in location由于位置中的 < 和 > 操作位置失败
【发布时间】:2016-12-30 09:37:09
【问题描述】:

我有一个位置

|java+class:///smallsql/database/CommandDrop|(114,115,&lt;3,68&gt;,&lt;8,5&gt;)

我想转换成

|project://SmallSQL/src/smallsql/database/CommandDrop.java|(114,115,&lt;3,68&gt;,&lt;8,5&gt;)

我想通过使用toString 来执行此操作,然后操作生成的String,然后应用toLocation。但是,这是失败的,因为toString 将把&lt; 变成\&lt;&gt; 类似。现在toLocation 会将其视为格式错误的 URI。有人知道吗?

【问题讨论】:

    标签: rascal


    【解决方案1】:

    如果你想操纵一个位置的路径,保持其余部分不变,只需这样做:

    myLoc.path = myManipulation(myLoc.path);
    

    myManipulation 是一个函数。

    但对我来说,您似乎只想将逻辑位置解析为物理位置:

    import IO;
    myLoc = resolveLocation(myLoc);
    

    请注意,在使用analysis::m3::Registry::registerProject之前,该项目的M3型号必须已注册,否则解析将不起作用。

    您也可以通过在M3模型的declarations表中查找来直接查找您需要的路径。

    【讨论】:

    • 我确实想将逻辑位置转换为物理位置。 resolveLocation 会发生这种情况,但没有考虑 cmets 的偏移量。我也尝试使用myM3model@declarations[|java+class:///smallsql/database/CommandDrop|(114,115,&lt;3,68&gt;,&lt;8,5&gt;)] 之类的东西,但这会产生一个空集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2018-11-09
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多