Reviewed by Eric.
authorthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 29 Aug 2006 21:58:08 +0000 (21:58 +0000)
committerthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 29 Aug 2006 21:58:08 +0000 (21:58 +0000)
        Bug 10632: Objective-C DOM should use the @property syntax for DOM attributes
        http://bugzilla.opendarwin.org/show_bug.cgi?id=10632

        Generate @property when MACOSX_DEPLOYMENT_TARGET is >= 10.5.
        This is backwards compatible with the getter/setter methods.
        Generate setter arguments with a "new" prefix to avoid the property
        name conflict warning. Also removes some whitespace and the comments
        that we added to the headers. This makes the headers look like what we ship now.

        * bindings/objc/DOMCSS.mm:
        (-[DOMDocument getComputedStyle::]): renamed a local variable to avoid the property name conflict.
        (-[DOMDocument getMatchedCSSRules::]): ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: generate @property in the headers.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@16100 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/bindings/objc/DOMCSS.mm
WebCore/bindings/scripts/CodeGeneratorObjC.pm

index d9faa69bb8b40ed3c2cac7986d1268f4d04c5b9b..7c583f3f659d6802619d949aee917de7ae1529dd 100644 (file)
@@ -1,3 +1,21 @@
+2006-08-29  Timothy Hatcher  <timothy@apple.com>
+
+        Reviewed by Eric.
+
+        Bug 10632: Objective-C DOM should use the @property syntax for DOM attributes
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=10632
+
+        Generate @property when MACOSX_DEPLOYMENT_TARGET is >= 10.5.
+        This is backwards compatible with the getter/setter methods.
+        Generate setter arguments with a "new" prefix to avoid the property
+        name conflict warning. Also removes some whitespace and the comments
+        that we added to the headers. This makes the headers look like what we ship now.
+
+        * bindings/objc/DOMCSS.mm:
+        (-[DOMDocument getComputedStyle::]): renamed a local variable to avoid the property name conflict.
+        (-[DOMDocument getMatchedCSSRules::]): ditto.
+        * bindings/scripts/CodeGeneratorObjC.pm: generate @property in the headers.
+
 2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed and landed by Anders.
index deec324baf8b477e5b00ad0463552a2946bd0d34..729ea86524d51e70d4ccc5db4fa5dcf2753b711e 100644 (file)
@@ -2488,24 +2488,24 @@ void removeWrapperForRGB(RGBA32 value)
 - (DOMCSSStyleDeclaration *)getComputedStyle:(DOMElement *)elt :(NSString *)pseudoElt
 {
     Element* element = [elt _element];
-    AbstractView* defaultView = [self _document]->defaultView();
+    AbstractView* dv = [self _document]->defaultView();
     String pseudoEltString(pseudoElt);
     
-    if (!defaultView)
+    if (!dv)
         return nil;
     
-    return [DOMCSSStyleDeclaration _styleDeclarationWith:defaultView->getComputedStyle(element, pseudoEltString.impl()).get()];
+    return [DOMCSSStyleDeclaration _styleDeclarationWith:dv->getComputedStyle(element, pseudoEltString.impl()).get()];
 }
 
 - (DOMCSSRuleList *)getMatchedCSSRules:(DOMElement *)elt :(NSString *)pseudoElt
 {
-    AbstractView* defaultView = [self _document]->defaultView();
+    AbstractView* dv = [self _document]->defaultView();
 
-    if (!defaultView)
+    if (!dv)
         return nil;
     
     // The parameter of "false" is handy for the DOM inspector and lets us see user agent and user rules.
-    return [DOMCSSRuleList _ruleListWith:defaultView->getMatchedCSSRules([elt _element], String(pseudoElt).impl(), false).get()];
+    return [DOMCSSRuleList _ruleListWith:dv->getMatchedCSSRules([elt _element], String(pseudoElt).impl(), false).get()];
 }
 
 @end
index d57fb933ace7952b67e27a9e9a246c229d2ad457..3f26ee765685a7580e1918a2f66f916a60a253c0 100644 (file)
@@ -37,7 +37,6 @@ my %headerForwardDeclarationsForProtocols = ();
 my $exceptionInit = "WebCore::ExceptionCode ec = 0;";
 my $exceptionRaiseOnError = "raiseOnDOMError(ec);";
 
-
 # Default Licence Templates
 my $headerLicenceTemplate = << "EOF";
 /*
@@ -395,7 +394,6 @@ sub AddIncludesForType
         $implIncludes{"DOMImplementationFront.h"} = 1;
     }
 
-
     # Add type specific internal types.
     $implIncludes{"DOMHTMLInternal.h"} = 1 if ($type =~ /^HTML/);
 
@@ -439,6 +437,7 @@ sub GenerateHeader
             
             push(@headerConstants, $output);
         }
+
         my $combinedConstants = join(",\n", @headerConstants);
 
         # FIXME: the formatting of the enums should line up the equal signs.
@@ -475,30 +474,38 @@ sub GenerateHeader
             my $attributeIsReadonly = ($attribute->type =~ /^readonly/);
             my $catagory = $attribute->signature->extendedAttributes->{"ObjCCatagory"};
 
-            # - GETTER
-            my $getter = "- (" . $attributeType . ")" . $attributeName . ";\n";
-            
-            if ($catagory) {
-                push(@{ $hashOfCatagories{$catagory} }, $getter);
+            if ($ENV{"MACOSX_DEPLOYMENT_TARGET"} >= 10.5) {
+                my $property = "\@property" . ($attributeIsReadonly ? "(readonly)" : "") . " " . $attributeType . ($attributeType =~ /\*$/ ? "" : " ") . $attributeName . ";\n";
+
+                if ($catagory) {
+                    push(@{ $hashOfCatagories{$catagory} }, $property);
+                } else {
+                    push(@headerAttributes, $property);
+                }
             } else {
-                push(@headerAttributes, $getter);
-            }
+                # - GETTER
+                my $getter = "- (" . $attributeType . ")" . $attributeName . ";\n";
 
-            
-            # - SETTER
-            if (!$attributeIsReadonly) {
-                my $setter = "- (void)set" . ucfirst($attributeName) . ":(" . $attributeType . ")" . $attributeName . ";\n";
-                
                 if ($catagory) {
-                    push(@{ $hashOfCatagories{$catagory} }, $setter);
+                    push(@{ $hashOfCatagories{$catagory} }, $getter);
                 } else {
-                    push(@headerAttributes, $setter);
+                    push(@headerAttributes, $getter);
+                }
+
+                # - SETTER
+                if (!$attributeIsReadonly) {
+                    my $setter = "- (void)set" . ucfirst($attributeName) . ":(" . $attributeType . ")new" . ucfirst($attributeName) . ";\n";
+                    
+                    if ($catagory) {
+                        push(@{ $hashOfCatagories{$catagory} }, $setter);
+                    } else {
+                        push(@headerAttributes, $setter);
+                    }
                 }
             }
         }
 
         if (@headerAttributes > 0) {
-            push(@headerContent, "\n// Attributes\n");
             push(@headerContent, @headerAttributes);
         }
     }
@@ -537,17 +544,16 @@ sub GenerateHeader
         }
 
         if (@headerFunctions > 0) {
-            push(@headerContent, "\n// Methods\n");
+            push(@headerContent, "\n");
             push(@headerContent, @headerFunctions);
         }
     }
 
     # - End @interface 
-    push(@headerContent, "\n\@end\n");
+    push(@headerContent, "\@end\n");
     
     # Add additional Catagories (if any)
     if (scalar(keys(%hashOfCatagories))) {
-        
         foreach(sort(keys(%hashOfCatagories))) {
             my $catagory = $_;
 
@@ -575,7 +581,6 @@ sub GenerateImplementation
     my $implClassName = GetImplClassName($interfaceName);
     my $parentImplClassName = GetParentImplClassName($dataNode);
 
-
     my $numAttributes = @{$dataNode->attributes};
     my $numFunctions = @{$dataNode->functions};
     my $hasFunctionsOrAttributes = $numAttributes + $numFunctions;
@@ -626,7 +631,6 @@ sub GenerateImplementation
     if ($hasFunctionsOrAttributes) {
         if ($parentImplClassName eq "Object") {
             # Only generate 'dealloc' and 'finalize' methods for direct subclasses of DOMObject.
-
             push(@implContent, "- (void)dealloc\n");
             push(@implContent, "{\n");
             push(@implContent, "    if (_internal)\n");
@@ -645,9 +649,7 @@ sub GenerateImplementation
             push(@implContent, "{\n");
             push(@implContent, "    return DOM_cast<$implClassName *>(_internal);\n");
             push(@implContent, "}\n\n");
-
         } else {
-    
             my $internalBaseType;
             if ($interfaceName eq "CSSPrimitiveValue") {
                 # FIXME: this should be a regex matching CSS...Value.
@@ -658,6 +660,7 @@ sub GenerateImplementation
             } else {
                 $internalBaseType = "WebCore::Node"
             }
+
             push(@implContent, "- ($implClassName *)$internalCastingName\n");
             push(@implContent, "{\n");
             push(@implContent, "    return static_cast<$implClassName *>(DOM_cast<$internalBaseType *>(_internal));\n");
@@ -736,14 +739,14 @@ sub GenerateImplementation
 
             # - SETTER
             if (!$attributeIsReadonly) {
-            
                 # Exception handling
                 my $hasSetterException = @{$attribute->setterExceptions};
                 
                 $attributeName = "set" . ucfirst($attributeName);
                 my $setterName = "set" . ucfirst($interfaceName);
+                my $argName = "new" . ucfirst($interfaceName);
 
-                my $setterSig = "- (void)$setterName:($attributeType)$interfaceName\n";
+                my $setterSig = "- (void)$setterName:($attributeType)$argName\n";
                 
                 push(@implContent, $setterSig);
                 push(@implContent, "{\n");
@@ -751,13 +754,13 @@ sub GenerateImplementation
                 if ($hasSetterException) {
                     # FIXME: asserts exsist in the exsisting bindings, but I am unsure why they are 
                     # there in the first place;
-                    push(@implContent, "    ASSERT($interfaceName);\n\n");
+                    push(@implContent, "    ASSERT($argName);\n\n");
                 
                     push(@implContent, "    $exceptionInit\n");
-                    push(@implContent, "    $implementation->$attributeName($interfaceName, ec);\n");
+                    push(@implContent, "    $implementation->$attributeName($argName, ec);\n");
                     push(@implContent, "    $exceptionRaiseOnError\n");
                 } else {
-                    push(@implContent, "    $implementation->$attributeName($interfaceName);\n");
+                    push(@implContent, "    $implementation->$attributeName($argName);\n");
                 }
                 
                 push(@implContent, "}\n\n");
@@ -819,7 +822,6 @@ sub GenerateImplementation
 
             if ($returnType eq "void") {
                 # Special case 'void' return type.
-
                 my $functionContentHead = "$implementation->$functionName(";
                 my $functionContentTail = ");";
                 my $content = "";
@@ -846,9 +848,7 @@ sub GenerateImplementation
                 } else {
                     push(@functionContent, "    $content\n");
                 }
-
             } else {
-                
                 my $functionContentHead = $implementation . "->" . $functionName . "(";
                 my $functionContentTail = ")";
 
@@ -892,7 +892,6 @@ sub GenerateImplementation
                     }
                 }
                 
-                
                 if ($raisesExceptions) {
                     # Differentiated between when the return type is a pointer and
                     # not for white space issue (ie. Foo *result vs. int result).
@@ -921,6 +920,7 @@ sub GenerateImplementation
                 push(@implContent, "        [NSException raise:NSGenericException format:\@\"createExpression currently does not work with custom NS resolvers\"];\n");
                 push(@implContent, "    DOMNativeXPathNSResolver *nativeResolver = (DOMNativeXPathNSResolver *)$paramName;\n\n");
             }
+
             push(@implContent, @functionContent);
             push(@implContent, "}\n\n");
             
@@ -952,7 +952,7 @@ sub WriteData
         @implContent = "";    
         %implIncludes = ();
     }
-        
+
     if (defined($HEADER)) {
         # Write content to file.
         print $HEADER @headerContentHeader;