Fix source-range information for Objective-C properties. Previously,
we were just getting a range covering only the property name, which is
certainly not correct (and broke token annotation, among other
things). 

Also, teach libclang about the relationship between
@synthesize/@dynamic and @property, so we get property name and
cursor-reference information for @synthesize and @dynamic.

llvm-svn: 119409
diff --git a/clang/tools/libclang/CIndexCodeCompletion.cpp b/clang/tools/libclang/CIndexCodeCompletion.cpp
index d0eb5cc..74c3274 100644
--- a/clang/tools/libclang/CIndexCodeCompletion.cpp
+++ b/clang/tools/libclang/CIndexCodeCompletion.cpp
@@ -250,9 +250,20 @@
   llvm::SmallVector<const llvm::MemoryBuffer *, 1> TemporaryBuffers;
 };
 
+/// \brief Tracks the number of code-completion result objects that are 
+/// currently active.
+///
+/// Used for debugging purposes only.
+static unsigned CodeCompletionResultObjects;
+  
 AllocatedCXCodeCompleteResults::AllocatedCXCodeCompleteResults() 
   : CXCodeCompleteResults(), Diag(new Diagnostic),
-    SourceMgr(*Diag, FileMgr, FileSystemOpts) { }
+    SourceMgr(*Diag, FileMgr, FileSystemOpts) { 
+  if (getenv("LIBCLANG_OBJTRACKING")) {
+    ++CodeCompletionResultObjects;
+    fprintf(stderr, "+++ %d completion results\n", CodeCompletionResultObjects);
+  }    
+}
   
 AllocatedCXCodeCompleteResults::~AllocatedCXCodeCompleteResults() {
   for (unsigned I = 0, N = NumResults; I != N; ++I)
@@ -263,6 +274,11 @@
     TemporaryFiles[I].eraseFromDisk();
   for (unsigned I = 0, N = TemporaryBuffers.size(); I != N; ++I)
     delete TemporaryBuffers[I];
+
+  if (getenv("LIBCLANG_OBJTRACKING")) {
+    --CodeCompletionResultObjects;
+    fprintf(stderr, "--- %d completion results\n", CodeCompletionResultObjects);
+  }    
 }
   
 } // end extern "C"