Как получить исходный код, используя getRange в javaparser - PullRequest
0 голосов
/ 28 октября 2019

Например, я могу получить начальную и конечную строки, но как мне получить исходный код между начальной и конечной строкой. для примера кода здесь.

String[] cmds =new String[2];
String OS = System.getProperty("os.name");
if (OS.startsWith("Windows")) {
    cmds[0]="cmd";
    cmds[1]="/c";
}
else {
    cmds[0]="/bin/sh";
    cmds[1]="-c";
}

try {
    Process p = Runtime.getRuntime().exec(cmds);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Я хочу получить приведенный ниже код, то есть определение, относящееся к cmds.

String[] cmds =new String[2];
String OS = System.getProperty("os.name");
if (OS.startsWith("Windows")) {
     cmds[0]="cmd";
     cmds[1]="/c";
}
else {
     cmds[0]="/bin/sh";
     cmds[1]="-c";
}

1 Ответ

0 голосов
/ 29 октября 2019

Вы можете создать класс посетителя, например

 public class RangeFinder extends VoidVisitorWithDefaults<Range> {
    List<Node> nodesFound = new ArrayList<>();


    public void defaultAction(Node n, Range givenRange) {
        //Range of element in your code
        Range rangeOfNode = n.getRange().get();

        //If your given two lines contain this node, add it 
        if (givenRange.contains(rangeOfNode))
            nodesFound.add(n);
        //Else, if it overlaps with the node, check the children of the node
        else if (givenRange.overlapsWith(rangeOfNode)) {
            n.getChildNodes().forEach(child -> child.accept(this, givenRange));
        }
    }
}

, а затем использовать метод

 public static String findSrc(CompilationUnit cu, int beginRow, int endRow) {
      //Parse code for all nodes contained within two rows
      RangeFinder rangeFinder = new RangeFinder();
      cu.accept(rangeFinder, Range.range(beginRow, 0, endRow, 0));

      //Build string
      StringBuilder codeBuilder = new StringBuilder();
      rangeFinder.nodesFound.forEach(node -> codeBuilder.append(node.toString()).append("\n"));
      return codeBuilder.toString();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...