context OO!NamedElement {
	
	// Every NamedElement must define a name
	constraint HasName {
		
		check : self.name <> ""

		message : "Element " + self + " must define a name"
		
	}
} 

context OO!Feature {
	
	// The name of a feature (attribute,referecne,parameter)
	// should start with a lower case letter
	critique NameMustStartWithLowerCase {
		
		guard : self.satisfies("HasName")
		
		check : self.name.substring(0,1) = 
			self.name.substring(0,1).toLowerCase()
		
	}
}

context OO!Class {
	
	// The name of a class should start with
	// an upper case letter
	critique NameShouldStartWithUpperCase {
		
		guard : self.satisfies("HasName")
		
		check : self.name.substring(0,1) = 
			self.name.substring(0,1).toUpperCase()
		
		message : "The name of class " + self.name + 
			" should start with an upper-case letter"
	
		fix {
			title : "Rename class " + self.name + " to " + 
				self.name.firstToUpperCase()
			
			do {
				self.name = self.name.firstToUpperCase();
			}
		}
	}
	
	// A class must not directly or indirectly
	// inherit from itself
	constraint MustNotInheritItself {
		
		check : not self.inherits(self)
		
		message : "Class " + self.name + " inherits itself"
		
	}
	
	// A class is unused when it is not the type of a feature
	// or a parameter and is not extended by another class
	critique UnusedClass {
		
		check : Parameter.allInstances.exists(p|p.type = self) or 
			Feature.allInstances.exists(f|f.type = self) or
			Class.allInstances.exists(c|c.`extends` = self)
		
		message : "Unused class " + self.name
		
		fix {
			title : "Delete class " + self.name
			
			do {
				delete self;
			}
		}
	}
}

// Returns if a class directly or indirectly
// inherits from another class
operation Class inherits(c : Class) : Boolean {
	
	if (self.`extends`.isDefined()) {
		return self.`extends` = c or self.`extends`.inherits(c);
	}
	else {
		return false;
	}
}
