/** @see IPresentationDamager#getDamageRegion(ITypedRegion, DocumentEvent, boolean) */
  public IRegion getDamageRegion(
      final ITypedRegion partition,
      final DocumentEvent event,
      final boolean documentPartitioningChanged) {
    if (!documentPartitioningChanged) {
      try {

        final IRegion info = fDocument.getLineInformationOfOffset(event.getOffset());
        final int start = Math.max(partition.getOffset(), info.getOffset());

        int end =
            event.getOffset()
                + (event.getText() == null ? event.getLength() : event.getText().length());

        if ((info.getOffset() <= end) && (end <= info.getOffset() + info.getLength())) {
          // optimize the case of the same line
          end = info.getOffset() + info.getLength();
        } else {
          end = endOfLineOf(end);
        }

        end = Math.min(partition.getOffset() + partition.getLength(), end);
        return new Region(start, end - start);

      } catch (final BadLocationException x) {
      }
    }

    return partition;
  }
    public synchronized void documentChanged(DocumentEvent event) {
      if (!enabled) return;

      String text = event.getText();

      if (text.equals(COMMAND_TERMINATOR)) {
        if (buffer.length() > 0) { // If we just get a new-line token, execute the current 'thing'.
          buffer.append(COMMAND_TERMINATOR);
          String command = buffer.toString();
          reset();

          console.revertAndAppend(command);
        } else { // If there is no current 'thing', just execute the command terminator ('\n', '\r'
                 // or '\r\n') command.
          queue(COMMAND_TERMINATOR, console.getInputOffset());
          execute();
        }
        return;
      }

      int offset = event.getOffset();
      int length = event.getLength();

      int start = offset - console.getInputOffset();
      if (start >= 0) {
        buffer.replace(start, start + length, text);

        int commandStartOffset = console.getInputOffset();

        String rest = buffer.toString();
        boolean commandsQueued = false;
        do {
          int index = rest.indexOf(COMMAND_TERMINATOR);
          if (index == -1) {
            reset();
            buffer.append(rest);
            break;
          }

          String command = rest.substring(0, index);

          queue(command, commandStartOffset);
          commandStartOffset += index;
          commandsQueued = true;

          rest = rest.substring(index + COMMAND_TERMINATOR.length());
        } while (true);

        if (commandsQueued) execute();
      } else {
        buffer.insert(0, text);
        String toAppend = buffer.toString();
        reset();
        console.revertAndAppend(toAppend);
      }
    }
 /**
  * Whenever the document changes, we stop listening to change the document from within this
  * listener (passing commands to the handler if needed, getting results, etc).
  */
 public void documentChanged(DocumentEvent event) {
   lastChangeMillis = System.currentTimeMillis();
   startDisconnected();
   try {
     int eventOffset = event.getOffset();
     String eventText = event.getText();
     proccessAddition(eventOffset, eventText);
   } finally {
     stopDisconnected();
   }
 }
 @Override
 public void documentChanged(DocumentEvent event) {
   IDocument newDoc = event.getDocument();
   if (docLines != newDoc.getNumberOfLines()) {
     updateAnnotations(false);
     docLines = newDoc.getNumberOfLines();
     docLength = newDoc.getLength();
   } else {
     changeAnnotations(event.getOffset(), newDoc.getLength());
   }
 }
    /*
     * @see org.eclipse.jface.text.IPositionUpdater#update(org.eclipse.jface.text.DocumentEvent)
     */
    public void update(DocumentEvent event) {

      int eventOffset = event.getOffset();
      int eventOldLength = event.getLength();
      int eventNewLength = event.getText() == null ? 0 : event.getText().length();
      int deltaLength = eventNewLength - eventOldLength;

      try {
        Position[] positions = event.getDocument().getPositions(fCategory);

        for (int i = 0; i != positions.length; i++) {

          Position position = positions[i];

          if (position.isDeleted()) continue;

          int offset = position.getOffset();
          int length = position.getLength();
          int end = offset + length;

          if (offset >= eventOffset + eventOldLength)
            // position comes
            // after change - shift
            position.setOffset(offset + deltaLength);
          else if (end <= eventOffset) {
            // position comes way before change -
            // leave alone
          } else if (offset <= eventOffset && end >= eventOffset + eventOldLength) {
            // event completely internal to the position - adjust
            // length
            position.setLength(length + deltaLength);
          } else if (offset < eventOffset) {
            // event extends over end of position - adjust length
            int newEnd = eventOffset;
            position.setLength(newEnd - offset);
          } else if (end > eventOffset + eventOldLength) {
            // event extends from before position into it - adjust
            // offset
            // and length
            // offset becomes end of event, length ajusted
            // acordingly
            int newOffset = eventOffset + eventNewLength;
            position.setOffset(newOffset);
            position.setLength(end - newOffset);
          } else {
            // event consumes the position - delete it
            position.delete();
          }
        }
      } catch (BadPositionCategoryException e) {
        // ignore and return
      }
    }
Exemple #6
0
 private void handleDocumentChanged(DocumentEvent event) {
   if (log.isTraceEnabled()) {
     log.trace("Reconciler cancelled");
   }
   cancel();
   ReplaceRegion newReplaceRegion =
       new ReplaceRegion(event.getOffset(), event.getLength(), event.getText());
   synchronized (pendingReplaceRegionLock) {
     if (pendingReplaceRegion != null) {
       pendingReplaceRegion.mergeWith(newReplaceRegion, event.getDocument());
     } else {
       pendingReplaceRegion = newReplaceRegion;
     }
   }
   if (log.isTraceEnabled()) {
     log.trace("Reconciler scheduled with delay: " + delay, new Exception());
   }
   schedule(delay);
 }
  public static String buildTestCase(
      URI sourceLRI,
      URI copyLri,
      Collection<DocumentEvent> history,
      String testCaseName,
      String description) {
    StringBuilder sb = new StringBuilder(1024);
    sb.append("    /**\n    " + description + "\n\n    */\n");
    sb.append("    @Test\n");
    sb.append(
        "    public void test"
            + testCaseName
            + "() throws PartInitException, BadLocationException, CoreException {\n");
    sb.append("        // Source / Copy of: " + sourceLRI.toString() + "\n");
    sb.append("        String lriString = \"" + copyLri.toString() + "\";\n");
    sb.append("        URI lri = connection.getSession().getMoin().createLri(lriString);\n");
    sb.append("        final RefObject refObject = (RefObject) connection.getElement(lri);\n");
    sb.append("        assertNotNull(refObject); \n");
    sb.append("        assertTrue(refObject.is___Alive()); \n");
    sb.append("        AbstractGrammarBasedEditor editor = openEditor(refObject);\n");
    sb.append("        CtsDocument document = getDocument(editor);\n");

    for (DocumentEvent stmnt : history) {
      sb.append("        document.replace(");
      sb.append(stmnt.getOffset()).append(", ");
      sb.append(stmnt.getLength()).append(", \"");
      sb.append(escape(stmnt.getText())).append("\");\n");
    }
    sb.append("        saveAll(editor);\n");
    sb.append("        //failOnError(editor);\n");
    sb.append("        assertTrue(refObject.is___Alive());\n");
    sb.append("        // Your assertions on refObject here \n\n");
    sb.append("        close(editor);\n");
    sb.append("    };\n");
    return sb.toString();
  }
 /**
  * Provides the invocation of DeltaResource.setFileSize(long fileSize) method in order to get
  * buffer size. This method is called every document change since this EclipseSensorPlugin
  * instance was added to IDocumentLister. Since this method, the current buffer size of an
  * active file could be grabbed.
  *
  * @param event An event triggered when a document is changed.
  */
 public void documentChanged(DocumentEvent event) {
   EclipseSensor.this.activeBufferSize = event.getDocument().getLength();
 }
  public void documentChanged(DocumentEvent event) {

    System.out.println("Document changed");

    IDocument document = event.getDocument();

    // creation of DOM/AST from a ICompilationUnit
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    // set the source as the contents of the document
    parser.setSource(document.get().toCharArray());
    CompilationUnit astRoot = (CompilationUnit) parser.createAST(null);

    // visitor
    astRoot.accept(
        new ASTVisitor() {

          public boolean visit(VariableDeclarationFragment inv) {

            if (inv.getParent() instanceof VariableDeclarationStatement) {

              VariableDeclarationStatement var = (VariableDeclarationStatement) inv.getParent();

              String type = var.getType().toString();

              if (type.equals("FragmentSystem")) {

                fsVariableName = inv.getName().toString();

              } else {

                // store all other variable declarations
                variables.put(inv.getName().toString(), type);
              }
            }

            return false;
          }

          public boolean visit(MethodInvocation inv) {
            if (inv.getExpression() instanceof SimpleName) {

              SimpleName name = (SimpleName) inv.getExpression();

              // check if we have set properties on the fragment system
              // if so, save the information
              if (name.toString().equals(fsVariableName)) {

                if (inv.getName().toString().equals("setGrammar")) {

                  Expression expr = (Expression) inv.arguments().get(0);
                  if (expr != null) fsGrammar = expr.toString();
                } else if (inv.getName().toString().equals("setFragmentsFolder")) {

                  Expression expr = (Expression) inv.arguments().get(0);
                  if (expr != null) fsFragmentsLocation = expr.toString();
                }
              }
            }

            // only type check bind statements if required properties
            // of the fragment system are set
            if (fsGrammar != null && fsFragmentsLocation != null) {

              if (inv.getName().toString().equals("bind")) {

                System.out.print("BIND called, with: ");

                List<Expression> args = inv.arguments();
                for (Expression arg : args) {
                  System.out.print(arg.toString() + ", ");
                }
                System.out.println();

                System.out.println("GRA: " + fsGrammar);
                System.out.println("LOC: " + fsFragmentsLocation);

                // check the bind statement
                System.out.println("CALL");
                typeCheckBindStatement(
                    fsGrammar,
                    fsFragmentsLocation,
                    inv.getExpression().toString(),
                    args.get(0).toString(),
                    args.get(1).toString());
                System.out.println("BACK");
              }
            }

            return false;
          }
        });

    System.out.println("STA: " + variables.size());
    Enumeration<String> en = variables.keys();
    while (en.hasMoreElements()) {
      String s = en.nextElement();
      System.out.println("VAR: (" + s + "," + variables.get(s) + ")");
    }
  }