Java 类org.eclipse.jface.text.source.projection.ProjectionAnnotation 实例源码

项目:Hydrograph    文件:SourceViewer.java   
private void calculatePositions() {
    if (hasSnippetsModifications()) {
        final Map<ProjectionAnnotation, Position> annotations = getAllSnippetsAnnotations();

        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                if (!annotations.isEmpty() && getProjectionAnnotationModel() == null) {
                    enableProjection();
                }
                if (getProjectionAnnotationModel() != null) {
                    Annotation[] oldAnno = oldAnnotations.keySet().toArray(new Annotation[0]);
                    getProjectionAnnotationModel().modifyAnnotations(oldAnno, annotations, null);
                    oldAnnotations.clear();
                    oldAnnotations.putAll(annotations);
                    if (annotations.isEmpty()) {
                        disableProjection();
                    }
                }
            }

        });
    }
}
项目:ec4e    文件:EditorConfigFoldingStrategy.java   
private void updateFolding(EditorConfig editorConfig) {
    if (projectionAnnotationModel == null) {
        return;
    }
    List<Section> sections = editorConfig.getSections();
    CommentBlocks commentBlocks = editorConfig.getAdapter(CommentBlocks.class);
    List<CommentBlock> comments = commentBlocks != null ? commentBlocks.getCommentBlocks()
            : Collections.emptyList();
    Map<Annotation, Position> newAnnotations = new HashMap<>();
    // Collection section and comment spans;
    List<Span> spans = /*Stream.concat(sections.stream(), comments.stream())*/
            sections.stream()
            .map(a -> a.getAdapter(Span.class))
            .sorted((s1, s2) -> s1.getStart().getLine() - s2.getStart().getLine()).collect(Collectors.toList());
    Annotation[] annotations = new Annotation[spans.size()];
    for (int i = 0; i < spans.size(); i++) {
        Span span = spans.get(i);
        int startOffset = span.getStart().getOffset();
        int endOffset = span.getEnd().getOffset();
        ProjectionAnnotation annotation = new ProjectionAnnotation();
        newAnnotations.put(annotation, new Position(startOffset, endOffset - startOffset));
        annotations[i] = annotation;
    }
    projectionAnnotationModel.modifyAnnotations(oldAnnotations, newAnnotations, null);
    oldAnnotations = annotations;
}
项目:DarwinSPL    文件:DwprofileCodeFoldingManager.java   
/**
 * <p>
 * Checks whether the given positions are in the
 * <code>ProjectionAnnotationModel</code> or in the addition set. If not it tries
 * to add into <code>additions</code>. Deletes old ProjectionAnnotation with line
 * count less than 2.
 * </p>
 * 
 * @param positions a list of available foldable positions
 */
public void updateCodefolding(List<Position> positions) {
    IDocument document = sourceViewer.getDocument();
    if (document == null) {
        return;
    }
    oldAnnotations.clear();
    Iterator<?> annotationIterator = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIterator.hasNext()) {
        oldAnnotations.add((ProjectionAnnotation) annotationIterator.next());
    }
    // Add new Position with a unique line offset
    for (Position position : positions) {
        if (!isInAdditions(position)) {
            addPosition(position);
        }
    }
    projectionAnnotationModel.modifyAnnotations(oldAnnotations.toArray(new Annotation[0]), additions, null);
    additions.clear();
}
项目:DarwinSPL    文件:DwprofileCodeFoldingManager.java   
/**
 * Saves the code folding state into the given memento.
 */
public void saveCodeFolding(IMemento memento) {
    // The annotation model might be null if the editor opened an storage input
    // instead of a file input.
    if (projectionAnnotationModel == null) {
        return;
    }
    Iterator<?> annotationIt = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIt.hasNext()) {
        ProjectionAnnotation annotation = (ProjectionAnnotation) annotationIt.next();
        IMemento annotationMemento = memento.createChild(ANNOTATION);
        Position position = projectionAnnotationModel.getPosition(annotation);
        annotationMemento.putBoolean(IS_COLLAPSED, annotation.isCollapsed());
        annotationMemento.putInteger(OFFSET, position.offset);
        annotationMemento.putInteger(LENGTH, position.length);
    }
}
项目:DarwinSPL    文件:HyexpressionCodeFoldingManager.java   
/**
 * <p>
 * Checks whether the given positions are in the
 * <code>ProjectionAnnotationModel</code> or in the addition set. If not it tries
 * to add into <code>additions</code>. Deletes old ProjectionAnnotation with line
 * count less than 2.
 * </p>
 * 
 * @param positions a list of available foldable positions
 */
public void updateCodefolding(List<Position> positions) {
    IDocument document = sourceViewer.getDocument();
    if (document == null) {
        return;
    }
    oldAnnotations.clear();
    Iterator<?> annotationIterator = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIterator.hasNext()) {
        oldAnnotations.add((ProjectionAnnotation) annotationIterator.next());
    }
    // Add new Position with a unique line offset
    for (Position position : positions) {
        if (!isInAdditions(position)) {
            addPosition(position);
        }
    }
    projectionAnnotationModel.modifyAnnotations(oldAnnotations.toArray(new Annotation[0]), additions, null);
    additions.clear();
}
项目:DarwinSPL    文件:HyexpressionCodeFoldingManager.java   
/**
 * Saves the code folding state into the given memento.
 */
public void saveCodeFolding(IMemento memento) {
    // The annotation model might be null if the editor opened an storage input
    // instead of a file input.
    if (projectionAnnotationModel == null) {
        return;
    }
    Iterator<?> annotationIt = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIt.hasNext()) {
        ProjectionAnnotation annotation = (ProjectionAnnotation) annotationIt.next();
        IMemento annotationMemento = memento.createChild(ANNOTATION);
        Position position = projectionAnnotationModel.getPosition(annotation);
        annotationMemento.putBoolean(IS_COLLAPSED, annotation.isCollapsed());
        annotationMemento.putInteger(OFFSET, position.offset);
        annotationMemento.putInteger(LENGTH, position.length);
    }
}
项目:DarwinSPL    文件:HyvalidityformulaCodeFoldingManager.java   
/**
 * <p>
 * Checks whether the given positions are in the
 * <code>ProjectionAnnotationModel</code> or in the addition set. If not it tries
 * to add into <code>additions</code>. Deletes old ProjectionAnnotation with line
 * count less than 2.
 * </p>
 * 
 * @param positions a list of available foldable positions
 */
public void updateCodefolding(List<Position> positions) {
    IDocument document = sourceViewer.getDocument();
    if (document == null) {
        return;
    }
    oldAnnotations.clear();
    Iterator<?> annotationIterator = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIterator.hasNext()) {
        oldAnnotations.add((ProjectionAnnotation) annotationIterator.next());
    }
    // Add new Position with a unique line offset
    for (Position position : positions) {
        if (!isInAdditions(position)) {
            addPosition(position);
        }
    }
    projectionAnnotationModel.modifyAnnotations(oldAnnotations.toArray(new Annotation[0]), additions, null);
    additions.clear();
}
项目:DarwinSPL    文件:HyvalidityformulaCodeFoldingManager.java   
/**
 * Saves the code folding state into the given memento.
 */
public void saveCodeFolding(IMemento memento) {
    // The annotation model might be null if the editor opened an storage input
    // instead of a file input.
    if (projectionAnnotationModel == null) {
        return;
    }
    Iterator<?> annotationIt = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIt.hasNext()) {
        ProjectionAnnotation annotation = (ProjectionAnnotation) annotationIt.next();
        IMemento annotationMemento = memento.createChild(ANNOTATION);
        Position position = projectionAnnotationModel.getPosition(annotation);
        annotationMemento.putBoolean(IS_COLLAPSED, annotation.isCollapsed());
        annotationMemento.putInteger(OFFSET, position.offset);
        annotationMemento.putInteger(LENGTH, position.length);
    }
}
项目:DarwinSPL    文件:HydatavalueCodeFoldingManager.java   
/**
 * <p>
 * Checks whether the given positions are in the
 * <code>ProjectionAnnotationModel</code> or in the addition set. If not it tries
 * to add into <code>additions</code>. Deletes old ProjectionAnnotation with line
 * count less than 2.
 * </p>
 * 
 * @param positions a list of available foldable positions
 */
public void updateCodefolding(List<Position> positions) {
    IDocument document = sourceViewer.getDocument();
    if (document == null) {
        return;
    }
    oldAnnotations.clear();
    Iterator<?> annotationIterator = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIterator.hasNext()) {
        oldAnnotations.add((ProjectionAnnotation) annotationIterator.next());
    }
    // Add new Position with a unique line offset
    for (Position position : positions) {
        if (!isInAdditions(position)) {
            addPosition(position);
        }
    }
    projectionAnnotationModel.modifyAnnotations(oldAnnotations.toArray(new Annotation[0]), additions, null);
    additions.clear();
}
项目:DarwinSPL    文件:HydatavalueCodeFoldingManager.java   
/**
 * Saves the code folding state into the given memento.
 */
public void saveCodeFolding(IMemento memento) {
    // The annotation model might be null if the editor opened an storage input
    // instead of a file input.
    if (projectionAnnotationModel == null) {
        return;
    }
    Iterator<?> annotationIt = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIt.hasNext()) {
        ProjectionAnnotation annotation = (ProjectionAnnotation) annotationIt.next();
        IMemento annotationMemento = memento.createChild(ANNOTATION);
        Position position = projectionAnnotationModel.getPosition(annotation);
        annotationMemento.putBoolean(IS_COLLAPSED, annotation.isCollapsed());
        annotationMemento.putInteger(OFFSET, position.offset);
        annotationMemento.putInteger(LENGTH, position.length);
    }
}
项目:DarwinSPL    文件:HymappingCodeFoldingManager.java   
/**
 * <p>
 * Checks whether the given positions are in the
 * <code>ProjectionAnnotationModel</code> or in the addition set. If not it tries
 * to add into <code>additions</code>. Deletes old ProjectionAnnotation with line
 * count less than 2.
 * </p>
 * 
 * @param positions a list of available foldable positions
 */
public void updateCodefolding(List<Position> positions) {
    IDocument document = sourceViewer.getDocument();
    if (document == null) {
        return;
    }
    oldAnnotations.clear();
    Iterator<?> annotationIterator = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIterator.hasNext()) {
        oldAnnotations.add((ProjectionAnnotation) annotationIterator.next());
    }
    // Add new Position with a unique line offset
    for (Position position : positions) {
        if (!isInAdditions(position)) {
            addPosition(position);
        }
    }
    projectionAnnotationModel.modifyAnnotations(oldAnnotations.toArray(new Annotation[0]), additions, null);
    additions.clear();
}
项目:DarwinSPL    文件:HymappingCodeFoldingManager.java   
/**
 * Saves the code folding state into the given memento.
 */
public void saveCodeFolding(IMemento memento) {
    // The annotation model might be null if the editor opened an storage input
    // instead of a file input.
    if (projectionAnnotationModel == null) {
        return;
    }
    Iterator<?> annotationIt = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIt.hasNext()) {
        ProjectionAnnotation annotation = (ProjectionAnnotation) annotationIt.next();
        IMemento annotationMemento = memento.createChild(ANNOTATION);
        Position position = projectionAnnotationModel.getPosition(annotation);
        annotationMemento.putBoolean(IS_COLLAPSED, annotation.isCollapsed());
        annotationMemento.putInteger(OFFSET, position.offset);
        annotationMemento.putInteger(LENGTH, position.length);
    }
}
项目:DarwinSPL    文件:HyconstraintsCodeFoldingManager.java   
/**
 * <p>
 * Checks whether the given positions are in the
 * <code>ProjectionAnnotationModel</code> or in the addition set. If not it tries
 * to add into <code>additions</code>. Deletes old ProjectionAnnotation with line
 * count less than 2.
 * </p>
 * 
 * @param positions a list of available foldable positions
 */
public void updateCodefolding(List<Position> positions) {
    IDocument document = sourceViewer.getDocument();
    if (document == null) {
        return;
    }
    oldAnnotations.clear();
    Iterator<?> annotationIterator = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIterator.hasNext()) {
        oldAnnotations.add((ProjectionAnnotation) annotationIterator.next());
    }
    // Add new Position with a unique line offset
    for (Position position : positions) {
        if (!isInAdditions(position)) {
            addPosition(position);
        }
    }
    projectionAnnotationModel.modifyAnnotations(oldAnnotations.toArray(new Annotation[0]), additions, null);
    additions.clear();
}
项目:DarwinSPL    文件:HyconstraintsCodeFoldingManager.java   
/**
 * Saves the code folding state into the given memento.
 */
public void saveCodeFolding(IMemento memento) {
    // The annotation model might be null if the editor opened an storage input
    // instead of a file input.
    if (projectionAnnotationModel == null) {
        return;
    }
    Iterator<?> annotationIt = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIt.hasNext()) {
        ProjectionAnnotation annotation = (ProjectionAnnotation) annotationIt.next();
        IMemento annotationMemento = memento.createChild(ANNOTATION);
        Position position = projectionAnnotationModel.getPosition(annotation);
        annotationMemento.putBoolean(IS_COLLAPSED, annotation.isCollapsed());
        annotationMemento.putInteger(OFFSET, position.offset);
        annotationMemento.putInteger(LENGTH, position.length);
    }
}
项目:DarwinSPL    文件:HymanifestCodeFoldingManager.java   
/**
 * <p>
 * Checks whether the given positions are in the
 * <code>ProjectionAnnotationModel</code> or in the addition set. If not it tries
 * to add into <code>additions</code>. Deletes old ProjectionAnnotation with line
 * count less than 2.
 * </p>
 * 
 * @param positions a list of available foldable positions
 */
public void updateCodefolding(List<Position> positions) {
    IDocument document = sourceViewer.getDocument();
    if (document == null) {
        return;
    }
    oldAnnotations.clear();
    Iterator<?> annotationIterator = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIterator.hasNext()) {
        oldAnnotations.add((ProjectionAnnotation) annotationIterator.next());
    }
    // Add new Position with a unique line offset
    for (Position position : positions) {
        if (!isInAdditions(position)) {
            addPosition(position);
        }
    }
    projectionAnnotationModel.modifyAnnotations(oldAnnotations.toArray(new Annotation[0]), additions, null);
    additions.clear();
}
项目:DarwinSPL    文件:HymanifestCodeFoldingManager.java   
/**
 * Saves the code folding state into the given memento.
 */
public void saveCodeFolding(IMemento memento) {
    // The annotation model might be null if the editor opened an storage input
    // instead of a file input.
    if (projectionAnnotationModel == null) {
        return;
    }
    Iterator<?> annotationIt = projectionAnnotationModel.getAnnotationIterator();
    while (annotationIt.hasNext()) {
        ProjectionAnnotation annotation = (ProjectionAnnotation) annotationIt.next();
        IMemento annotationMemento = memento.createChild(ANNOTATION);
        Position position = projectionAnnotationModel.getPosition(annotation);
        annotationMemento.putBoolean(IS_COLLAPSED, annotation.isCollapsed());
        annotationMemento.putInteger(OFFSET, position.offset);
        annotationMemento.putInteger(LENGTH, position.length);
    }
}
项目:tlaplus    文件:TLAEditor.java   
/**
 * Update the annotation structure in the editor.
 * 
 * This is only currently used by comment
 * folding and should be removed because it
 * is incorrect.
 * 
 * @param positions
 * @deprecated
 */
public void updateFoldingStructure(List<Position> positions)
{
    if (annotationModel == null) {
        return;
    }

    Annotation[] annotations = new Annotation[positions.size()];

    // this will hold the new annotations along
    // with their corresponding positions
    Map<ProjectionAnnotation, Position> newAnnotations = new HashMap<ProjectionAnnotation, Position>();

    for (int i = 0; i < positions.size(); i++)
    {
        ProjectionAnnotation annotation = new ProjectionAnnotation();
        newAnnotations.put(annotation, positions.get(i));
        annotations[i] = annotation;
    }
    // If this method is called too early, then annotationModel
    // can be null. This should obviously be addressed.
    this.annotationModel.modifyAnnotations(oldAnnotations, newAnnotations, null);
    oldAnnotations = annotations;
}
项目:tlaplus    文件:TLAProofFoldingStructureProvider.java   
/**
 * Collapses all proofs.
 * 
 * @param cursorOffset
 */
private void foldAllProofs()
{
    Vector<Annotation> modifiedAnnotations = new Vector<Annotation>();
    for (Iterator<TLAProofPosition> it = foldPositions.iterator(); it.hasNext();)
    {
        TLAProofPosition proofPosition = it.next();
        if (!proofPosition.getAnnotation().isCollapsed())
        {
            // should fold every proof
            // so that only theorem statements are shown
            proofPosition.getAnnotation().markCollapsed();
            modifiedAnnotations.add(proofPosition.getAnnotation());
        }
    }

    editor.modifyProjectionAnnotations((Annotation[]) modifiedAnnotations
            .toArray(new ProjectionAnnotation[modifiedAnnotations.size()]));
}
项目:tlaplus    文件:TLAProofFoldingStructureProvider.java   
private void expandAllProofs()
{
    Vector<Annotation> modifiedAnnotations = new Vector<Annotation>();
    for (Iterator<TLAProofPosition> it = foldPositions.iterator(); it.hasNext();)
    {
        TLAProofPosition proofPosition = it.next();
        if (proofPosition.getAnnotation().isCollapsed())
        {
            // should fold every proof
            // so that only theorem statements are shown
            proofPosition.getAnnotation().markExpanded();
            modifiedAnnotations.add(proofPosition.getAnnotation());
        }
    }

    editor.modifyProjectionAnnotations((Annotation[]) modifiedAnnotations
            .toArray(new ProjectionAnnotation[modifiedAnnotations.size()]));
}
项目:velocity-edit    文件:VelocityFoldingStructureProvider.java   
private Annotation[] computeDifferences(ProjectionAnnotationModel model, Set current)
{
    List deletions = new ArrayList();
    for (Iterator iter = model.getAnnotationIterator(); iter.hasNext();)
    {
        Object annotation = iter.next();
        if (annotation instanceof ProjectionAnnotation)
        {
            Position position = model.getPosition((Annotation) annotation);
            if (current.contains(position))
                current.remove(position);
            else
                deletions.add(annotation);
        }
    }
    return (Annotation[]) deletions.toArray(new Annotation[deletions.size()]);
}
项目:idecore    文件:ApexCodeEditor.java   
@Override
public void run() {
    ITextEditor editor = getTextEditor();
    ISelection selection = editor.getSelectionProvider().getSelection();
    if (selection instanceof ITextSelection) {
        ITextSelection textSelection = (ITextSelection) selection;
        if (!textSelection.isEmpty()) {
            IAnnotationModel model = getAnnotationModel(editor);
            if (model != null) {
                int start = textSelection.getStartLine();
                int end = textSelection.getEndLine();
                try {
                    IDocument document = editor.getDocumentProvider().getDocument(editor.getEditorInput());
                    int offset = document.getLineOffset(start);
                    int endOffset = document.getLineOffset(end + 1);
                    Position position = new Position(offset, endOffset - offset);
                    model.addAnnotation(new ProjectionAnnotation(), position);
                } catch (BadLocationException x) {
                    // ignore
                }
            }
        }
    }
}
项目:Eclipse-Markdown-Editor-Plugin    文件:MarkdownEditor.java   
/**
 * Calculate where to fold, sticking the info into newAnnotations
 * @param doc 
 * @param headers
 * @param newAnnotations
 * @param endParent
 */
private void updateSectionFoldingAnnotations2(IDocument doc, List<Header> headers,
        Map<Annotation, Position> newAnnotations, int endParent) {
    for (int i=0; i<headers.size(); i++) {
        Header header = headers.get(i);
        ProjectionAnnotation annotation = new ProjectionAnnotation();
        try {
            int line = header.getLineNumber();
            int start = doc.getLineOffset(line);
            int end = (i==headers.size()-1)? endParent
                    : doc.getLineOffset(headers.get(i+1).getLineNumber());
            Position position = new Position(start, end-start);
            newAnnotations.put(annotation, position);
            // Recurse
            List<Header> subHeaders = header.getSubHeaders();
            if (subHeaders.size() > 0) {
                updateSectionFoldingAnnotations2(doc, subHeaders, newAnnotations, end);
            }
        } catch (Exception ex) {
            System.out.println(ex);
        }           
    }       
}
项目:wt-studio    文件:JsonTextEditor.java   
public void updateFoldingStructure(List<Position> positions)
{
    ProjectionAnnotation[] annotations = new ProjectionAnnotation[positions.size()];

    //this will hold the new annotations along
    //with their corresponding positions
    HashMap<ProjectionAnnotation, Position> newAnnotations = new HashMap<ProjectionAnnotation, Position>();

    for (int i = 0; i < positions.size(); i++)
    {
        ProjectionAnnotation annotation = new ProjectionAnnotation();
        newAnnotations.put(annotation,positions.get(i));
        annotations[i] = annotation;
        if (annotationCollapsedState != null && annotationCollapsedState.length > i && annotationCollapsedState[i]) {
            annotation.markCollapsed();
        }
    }

    annotationModel.modifyAnnotations(oldAnnotations,newAnnotations,null);

    oldAnnotations = annotations;
}
项目:Pydev    文件:CodeFoldingSetter.java   
/**
 * @return an annotation that should be added (or null if that entry already has an annotation
 * added for it).
 */
private Tuple<ProjectionAnnotation, Position> getAnnotationToAdd(FoldingEntry node, int start, int end,
        ProjectionAnnotationModel model, List<Annotation> existing) throws BadLocationException {
    try {
        IDocument document = editor.getDocumentProvider().getDocument(editor.getEditorInput());
        int offset = document.getLineOffset(start);
        int endOffset = offset;
        try {
            endOffset = document.getLineOffset(end);
        } catch (Exception e) {
            //sometimes when we are at the last line, the command above will not work very well
            IRegion lineInformation = document.getLineInformation(end);
            endOffset = lineInformation.getOffset() + lineInformation.getLength();
        }
        Position position = new Position(offset, endOffset - offset);

        return getAnnotationToAdd(position, node, model, existing);

    } catch (BadLocationException x) {
        //this could happen
    }
    return null;
}
项目:dLabPro-Plugin    文件:CommonFoldingStructureProvider.java   
private void addFoldingRegions(Set<Position> regions, CommonElement[] elements, Map<Annotation,Position> map) throws BadLocationException
{
  for (int i = 0; i < elements.length; i++)
  {
    CommonElement element = elements[i];
    try
    {
      int startLine = fDocument.getLineOfOffset(element.getOffset());
      int endLine = fDocument.getLineOfOffset(element.getOffset() + element.getLength());
      if (startLine >= 0 && startLine < endLine)
      {
        int start = fDocument.getLineOffset(startLine);
        int end = fDocument.getLineOffset(endLine) + fDocument.getLineLength(endLine);
        Position position = new Position(start, end - start);
        regions.add(position);
        if (isInitiallyFolded(element))
          map.put(new ProjectionAnnotation(true), position);
      }
    }
    catch (BadLocationException x)
    {
    }
    CommonElement[] children = element.getChildren();
    if (children != null) addFoldingRegions(regions, children, map);
  }
}
项目:Hydrograph    文件:SourceViewer.java   
private Map<ProjectionAnnotation, Position> getAllSnippetsAnnotations() {
    Map<ProjectionAnnotation, Position> annotations = new HashMap<ProjectionAnnotation, Position>();
    IDocument document = getDocument();
    int curOffset = 0;
    FindReplaceDocumentAdapter frda = new FindReplaceDocumentAdapter(document);
    try {
        IRegion startRegion = frda.find(curOffset, "SNIPPET_START", true, false, false, false); //$NON-NLS-1$
        while (startRegion != null && startRegion.getOffset() >= curOffset) {
            int startLine = document.getLineOfOffset(startRegion.getOffset());
            int startOffset = document.getLineOffset(startLine);
            curOffset = startOffset + document.getLineLength(startLine);
            IRegion endRegion = frda.find(startRegion.getOffset(), "SNIPPET_END", true, false, false, false); //$NON-NLS-1$
            if (endRegion != null) {
                int endLine = document.getLineOfOffset(endRegion.getOffset());
                int endOffset = document.getLineOffset(endLine);
                endOffset += document.getLineLength(endLine);
                curOffset = endOffset;
                String text = document.get(startOffset, endOffset - startOffset);
                ProjectionAnnotation annotation = new ProjectionAnnotation(true);
                annotation.setText(text);
                annotation.setRangeIndication(true);
                annotations.put(annotation, new Position(startOffset, endOffset - startOffset));
            }
            if (curOffset < document.getLength()) {
                startRegion = frda.find(curOffset, "SNIPPET_START", true, false, false, false); //$NON-NLS-1$
            }
        }

    } catch (BadLocationException e) {

    }
    return annotations;
}
项目:tlaplus    文件:DefineFoldingRegionAction.java   
public void run()
{
    ITextEditor editor = getTextEditor();
    ISelection selection = editor.getSelectionProvider().getSelection();
    if (selection instanceof ITextSelection)
    {
        ITextSelection textSelection = (ITextSelection) selection;
        if (textSelection.getLength() != 0)
        {
            IAnnotationModel model = getAnnotationModel(editor);
            if (model != null)
            {

                int start = textSelection.getStartLine();
                int end = textSelection.getEndLine();

                try
                {
                    IDocument document = editor.getDocumentProvider().getDocument(editor.getEditorInput());
                    int offset = document.getLineOffset(start);
                    int endOffset = document.getLineOffset(end + 1);
                    Position position = new Position(offset, endOffset - offset);
                    model.addAnnotation(new ProjectionAnnotation(), position);
                } catch (BadLocationException x)
                {
                    // ignore
                }
            }
        }
    }
}
项目:tlaplus    文件:TLAProofFoldingStructureProvider.java   
/**
 * Folds all proofs not containing the cursor.
 * 
 * Note that this will fold every proof if the cursor
 * is not in a proof.
 * 
 * @param cursorOffset
 */
private void foldEverythingUnusable(int cursorOffset)
{
    Vector<Annotation> modifiedAnnotations = new Vector<Annotation>();
    for (Iterator<TLAProofPosition> it = foldPositions.iterator(); it.hasNext();)
    {
        TLAProofPosition proofPosition = it.next();
        try
        {
            if (proofPosition.containsInProofOrStatement(cursorOffset, document))
            {
                if (proofPosition.getAnnotation().isCollapsed())
                {
                    proofPosition.getAnnotation().markExpanded();
                    modifiedAnnotations.add(proofPosition.getAnnotation());
                }
            } else if (!proofPosition.getAnnotation().isCollapsed())
            {
                proofPosition.getAnnotation().markCollapsed();
                modifiedAnnotations.add(proofPosition.getAnnotation());
            }
        } catch (BadLocationException e)
        {
            Activator.getDefault().logError("Error changing expansion state of proofs.", e);
        }
    }

    editor.modifyProjectionAnnotations((Annotation[]) modifiedAnnotations
            .toArray(new ProjectionAnnotation[modifiedAnnotations.size()]));
}
项目:ncl30-eclipse    文件:NCLEditor.java   
public void updateFoldingStructure(ArrayList positions) {
    Annotation[] annotations = new Annotation[positions.size()];

    // this will hold the new annotations along
    // with their corresponding positions
    HashMap newAnnotations = new HashMap();
    HashMap<Position, Boolean> oldPosisitions = new HashMap<Position, Boolean>();
    if (oldAnnotations != null) {
        for (int i = 0; i < oldAnnotations.length; i++) {
            ProjectionAnnotation tmp = (ProjectionAnnotation) oldAnnotations[i];
            if (tmp.isCollapsed()) {
                oldPosisitions.put(annotationModel.getPosition(tmp), true);
            }
        }
    }

    for (int i = 0; i < positions.size(); i++) {
        ProjectionAnnotation annotation = new ProjectionAnnotation();
        if (oldPosisitions.containsKey(positions.get(i))
                && oldPosisitions.get(positions.get(i)).booleanValue()) // if
            // was
            // collapsed
            annotation.markCollapsed();
        newAnnotations.put(annotation, positions.get(i));
        annotations[i] = annotation;
    }

    // Melhorar isto aqui Remover apenas as necessarias e nao todas as
    // antigas
    annotationModel.modifyAnnotations(oldAnnotations, newAnnotations, null);

    oldAnnotations = annotations;
}
项目:bts    文件:DefaultFoldingStructureProvider.java   
@SuppressWarnings("unchecked")
protected Annotation[] mergeFoldingRegions(Collection<FoldedPosition> foldedPositions,
        ProjectionAnnotationModel projectionAnnotationModel) {
    List<Annotation> deletions = new ArrayList<Annotation>();
    for (Iterator<Annotation> iterator = projectionAnnotationModel.getAnnotationIterator(); iterator.hasNext();) {
        Annotation annotation = iterator.next();
        if (annotation instanceof ProjectionAnnotation) {
            Position position = projectionAnnotationModel.getPosition(annotation);
            if (!foldedPositions.remove(position)) {
                deletions.add(annotation);
            }
        }
    }
    return deletions.toArray(new Annotation[deletions.size()]);
}
项目:bts    文件:DefaultFoldingStructureProvider.java   
protected void updateFoldingRegions(boolean allowCollapse, ProjectionAnnotationModel model,
        Collection<FoldedPosition> foldedPositions, Annotation[] deletions) {
    Map<ProjectionAnnotation, Position> additionsMap = Maps.newHashMap();
    for (FoldedPosition foldedPosition: foldedPositions) {
        addProjectionAnnotation(allowCollapse, foldedPosition, additionsMap);
    }
    if (deletions.length != 0 || additionsMap.size() != 0) {
        model.modifyAnnotations(deletions, additionsMap, new Annotation[] {});
    }
}
项目:velocity-edit    文件:VelocityFoldingStructureProvider.java   
private void updateFoldingRegions(ProjectionAnnotationModel model, Set currentRegions)
{
    Annotation[] deletions = computeDifferences(model, currentRegions);
    Map additionsMap = new HashMap();
    for (Iterator iter = currentRegions.iterator(); iter.hasNext();)
        additionsMap.put(new ProjectionAnnotation(), iter.next());
    if ((deletions.length != 0 || additionsMap.size() != 0) && (fProgressMonitor == null || !fProgressMonitor.isCanceled())) model.modifyAnnotations(deletions, additionsMap, new Annotation[] {});
}
项目:velocity-edit    文件:VelocityEditor.java   
public void fold(int foldingStart, int foldingEnd)
{
    Position foldingPosition = new Position(foldingStart, foldingEnd - foldingStart);
    if (getSourceViewer().getAnnotationModel() != null)
    {
        getSourceViewer().getAnnotationModel().addAnnotation(new ProjectionAnnotation(), foldingPosition);
    }
}
项目:KaiZen-OpenAPI-Editor    文件:JsonEditor.java   
public void updateFoldingStructure(List<Position> positions) {
    final Map<Annotation, Position> newAnnotations = new HashMap<Annotation, Position>();
    for (Position position : positions) {
        newAnnotations.put(new ProjectionAnnotation(), position);
    }

    annotationModel.modifyAnnotations(oldAnnotations, newAnnotations, null);
    oldAnnotations = newAnnotations.keySet().toArray(new Annotation[0]);
}
项目:gama    文件:GamaFoldingActionGroup.java   
GamaFoldingActionGroup(final ITextEditor editor, final ITextViewer viewer) {
    super(editor, viewer);
    if (!(viewer instanceof ProjectionViewer)) {
        return;
    }
    this.viewwer = (ProjectionViewer) viewer;

    collapseStrings = new FoldingAction() { // $NON-NLS-1$
        // private final EClass type = GamlPackage.

        @Override
        public void run() {
            final ProjectionAnnotationModel model = viewwer.getProjectionAnnotationModel();
            final Iterator<?> iterator = model.getAnnotationIterator();
            final List<Annotation> toCollapse = new ArrayList<Annotation>();
            while (iterator.hasNext()) {
                final Object next = iterator.next();
                if (next instanceof ProjectionAnnotation) {
                    final ProjectionAnnotation pa = (ProjectionAnnotation) next;
                    final Position position = model.getPosition(pa);
                    if (position instanceof TypedFoldedPosition)
                        if (((TypedFoldedPosition) position).getType().equals("__comment")) {
                            pa.markCollapsed();
                            toCollapse.add(pa);
                        }
                }
            }
            model.modifyAnnotations(null, null, toCollapse.toArray(new Annotation[0]));
        }
    };
    collapseStrings.setActionDefinitionId("org.xtext.example.folding.ui.folding.collapseStrings");
    editor.setAction("FoldingCollapseStrings", collapseStrings); //$NON-NLS-1$

}
项目:APICloud-Studio    文件:CommonReconcilingStrategy.java   
protected void calculatePositions(boolean initialReconcile, IProgressMonitor monitor, IParseRootNode ast)
{
    if (monitor != null && monitor.isCanceled())
    {
        return;
    }

    // Folding...

    try
    {
        Map<ProjectionAnnotation, Position> positions = folder.emitFoldingRegions(initialReconcile, monitor, ast);
        synchronized (fPositionsLock)
        {
            fPositions = positions;
        }
    }
    catch (BadLocationException e)
    {
        IdeLog.logError(CommonEditorPlugin.getDefault(), e);
    }
    // If we had all positions we shouldn't probably listen to cancel, but we may have exited emitFoldingRegions
    // early because of cancel...
    if (monitor != null && monitor.isCanceled() || !shouldUpdatePositions(folder))
    {
        return;
    }

    updatePositions();
}
项目:APICloud-Studio    文件:CommonReconcilingStrategy.java   
/**
 * Update the folding positions in the document
 */
protected void updatePositions()
{
    AbstractThemeableEditor editor = fEditor;
    if (editor != null)
    {
        HashMap<ProjectionAnnotation, Position> positions;
        synchronized (fPositionsLock)
        {
            // Create a copy to pass to updateFoldingStructure, as it may take more time there.
            positions = new HashMap<ProjectionAnnotation, Position>(fPositions);
        }
        editor.updateFoldingStructure(positions);
    }
}
项目:APICloud-Studio    文件:CommonReconcilingStrategy.java   
public Map<ProjectionAnnotation, Position> getPositions()
{
    synchronized (fPositionsLock)
    {
        return new HashMap<ProjectionAnnotation, Position>(fPositions);
    }
}
项目:APICloud-Studio    文件:AbstractFoldingEditor.java   
public void updateFoldingStructure(Map<ProjectionAnnotation, Position> annotations)
{
    synchronized (lockUpdateFoldingStructure)
    {
        List<Annotation> deletions = new ArrayList<Annotation>();
        Collection<Position> additions = annotations.values();
        ProjectionAnnotationModel currentModel = getAnnotationModel();
        if (currentModel == null)
        {
            return;
        }
        for (@SuppressWarnings("rawtypes")
        Iterator iter = currentModel.getAnnotationIterator(); iter.hasNext();)
        {
            Object annotation = iter.next();
            if (annotation instanceof ProjectionAnnotation)
            {
                Position position = currentModel.getPosition((Annotation) annotation);
                if (additions.contains(position))
                {
                    additions.remove(position);
                }
                else
                {
                    deletions.add((Annotation) annotation);
                }
            }
        }
        if (annotations.size() != 0 || deletions.size() != 0)
        {
            currentModel.modifyAnnotations(deletions.toArray(new Annotation[deletions.size()]), annotations, null);
        }
    }
}
项目:Pydev    文件:CodeFoldingSetter.java   
/**
 * Given the ast, create the needed marks and set them in the passed model.
 */
private synchronized void addMarksToModel(SimpleNode root2, ProjectionAnnotationModel model) {
    try {
        if (model != null) {
            ArrayList<Annotation> existing = new ArrayList<Annotation>();

            //get the existing annotations
            Iterator<Annotation> iter = model.getAnnotationIterator();
            while (iter != null && iter.hasNext()) {
                Annotation element = iter.next();
                existing.add(element);
            }

            //now, remove the annotations not used and add the new ones needed
            IDocument doc = editor.getDocument();
            if (doc != null) { //this can happen if we change the input of the editor very quickly.
                boolean foldInitial = initialFolding;
                initialFolding = false;
                List<FoldingEntry> marks = getMarks(doc, root2, foldInitial);
                Map<ProjectionAnnotation, Position> annotationsToAdd;
                if (marks.size() > OptimizationRelatedConstants.MAXIMUM_NUMBER_OF_CODE_FOLDING_MARKS) {
                    annotationsToAdd = new HashMap<ProjectionAnnotation, Position>();

                } else {
                    annotationsToAdd = getAnnotationsToAdd(marks, model, existing);
                }

                model.replaceAnnotations(existing.toArray(new Annotation[existing.size()]), annotationsToAdd);
            }
        }
    } catch (Exception e) {
        Log.log(e);
    }
}