示例#1
1
  /** Parses the source to a CST. You can retrieve it with getCST(). */
  public void parse() throws CompilationFailedException {
    if (this.phase > Phases.PARSING) {
      throw new GroovyBugError("parsing is already complete");
    }

    if (this.phase == Phases.INITIALIZATION) {
      nextPhase();
    }

    //
    // Create a reader on the source and run the parser.

    Reader reader = null;
    try {
      reader = source.getReader();

      // lets recreate the parser each time as it tends to keep around state
      parserPlugin = getConfiguration().getPluginFactory().createParserPlugin();

      cst = parserPlugin.parseCST(this, reader);
      sourceSummary = parserPlugin.getSummary();

      reader.close();

    } catch (IOException e) {
      getErrorCollector().addFatalError(new SimpleMessage(e.getMessage(), this));
    } finally {
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException e) {
        }
      }
    }
  }
示例#2
0
  /**
   * Returns a sampling of the source at the specified line and column, of null if it is
   * unavailable.
   */
  public String getSample(int line, int column, Janitor janitor) {
    String sample = null;
    String text = source.getLine(line, janitor);

    if (text != null) {
      if (column > 0) {
        String marker = Utilities.repeatString(" ", column - 1) + "^";

        if (column > 40) {
          int start = column - 30 - 1;
          int end = (column + 10 > text.length() ? text.length() : column + 10 - 1);
          sample =
              "   "
                  + text.substring(start, end)
                  + Utilities.eol()
                  + "   "
                  + marker.substring(start, marker.length());
        } else {
          sample = "   " + text + Utilities.eol() + "   " + marker;
        }
      } else {
        sample = text;
      }
    }

    return sample;
  }