configurationengine/source/cone/validation/builtinvalidators/implml.py
changeset 3 e7e0ae78773e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configurationengine/source/cone/validation/builtinvalidators/implml.py	Tue Aug 10 14:29:28 2010 +0300
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from cone.public import api, plugin
+from cone.validation.implmlvalidation import GlobalValidatorBase
+
+class DuplicateTempFeatureRefValidator(GlobalValidatorBase):
+    """
+    Validator for checking for duplicate refs in temporary variable
+    definitions.
+    """
+    PROBLEM_TYPES = ['model.implml.container.duplicate_tempvar']
+    
+    def validate(self):
+        # Collect a dictionary of all temporary variable locations,
+        # i.e. (file, lineno) tuples
+        tempvar_locations_by_ref = {}
+        for impl in self.context.all_impls:
+            if isinstance(impl, plugin.ImplContainer):
+                for td in impl._tempvar_defs:
+                    lst = tempvar_locations_by_ref.get(td.ref, [])
+                    lst.append((impl.ref, td.lineno))
+                    tempvar_locations_by_ref[td.ref] = lst
+        
+        # Check for duplicates
+        for ref, locations in tempvar_locations_by_ref.iteritems():
+            if len(locations) > 1:
+                for impl_file, lineno in locations:
+                    prob = api.Problem(
+                        msg = "Duplicate temporary variable ref '%s'" % ref,
+                        type = self.PROBLEM_TYPES[0],
+                        line = lineno,
+                        file = impl_file)
+                    self.context.problems.append(prob)
+
+#: List of all built-in ImplML validator classes
+VALIDATOR_CLASSES = [
+    DuplicateTempFeatureRefValidator,
+]