Index: doc/example-scripts/traits-composite.tcl =================================================================== diff -u -rdd169437c7a701da0063a40978614e6148d71221 -r6751144a362a62d47801ee1b59caed7aa85f518e --- doc/example-scripts/traits-composite.tcl (.../traits-composite.tcl) (revision dd169437c7a701da0063a40978614e6148d71221) +++ doc/example-scripts/traits-composite.tcl (.../traits-composite.tcl) (revision 6751144a362a62d47801ee1b59caed7aa85f518e) @@ -31,8 +31,8 @@ # from the base class or other traits. The definition is incomplete # in these regards - :requiredMethods set position - :requiredVariables set collection + :requiredMethods position + :requiredVariables collection } # @@ -53,7 +53,7 @@ } # This trait requires these methods: - :requiredMethods set {setToStart atEnd nextPosition} + :requiredMethods {setToStart atEnd nextPosition} # Require the trait "tPositionableStream" :require trait tPositionableStream @@ -75,7 +75,7 @@ } # This trait requires these methods: - :requiredMethods set {setToEnd nextPosition} + :requiredMethods {setToEnd nextPosition} # Require the trait "tPositionableStream" :require trait tPositionableStream Index: doc/example-scripts/traits-simple.tcl =================================================================== diff -u -rdd169437c7a701da0063a40978614e6148d71221 -r6751144a362a62d47801ee1b59caed7aa85f518e --- doc/example-scripts/traits-simple.tcl (.../traits-simple.tcl) (revision dd169437c7a701da0063a40978614e6148d71221) +++ doc/example-scripts/traits-simple.tcl (.../traits-simple.tcl) (revision 6751144a362a62d47801ee1b59caed7aa85f518e) @@ -40,8 +40,8 @@ # "collection" from the base class. The definition is incomplete in # these regards. - :requiredMethods set position - :requiredVariables set collection + :requiredMethods position + :requiredVariables collection } # Define the class +ReadStream+ with properties +position+ and Index: library/lib/nx-traits.tcl =================================================================== diff -u -racc540eae81024718461724ce69e7971fa9ddfa9 -r6751144a362a62d47801ee1b59caed7aa85f518e --- library/lib/nx-traits.tcl (.../nx-traits.tcl) (revision acc540eae81024718461724ce69e7971fa9ddfa9) +++ library/lib/nx-traits.tcl (.../nx-traits.tcl) (revision 6751144a362a62d47801ee1b59caed7aa85f518e) @@ -113,7 +113,7 @@ # object has the method defined that the trait requires. # nsf::proc checkObject {obj traitName} { - foreach m [$traitName requiredMethods get] { + foreach m [$traitName cget -requiredMethods] { #puts "$m ok? [$obj info methods -closure $m]" if {[$obj info lookup method $m] eq ""} { error "trait $traitName requires $m, which is not defined for $obj" @@ -126,7 +126,7 @@ # class has the method defined that the trait requires. # nsf::proc checkClass {obj traitName} { - foreach m [$traitName requiredMethods get] { + foreach m [$traitName cget -requiredMethods] { #puts "$m ok? [$obj info methods -closure $m]" if {[$obj info methods -closure $m] eq ""} { error "trait $traitName requires $m, which is not defined for $obj" @@ -163,16 +163,19 @@ # nx::Class create nx::Trait -superclass nx::Class { :property {package} - :property -incremental {requiredMethods:0..n ""} - :property -incremental {requiredVariables:0..n ""} + :property {requiredMethods:0..n ""} + :property {requiredVariables:0..n ""} + ::nsf::method::setter [self] requiredMethods:0..n + ::nsf::method::setter [self] requiredVariables:0..n + :public method "require trait" {traitName {nameMap ""}} { # adding a trait to a trait nx::trait::require $traitName nx::trait::add [self] $traitName $nameMap set finalReqMethods {} # remove the methods from the set of required methods, which became available - foreach m [lsort -unique [concat ${:requiredMethods} [$traitName requiredMethods get]]] { + foreach m [lsort -unique [concat ${:requiredMethods} [$traitName cget -requiredMethods]]] { if {[:info methods $m] eq ""} {lappend finalReqMethods $m} } #puts "final reqMethods of [self]: $finalReqMethods // defined=[:info methods]" Index: tests/traits.test =================================================================== diff -u -racc540eae81024718461724ce69e7971fa9ddfa9 -r6751144a362a62d47801ee1b59caed7aa85f518e --- tests/traits.test (.../traits.test) (revision acc540eae81024718461724ce69e7971fa9ddfa9) +++ tests/traits.test (.../traits.test) (revision 6751144a362a62d47801ee1b59caed7aa85f518e) @@ -8,15 +8,15 @@ :public method t1m2 {} {return t1.[current method]} # This trait requires a method "foo" - :requiredMethods add foo + :requiredMethods foo } nx::Trait create t2 { :public method "bar x" {} {return t2.[current methodpath]} :public method "bar y" {} {return t2.[current methodpath]} :public method foo {} {return t2.[current methodpath]} # This trait requires a method "t1m1" - :requiredMethods add t1m1 + :requiredMethods t1m1 } nx::Trait create t3 {