<div class="gmail_quote">2010/9/8 Fariborz Jahanian <span dir="ltr"><<a href="mailto:fjahanian@apple.com">fjahanian@apple.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5"><br>
On Sep 8, 2010, at 11:05 AM, Ted Kremenek wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Sep 8, 2010, at 2:01 AM, Marcin Świderski wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi All<br>
<br>
Is there a check implemented in Clang Checker (maybe not released for XCode yet) that would find errors like in example:<br>
<br>
@interface SomeClass : NSObject {<br>
 NSMutableDictionary *_someObjects;<br>
}<br>
@end<br>
<br>
@implementation SomeClass<br>
- (id)init {<br>
 if ((self = [super init])) {<br>
   _someObject = [NSMutableArray new];<br>
 }<br>
 return self;<br>
}<br>
@end<br>
<br>
Methods 'new' or 'init' return object of type 'id' by convention, but as I experienced it myself it can be unsafe.<br>
<br>
Cheers<br>
Marcin<br>
</blockquote>
<br>
This isn't implemented, but it would be a great check and would be really easy to do.<br>
</blockquote></div></div>
Problem with this is that this is very common form of assignments in objc and checker will get very noisy.<br>
<br>
- Fariborz<br>
<br></blockquote><div>Maybe you missed the point: there's NSMutableArray object assigned to attribute of NSMutableDictionary type, and those types have completly different interfaces. If the programmer would realy want this, he could use attribute of type 'id' and live with possibility of runtime errors.</div>
<div><br></div><div>Possibility for false positives is when we have case in which some class in method new returns object of it's subclass (or maybe completly different class) and the caller uses the true type of returned object. This is however error in code that should be caught, because the caller should not use the true type as it defeats the whole purpose of such abstraction. However the check could honor explicit cast for such cases, as we can assume that the programmer have been warned and knows what he's doing from now on.</div>
<div><br></div><div>As for implementing this check I'm not interested, because I have some C++ checks to do for my thesis right now. However I'm always interested in using/testing checks that provide some more type checking for Objective-C :)</div>
</div>