Ignore:
Timestamp:
05/14/14 10:07:49 (10 years ago)
Author:
hkaulbersch
Message:

Changed Validation:
Validation now works between different files
-unused rule
-referenced only ones
-passthrough

Location:
v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineTreeProvider.xtend

    r61 r66  
    1010 */ 
    1111class EbnfOutlineTreeProvider extends org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider { 
    12          
     12         
    1313} 
  • v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.xtend

    r65 r66  
    2020import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf 
    2121import java.util.ArrayList 
     22import org.eclipse.xtext.EcoreUtil2 
     23import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry 
     24import org.eclipse.emf.ecore.util.EcoreUtil 
     25import org.eclipse.emf.common.util.EList 
     26import org.eclipse.xtext.resource.IResourceDescriptions 
     27import com.google.inject.Inject 
     28import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList 
     29import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition 
     30import de.ugoe.cs.swe.bnftools.ebnf.util.EbnfAdapterFactory 
    2231 
    2332/** 
     
    2837class EbnfQuickfixProvider extends org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider { 
    2938 
     39        @Inject 
     40        IResourceDescriptions resourceDescriptions; 
     41 
    3042        //***************************************************************************************** 
    31         //works 
    32         @Fix(EbnfValidator.ruleReferencedOneDescription) 
    33         def void fixInlineRuleReferencedOnce(Issue issue, IssueResolutionAcceptor acceptor) { 
    34                 acceptor.accept( 
    35                         issue, 
    36                         "Inline the rule", 
    37                         "Delete the rule and replace its single reference by the rule's right side", 
    38                         "upcase.png" 
    39                 ) [ element, context | 
    40                         var Rule rule = element as Rule; 
    41                          
    42                         var IXtextDocument xtextDocument = context.getXtextDocument(); 
    43                         var ICompositeNode node = NodeModelUtils.findActualNodeFor(rule); 
    44                         var String nodeText = node.text; 
    45                         var int textLength = nodeText.length - 2; 
    46                         var int offset = node.textRegion.offset; 
    47                         //rename references 
    48                         var ICompositeNode dList = NodeModelUtils.findActualNodeFor(rule.definitionList); 
    49                         var String refText = "(" + dList.text + ")"; 
    50                         var int refLength = rule.name.length; 
    51                         var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule); 
    52                         //is the reference in the rule itself? 
    53                         var boolean foundRule = false; 
    54                         var EObject r = references.get(0) as EObject; 
    55                         var Rule containingRule = null; 
    56                         while (!foundRule) { 
    57                                 r = r.eContainer; 
    58                                 if (r instanceof Rule) { 
    59                                         containingRule = r as Rule; 
    60                                         foundRule = true; 
    61                                 } 
    62                         } 
    63                         if (!rule.equals(containingRule)) { 
    64                                 for (ruleRef : references) { 
    65                                         var ICompositeNode refNode = NodeModelUtils.findActualNodeFor(ruleRef); 
    66                                         var int refOffset = refNode.textRegion.offset; 
    67  
    68                                         xtextDocument.replace(refOffset, refLength, refText); 
    69                                         if (refOffset < offset) { 
    70                                                 offset += refText.length - refLength; 
     43        //works but only in one file 
     44                @Fix(EbnfValidator.ruleReferencedOneDescription) 
     45                def void fixInlineRuleReferencedOnce(Issue issue, IssueResolutionAcceptor acceptor) { 
     46                        acceptor.accept( 
     47                                issue, 
     48                                "Inline the rule", 
     49                                "Delete the rule and replace its single reference by the rule's right side", 
     50                                "upcase.png" 
     51                        ) [ element, context | 
     52                                var Rule rule = element as Rule; 
     53                                var IXtextDocument xtextDocument = context.getXtextDocument(); 
     54                                var ICompositeNode node = NodeModelUtils.findActualNodeFor(rule); 
     55                                var String nodeText = node.text; 
     56                                var int textLength = nodeText.length - 2; 
     57                                var int offset = node.textRegion.offset; 
     58                                //rename references 
     59                                var ICompositeNode dList = NodeModelUtils.findActualNodeFor(rule.definitionList); 
     60                                var String refText = "(" + dList.text + ")"; 
     61                                var int refLength = rule.name.length; 
     62                                var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule); 
     63                                //********************************* 
     64                                //is the reference in the rule itself? 
     65                                var boolean foundRule = false; 
     66                                var EObject r = references.get(0) as EObject; 
     67                                var Rule containingRule = null; 
     68                                while (!foundRule) { 
     69                                        r = r.eContainer; 
     70                                        if (r instanceof Rule) { 
     71                                                containingRule = r as Rule; 
     72                                                foundRule = true; 
    7173                                        } 
    7274                                } 
    73                         } 
    74                         // delete rule 
    75                         xtextDocument.replace(offset, textLength, ""); 
    76                 ] 
    77  
    78         } 
     75                                if (!rule.equals(containingRule)) { 
     76         
     77                                                                        for (ruleRef : references) { 
     78                                                                                var ICompositeNode refNode = NodeModelUtils.findActualNodeFor(ruleRef); 
     79                                                                                var int refOffset = refNode.textRegion.offset; 
     80                                         
     81                                                                                xtextDocument.replace(refOffset, refLength, refText); 
     82                                                                                if (refOffset < offset) { 
     83                                                                                        offset += refText.length - refLength; 
     84                                                                                } 
     85                                                                        } 
     86                                                                         
     87                                // delete rule 
     88                                } 
     89                                 
     90                                xtextDocument.replace(offset, textLength, ""); 
     91                        ] 
     92         
     93                } 
     94         
     95//      // this is not working by unknown reasons  
     96//      @Fix(EbnfValidator.ruleReferencedOneDescription) 
     97//      def void fixInlineRuleReferencedOnce(Issue issue, IssueResolutionAcceptor acceptor) { 
     98//              acceptor.accept( 
     99//                      issue, 
     100//                      "Inline the rule", 
     101//                      "Delete the rule and replace its single reference by the rule's right side", 
     102//                      "upcase.png" 
     103//              ) [ element, context | 
     104//                      var Rule rule = element as Rule; 
     105//                      var DefinitionList dlist = rule.definitionList; 
     106//                      var List<Rule> rules=EbnfAnalysisUtils.getAllRules(rule.eContainer().eContainer() as EtsiBnf); 
     107//                      var SingleDefinition sDef = rules.get(1).definitionList.singleDefinition.get(1); 
     108//                      dlist.singleDefinition.add(sDef); 
     109//                      rule.name="bla"; 
     110//              ] 
     111// 
     112//      } 
    79113 
    80114        //***************************************************************************************** 
    81          
    82115        //              @Fix(EbnfValidator.passthroughRuleDescription) 
    83116        //      def void fixRemovePassthroughRule(Issue issue, IssueResolutionAcceptor acceptor) { 
Note: See TracChangeset for help on using the changeset viewer.