diff -r 9f87a1830611 -r de1813ce77de src/JavaClass.st --- a/src/JavaClass.st Thu Oct 20 12:38:32 2011 +0000 +++ b/src/JavaClass.st Thu Oct 20 14:37:20 2011 +0000 @@ -2032,25 +2032,45 @@ "Created: / 30-05-2011 / 23:07:18 / Marcel Hlopko " ! -includesBehavior: aClass - ^ (aClass isJavaClass not or: [ aClass isInterface not ]) - ifTrue: [ self name == aClass name or:[ super includesBehavior: aClass ]] - ifFalse: [ - self name == aClass name or: [ self allInterfaces includes: aClass ] - ]. +includesBehavior: aClass + + "Answer true, iff + (i) receiver == aClass + (ii) aClass is ordinary class and receiver inherits from + aClass + (iii) aClass is interface and receiver or one of its superclasses + implements that interface + " + + self == aClass ifTrue:[^true]. + aClass isJavaClass ifFalse:[^false]. + + ^aClass isInterface ifTrue:[ + self allInterfaces includes: aClass + ] ifFalse:[ + super includesBehavior: aClass + ] "Created: / 05-02-2011 / 23:44:00 / Jan Vrany " - "Modified: / 11-02-2011 / 09:12:27 / Jan Vrany " + "Modified: / 20-10-2011 / 16:11:27 / Jan Vrany " ! -isSubclassOf: aJavaClass -|tmpClass| - -tmpClass := self superclass. -[tmpClass isJavaClass] whileTrue: [tmpClass = aJavaClass ifTrue:[^true]. tmpClass := tmpClass superclass]. -^false. - - "Created: / 13-04-2011 / 23:18:03 / Marcel Hlopko " +isSubclassOf: aClass + + | cls | + aClass isNil ifTrue:[^false]. + cls := self. + [ cls notNil ] whileTrue:[ + "JV-2011-10-20: Q: is one subclass of another if its + are subclass but loaded using different classloader?" + cls == aClass ifTrue:[ + ^true + ]. + cls := cls superclass. + ]. + ^false + + "Created: / 20-10-2011 / 16:15:17 / Jan Vrany " ! ! !JavaClass methodsFor:'reflection'!