Changeset 3360 for devel-tools/trunk


Ignore:
Timestamp:
Feb 4, 2008, 11:11:41 PM (13 years ago)
Author:
yura
Message:
  • Simplification of annotation,
File:
1 edited

Legend:

Unmodified
Added
Removed
  • devel-tools/trunk/eclipse/org.refal.plus.rfpdt.editor/src/org/refal/plus/rfpdt/editor/RfpEditor.java

    r3359 r3360  
    4343import org.refal.plus.rfpdt.comp.ast.AstFuncDef;
    4444import org.refal.plus.rfpdt.comp.ast.AstImplem;
    45 import org.refal.plus.rfpdt.comp.ast.AstName;
    4645import org.refal.plus.rfpdt.comp.ast.AstNode;
    4746import org.refal.plus.rfpdt.comp.ast.AstRef;
     
    5150
    5251public class RfpEditor extends TextEditor {
     52    private static final AstNode[] empty = new AstNode[0];
    5353    private static int editorCount = 0;
    5454    private static ColorManager colorManager = null;
     
    7070        private final ArrayList<Annotation> annotations = new ArrayList<Annotation>();
    7171
    72         // public void selectionChanged (IWorkbenchPart part, ISelection selection) {}
    73 
    74         public void selectionChanged (SelectionChangedEvent event) {
    75             if (astImplem == null)
    76                 return;
    77             ISelection selection = event.getSelection();
    78             if (!(selection instanceof ITextSelection)) {
    79                 return;
    80             }
    81             ITextSelection textSelection = (ITextSelection) selection;
    82             int length = textSelection.getLength();
    83             if (length != 0)
    84                 return;
    85             int offset = textSelection.getOffset();
    86             AstNode astNode = SearchVisitor.search(astImplem, offset);
     72        private AstNode[] getNodeList (AstImplem astImplem, int offset) {
     73            AstNode astNode = SameSearchVisitor.search(astImplem, offset);
    8774            if (astNode instanceof AstVar) {
    8875                AstVar astVar = ((AstVar) astNode).varDefinition;
    89                 if (astVar == null)
    90                     return;
    91                 IAnnotationModel annotationModel = getDocumentProvider().getAnnotationModel(getEditorInput());
    92                 synchronized (getLockObject(annotationModel)) {
    93                     for (Annotation annotation : annotations)
    94                         annotationModel.removeAnnotation(annotation);
    95                     annotations.clear();
    96                     if (astVar.varUses == null)
    97                         return;
    98                     for (AstVar v : astVar.varUses) {
    99                         Annotation annotation = new Annotation("org.eclipse.jdt.ui.occurrences", false, v.getTypeAsString()+"."+v.name.identifier);
    100                         annotations.add(annotation);
    101                         annotationModel.addAnnotation(annotation, new Position(v.pos.charStart, v.pos.charEnd
    102                                 - v.pos.charStart));
    103                     }
    104                 }
     76                if (astVar == null || astVar.varUses == null)
     77                    return empty;
     78                return astVar.varUses.toArray(new AstNode[astVar.varUses.size()]);
    10579            } else if (astNode instanceof AstFence) {
    10680                AstFence astFence = (AstFence) astNode;
    107                 IAnnotationModel annotationModel = getDocumentProvider().getAnnotationModel(getEditorInput());
    108                 synchronized (getLockObject(annotationModel)) {
    109                     for (Annotation annotation : annotations)
    110                         annotationModel.removeAnnotation(annotation);
    111                     annotations.clear();
    112                     if (astFence.cuts == null)
    113                         return;
    114                     Annotation annotation = new Annotation("org.eclipse.jdt.ui.occurrences", false, "\\?");
    115                     annotations.add(annotation);
    116                     annotationModel.addAnnotation(annotation, new Position(astFence.pos.charStart, astFence.pos.charEnd
    117                             - astFence.pos.charStart));
    118                     for (AstCut v : astFence.cuts) {
    119                         annotation = new Annotation("org.eclipse.jdt.ui.occurrences", false, "\\!");
    120                         annotations.add(annotation);
    121                         annotationModel.addAnnotation(annotation, new Position(v.pos.charStart, v.pos.charEnd
    122                                 - v.pos.charStart));
    123                     }
    124                 }
     81                if (astFence.uses == null)
     82                    return empty;
     83                return astFence.uses.toArray(new AstNode[astFence.uses.size()]);
    12584            } else if (astNode instanceof AstCut) {
    126                 AstCut astCut = (AstCut) astNode;
    127                 IAnnotationModel annotationModel = getDocumentProvider().getAnnotationModel(getEditorInput());
    128                 synchronized (getLockObject(annotationModel)) {
    129                     for (Annotation annotation : annotations)
    130                         annotationModel.removeAnnotation(annotation);
    131                     annotations.clear();
    132                     if (astCut.fence == null)
    133                         return;
    134                     AstFence astFence = astCut.fence;
    135                     if (astFence.cuts == null)
    136                         return;
    137                     Annotation annotation = new Annotation("org.eclipse.jdt.ui.occurrences", false, "\\?");
    138                     annotations.add(annotation);
    139                     annotationModel.addAnnotation(annotation, new Position(astFence.pos.charStart, astFence.pos.charEnd
    140                             - astFence.pos.charStart));
    141                     for (AstCut v : astFence.cuts) {
    142                         annotation = new Annotation("org.eclipse.jdt.ui.occurrences", false, "\\!");
    143                         annotations.add(annotation);
    144                         annotationModel.addAnnotation(annotation, new Position(v.pos.charStart, v.pos.charEnd
    145                                 - v.pos.charStart));
    146                     }
    147                 }
     85                AstFence astFence = ((AstCut) astNode).fence;
     86                if (astFence == null || astFence.uses == null)
     87                    return empty;
     88                return astFence.uses.toArray(new AstNode[astFence.uses.size()]);
    14889            } else {
    14990                AstDecl astDecl = null;
     
    15697                else if (astNode instanceof AstCall)
    15798                    astDecl = ((AstCall) astNode).funcDecl;
     99                else
     100                    return null;
    158101                if (astDecl == null)
    159                     return;
    160                 IAnnotationModel annotationModel = getDocumentProvider().getAnnotationModel(getEditorInput());
    161                 synchronized (getLockObject(annotationModel)) {
    162                     for (Annotation annotation : annotations)
    163                         annotationModel.removeAnnotation(annotation);
    164                     annotations.clear();
    165                     if (astDecl.uses == null)
    166                         return;
    167                     for (AstName v : astDecl.uses) {
    168                         if (! astImplem.pos.rfpResource.equals(v.pos.rfpResource))
    169                             continue;
    170                         Annotation annotation = new Annotation("org.eclipse.jdt.ui.occurrences", false, v.identifier);
    171                         annotations.add(annotation);
    172                         annotationModel.addAnnotation(annotation, new Position(v.pos.charStart, v.pos.charEnd
    173                                 - v.pos.charStart));
    174                     }
     102                    return empty;
     103                return astDecl.uses.toArray(new AstNode[astDecl.uses.size()]);
     104            }
     105        }
     106
     107        // public void selectionChanged (IWorkbenchPart part, ISelection selection) {}
     108
     109        public void selectionChanged (SelectionChangedEvent event) {
     110            if (astImplem == null)
     111                return;
     112            ISelection selection = event.getSelection();
     113            if (!(selection instanceof ITextSelection))
     114                return;
     115            ITextSelection textSelection = (ITextSelection) selection;
     116            int length = textSelection.getLength();
     117            if (length != 0)
     118                return;
     119            int offset = textSelection.getOffset();
     120            AstNode[] astNodeList = getNodeList(astImplem, offset);
     121            if (astNodeList == null)
     122                return;
     123            IAnnotationModel annotationModel = getDocumentProvider().getAnnotationModel(getEditorInput());
     124            synchronized (getLockObject(annotationModel)) {
     125                for (Annotation annotation : annotations)
     126                    annotationModel.removeAnnotation(annotation);
     127                annotations.clear();
     128                for (AstNode astNode : astNodeList) {
     129                    Annotation annotation = new Annotation("org.eclipse.jdt.ui.occurrences", false, astNode.toString());
     130                    annotations.add(annotation);
     131                    annotationModel.addAnnotation(annotation, new Position(astNode.pos.charStart, astNode.pos.charEnd
     132                            - astNode.pos.charStart));
    175133                }
    176134            }
Note: See TracChangeset for help on using the changeset viewer.