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/src/de/ugoe/cs/swe/bnftools
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/GenerateEBNF.mwe2

    r65 r66  
    7474                fragment = validation.ValidatorFragment auto-inject { 
    7575                    composedCheck = "org.eclipse.xtext.validation.ImportUriValidator" 
    76                     composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator" 
     76                //    composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator" 
    7777                } 
    7878     
     
    115115     
    116116                // provides the necessary bindings for java types integration 
    117 //              fragment = types.TypesGeneratorFragment auto-inject {} 
     117                //fragment = types.TypesGeneratorFragment auto-inject {} 
    118118     
    119119                // generates the required bindings only if the grammar inherits from Xbase 
  • v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfAnalysisUtils.java

    r61 r66  
    55 
    66import org.eclipse.xtext.EcoreUtil2; 
     7import org.eclipse.xtext.resource.IReferenceDescription; 
     8import org.eclipse.xtext.resource.IResourceDescription; 
     9import org.eclipse.xtext.resource.IResourceDescriptions; 
     10 
    711import de.ugoe.cs.swe.bnftools.ebnf.Atom; 
    812import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList; 
     
    8387                return rules; 
    8488        } 
     89         
     90        //---------------------------------------------------------------------------------------------------- 
     91        static public List<Rule> findReferences(Rule rule, IResourceDescriptions resourceDescriptions) { 
     92                List<Rule> ruleReferences = new ArrayList<Rule>(); 
     93                 
     94                final String ruleURIF = rule.eResource().getURIFragment(rule); 
     95                 
     96                for (IResourceDescription resourceDescription : resourceDescriptions 
     97                                .getAllResourceDescriptions()) { 
     98                        if (!resourceDescription.getURI().equals(rule.eResource().getURI())) 
     99                                continue; 
     100                         
     101                        for (IReferenceDescription referenceDescription : resourceDescription 
     102                                        .getReferenceDescriptions()) { 
     103                                if (ruleURIF.equals(referenceDescription.getTargetEObjectUri() 
     104                                                .fragment())) { 
     105                                        ruleReferences.add((Rule) rule.eResource().getEObject(referenceDescription.getTargetEObjectUri().fragment())); 
     106                                } 
     107 
     108                        } 
     109                } 
     110                return ruleReferences; 
     111        } 
    85112} 
  • v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend

    r65 r66  
    1515import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition 
    1616import java.util.ArrayList 
     17import com.google.inject.Inject 
     18import org.eclipse.xtext.resource.IResourceDescriptions 
    1719 
    1820//import java.util.HashMap 
     
    2729class EbnfValidator extends AbstractEbnfValidator { 
    2830 
     31 
     32        @Inject 
     33        IResourceDescriptions resourceDescriptions; 
     34         
     35         
    2936        public static final String ruleReferencedOneDescription = "The rule is only referenced by one other rule"; 
    3037        public static final String passthroughRuleDescription = "The rule is a passthrough rule"; 
     
    4855                        return; 
    4956 
    50                 var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule); 
    51  
    52                 if (references.size() == 1 && rule.rulenumber != 1) { 
     57                var List<Rule> references = EbnfAnalysisUtils.findReferences(rule,resourceDescriptions); 
     58                var List<RuleReference> references1 = EbnfAnalysisUtils.findReferences(rule); 
     59                if (references.size+references1.size == 1 && rule.rulenumber != 1) { 
    5360                        warning(ruleReferencedOneDescription, EbnfPackage$Literals::RULE__NAME, ruleReferencedOneDescription, 
    5461                                rule.name); 
     
    172179 
    173180                var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule); 
    174  
    175                 if ((references.size() == 0) && (rule.getRulenumber() != 1)) 
     181                var List<Rule> references1 = EbnfAnalysisUtils.findReferences(rule,resourceDescriptions); 
     182                if ((references.size+references1.size == 0) && (rule.getRulenumber() != 1)) 
    176183                        warning(unusedRuleDescription, EbnfPackage$Literals::RULE__NAME, unusedRuleDescription, rule.name); 
    177184        } 
     
    214221 
    215222                var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule); 
    216  
     223                var List<Rule> references1 = EbnfAnalysisUtils.findReferences(rule,resourceDescriptions); 
    217224                if (EbnfAnalysisUtils.isPassthroughRule(rule) && rule.rulenumber != 1) { 
    218                         if (references.size() == 0) { 
     225                        if (references.size+references1.size == 0) { 
    219226                                warning(unreferencedPassthroughRuleDescription, EbnfPackage$Literals::RULE__NAME); 
    220227                        } else { 
Note: See TracChangeset for help on using the changeset viewer.