#FEATURE by cg
authorClaus Gittinger <cg@exept.de>
Mon, 15 Aug 2016 18:10:40 +0200
changeset 4078 49d23af00621
parent 4077 949d81760d9a
child 4079 05771563133b
#FEATURE by cg class: ProjectChecker added: #checkSubProjects changed: #checkPackage additinal checks
ProjectChecker.st
--- a/ProjectChecker.st	Mon Aug 15 18:10:26 2016 +0200
+++ b/ProjectChecker.st	Mon Aug 15 18:10:40 2016 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2006 by eXept Software AG
               All Rights Reserved
@@ -618,6 +620,33 @@
     ^true
 
     "Created: / 11-04-2012 / 12:29:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+checkSubProjects
+    "Checks whether all subprojects listed in #subprojects are present."
+
+    |isValidName subProjectsListed invalidNames validNames subProjectsNotPresent|
+
+    isValidName := 
+        [:prj |
+            (prj first isLetter
+            and:[ ((prj occurrencesOf:$:) <= 1)
+            and:[ ((prj copyReplaceAll:$: with:$/) 
+                        conform:[:ch | ch isLetterOrDigit or:['/-_.' includes:ch]]) ]])
+        ].
+
+    subProjectsListed := currentPackageDef subProjects.
+    invalidNames := subProjectsListed select:[:prj | (isValidName value:prj) not].
+    validNames := subProjectsListed select:isValidName.
+
+    subProjectsNotPresent := validNames select:[:prj | prj asPackageId projectDefinitionClass isNil].
+
+    invalidNames do:[:eachBadName |                                
+        self addProblem: (ProjectProblem newInvalidPackageName badName:eachBadName).
+    ].
+    subProjectsNotPresent do:[:eachMissing |                                
+        self addProblem: (ProjectProblem newProjectDefinitionDoesNotExist missing: eachMissing).
+    ].
 ! !
 
 !ProjectChecker methodsFor:'checks-private'!
@@ -715,13 +744,15 @@
 !
 
 checkPackage
-    (currentPackageDef notNil and:[currentPackageDef isFolderForProjectsDefinition]) ifTrue:[^ self].
-
-    (checkExtensionsOnly ? false) ifFalse:[
-        self checkClassListConsistency.
+    currentPackageDef isNil ifTrue:[^ self].
+    currentPackageDef isFolderForProjectsDefinition ifFalse:[
+        (checkExtensionsOnly ? false) ifFalse:[
+            self checkClassListConsistency.
+        ].
+        self checkExtensionsListConsistency.
+        self checkExtensionsPrerequisites.
     ].
-    self checkExtensionsListConsistency.
-    self checkExtensionsPrerequisites.
+    self checkSubProjects.
 
     "add more here..."
 
@@ -763,14 +794,14 @@
 !ProjectChecker class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.33 2015-02-24 23:50:29 cg Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.33 2015-02-24 23:50:29 cg Exp $'
+    ^ '$Header$'
 !
 
 version_SVN
-    ^ '$Id: ProjectChecker.st,v 1.33 2015-02-24 23:50:29 cg Exp $'
+    ^ '$Id$'
 ! !