Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

2009-02-02 Thread Archie Cobbs
Disassembling the class file shows this:

String.valueOf(null)
  - INVOKESTATIC java/lang/String.valueOf:([C)Ljava/lang/String;

String.valueOf((Object)null)
  - INVOKESTATIC
java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;

In the case of an ambiguous method call, the compiler chooses the most
specific one. In this case, char[] is a subclass of Object, so char[] is
chosen.

But if there is no most specific one then the compiler gives an ambiguous
method call error.

For example, compile these two classes to see the difference:

Works:

public class Null {
Null() { foobar(null); } // char[] variant most specific
static void foobar(char[] x) { }
static void foobar(Object x) { }
}

Fails:

public class Null {
Null() { foobar(null); }  // compiler error
static void foobar(char[] x) { }
static void foobar(String x) { }
}

Pretty tricky...

-Archie

On Mon, Feb 2, 2009 at 12:31 AM, jan.mate...@rzf.fin-nrw.de wrote:

 Very curious ...

 Source of String.valueOf(Object) from JDK 1.4.2_15

/**
 * Returns the string representation of the codeObject/code
 argument.
 *
 * @param   obj   an codeObject/code.
 * @return  if the argument is codenull/code, then a string equal to
 *  codenull/code; otherwise, the value of
 *  codeobj.toString()/code is returned.
 * @see java.lang.Object#toString()
 */
public static String valueOf(Object obj) {
return (obj == null) ? null : obj.toString();
}


 The same for JDK 1.6.0_10

public static String valueOf(Object obj) {
return (obj == null) ? null : obj.toString();
}


 But indeed:
 Java 1.3.0-C : NPE
 Java 1.4.2_15-b02: NPE
 Java 1.5.0_12-b04: NPE
 Java 1.6.0_02-b05: NPE

 If I add a cast then it works
System.out.println(String.valueOf( (Object)null ));

 So the compiler must bind that to another method than
 String.valueOf(Object) ...


 But of course, simply returning null is much easier ;)



 Jan



  -Ursprüngliche Nachricht-
  Von: Martijn Kruithof [mailto:j...@kruithof.xs4all.nl]
  Gesendet: Samstag, 31. Januar 2009 22:14
  An: Ant Developers List
  Betreff: Re: svn commit: r739577 -
  /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
 
  Doubted it, checked it and it returned NullPointerException.
 
  D:\type Test.java
  public class Test
  {
  public static void main(String[] args)
  {
  System.out.println(String.valueOf(null));
  }
  }
 
  D:\java Test
  Exception in thread main java.lang.NullPointerException
  at java.lang.String.init(Unknown Source)
  at java.lang.String.valueOf(Unknown Source)
  at Test.main(Test.java:6)
 
  br Martijn
 
  Matt Benson schreef:
   I always thought String.valueOf(null) returned null.
Was I on crack?
  
   -Matt
  
   P.S.  Good to see you committing, Martijn...
  
   --- j...@apache.org wrote:
  
  
   Author: jkf
   Date: Sat Jan 31 17:10:50 2009
   New Revision: 739577
  
   URL:
   http://svn.apache.org/viewvc?rev=739577view=rev
   Log:
   Original toString would always throw a NPE.
  
   Modified:
  
  
  
  
  ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  
   Modified:
  
  
  
  ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  
   URL:
  
  
  
  http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apach
  e/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=7
 39577view=diff
  
  
  ==
  
  
   ---
  
  
  
  ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  
   (original)
   +++
  
  
  
  ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  
   Sat Jan 31 17:10:50 2009
   @@ -33,6 +33,6 @@
 * {...@inheritdoc}
 */
public String toString() {
   -return String.valueOf(null);
   +return null;
}
}
  
  
  
  
  
  
  
  
  
  
  -
   To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
   For additional commands, e-mail: dev-h...@ant.apache.org
  
  
 
 
  -
  To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
  For additional commands, e-mail: dev-h...@ant.apache.org
 
 

 -
 To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
 For additional commands, e-mail: dev-h...@ant.apache.org




-- 
Archie L. Cobbs


Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

2009-02-02 Thread Matt Benson
Thanks, Archie!  So String.valueOf((Object) null)
would do it.  Or null.  ;)

-Matt

--- Archie Cobbs archie.co...@gmail.com wrote:

 Disassembling the class file shows this:
 
 String.valueOf(null)
   - INVOKESTATIC
 java/lang/String.valueOf:([C)Ljava/lang/String;
 
 String.valueOf((Object)null)
   - INVOKESTATIC

java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
 
 In the case of an ambiguous method call, the
 compiler chooses the most
 specific one. In this case, char[] is a subclass of
 Object, so char[] is
 chosen.
 
 But if there is no most specific one then the
 compiler gives an ambiguous
 method call error.
 
 For example, compile these two classes to see the
 difference:
 
 Works:
 
 public class Null {
 Null() { foobar(null); } // char[]
 variant most specific
 static void foobar(char[] x) { }
 static void foobar(Object x) { }
 }
 
 Fails:
 
 public class Null {
 Null() { foobar(null); }  // compiler
 error
 static void foobar(char[] x) { }
 static void foobar(String x) { }
 }
 
 Pretty tricky...
 
 -Archie
 
 On Mon, Feb 2, 2009 at 12:31 AM,
 jan.mate...@rzf.fin-nrw.de wrote:
 
  Very curious ...
 
  Source of String.valueOf(Object) from JDK 1.4.2_15
 
 /**
  * Returns the string representation of the
 codeObject/code
  argument.
  *
  * @param   obj   an codeObject/code.
  * @return  if the argument is
 codenull/code, then a string equal to
  *  codenull/code; otherwise, the
 value of
  *  codeobj.toString()/code is
 returned.
  * @see java.lang.Object#toString()
  */
 public static String valueOf(Object obj) {
 return (obj == null) ? null :
 obj.toString();
 }
 
 
  The same for JDK 1.6.0_10
 
 public static String valueOf(Object obj) {
 return (obj == null) ? null :
 obj.toString();
 }
 
 
  But indeed:
  Java 1.3.0-C : NPE
  Java 1.4.2_15-b02: NPE
  Java 1.5.0_12-b04: NPE
  Java 1.6.0_02-b05: NPE
 
  If I add a cast then it works
 System.out.println(String.valueOf( (Object)null
 ));
 
  So the compiler must bind that to another method
 than
  String.valueOf(Object) ...
 
 
  But of course, simply returning null is much
 easier ;)
 
 
 
  Jan
 
 
 
   -Ursprüngliche Nachricht-
   Von: Martijn Kruithof
 [mailto:j...@kruithof.xs4all.nl]
   Gesendet: Samstag, 31. Januar 2009 22:14
   An: Ant Developers List
   Betreff: Re: svn commit: r739577 -
  

/ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  
   Doubted it, checked it and it returned
 NullPointerException.
  
   D:\type Test.java
   public class Test
   {
   public static void main(String[] args)
   {
   System.out.println(String.valueOf(null));
   }
   }
  
   D:\java Test
   Exception in thread main
 java.lang.NullPointerException
   at java.lang.String.init(Unknown
 Source)
   at java.lang.String.valueOf(Unknown
 Source)
   at Test.main(Test.java:6)
  
   br Martijn
  
   Matt Benson schreef:
I always thought String.valueOf(null) returned
 null.
 Was I on crack?
   
-Matt
   
P.S.  Good to see you committing, Martijn...
   
--- j...@apache.org wrote:
   
   
Author: jkf
Date: Sat Jan 31 17:10:50 2009
New Revision: 739577
   
URL:
   
 http://svn.apache.org/viewvc?rev=739577view=rev
Log:
Original toString would always throw a NPE.
   
Modified:
   
   
   
   
  

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
   
Modified:
   
   
   
  

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
   
URL:
   
   
   
  

http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apach
  

e/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=7
  39577view=diff
   
   
  

==
   
   
---
   
   
   
  

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
   
(original)
+++
   
   
   
  

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
   
Sat Jan 31 17:10:50 2009
@@ -33,6 +33,6 @@
  * {...@inheritdoc}
  */
 public String toString() {
-return String.valueOf(null);
+return null;
 }
 }
   
   
   
   
   
   
   
   
   
   
  

-
To unsubscribe, e-mail:
 dev-unsubscr...@ant.apache.org
For additional commands, e-mail:
 dev-h...@ant.apache.org
   
   
  
  
  

-
   To unsubscribe, e-mail:
 dev-unsubscr...@ant.apache.org
   For additional commands, e-mail:
 dev-h...@ant.apache.org
  
  
 
 

-
  To unsubscribe, e-mail:
 dev-unsubscr...@ant.apache.org
  For additional commands, e-mail:
 dev-h...@ant.apache.org
 
 
 
 
 -- 
 Archie L. Cobbs

Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

2009-02-02 Thread Matt Benson
What JDK/JRE is that?  The Sun Java6 API doc still
says it should return null.  Whatta bitch.

-Matt

--- Martijn Kruithof j...@kruithof.xs4all.nl wrote:

 Doubted it, checked it and it returned
 NullPointerException.
 
 D:\type Test.java
 public class Test
 {
 public static void main(String[] args)
 {
 System.out.println(String.valueOf(null));
 }
 }
 
 D:\java Test
 Exception in thread main
 java.lang.NullPointerException
 at java.lang.String.init(Unknown Source)
 at java.lang.String.valueOf(Unknown Source)
 at Test.main(Test.java:6)
 
 br Martijn
 
 Matt Benson schreef:
  I always thought String.valueOf(null) returned
 null.
   Was I on crack?
 
  -Matt
 
  P.S.  Good to see you committing, Martijn...
 
  --- j...@apache.org wrote:
 

  Author: jkf
  Date: Sat Jan 31 17:10:50 2009
  New Revision: 739577
 
  URL:
  http://svn.apache.org/viewvc?rev=739577view=rev
  Log:
  Original toString would always throw a NPE.
 
  Modified:
 
 
  
 

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

  Modified:
 
  
 

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

  URL:
 
  
 

http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=739577view=diff

 

==

  ---
 
  
 

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

  (original)
  +++
 
  
 

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

  Sat Jan 31 17:10:50 2009
  @@ -33,6 +33,6 @@
* {...@inheritdoc}
*/
   public String toString() {
  -return String.valueOf(null);
  +return null;
   }
   }
 
 
 
  
 
 
 

 
 

-
  To unsubscribe, e-mail:
 dev-unsubscr...@ant.apache.org
  For additional commands, e-mail:
 dev-h...@ant.apache.org
 

 
 

-
 To unsubscribe, e-mail:
 dev-unsubscr...@ant.apache.org
 For additional commands, e-mail:
 dev-h...@ant.apache.org
 
 



  

-
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org



AW: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

2009-02-01 Thread Jan.Materne
Very curious ...

Source of String.valueOf(Object) from JDK 1.4.2_15

/**
 * Returns the string representation of the codeObject/code argument.
 *
 * @param   obj   an codeObject/code.
 * @return  if the argument is codenull/code, then a string equal to
 *  codenull/code; otherwise, the value of
 *  codeobj.toString()/code is returned.
 * @see java.lang.Object#toString()
 */
public static String valueOf(Object obj) {
return (obj == null) ? null : obj.toString();
} 


The same for JDK 1.6.0_10

public static String valueOf(Object obj) {
return (obj == null) ? null : obj.toString();
}


But indeed:
Java 1.3.0-C : NPE
Java 1.4.2_15-b02: NPE
Java 1.5.0_12-b04: NPE
Java 1.6.0_02-b05: NPE

If I add a cast then it works
System.out.println(String.valueOf( (Object)null ));

So the compiler must bind that to another method than String.valueOf(Object) ...


But of course, simply returning null is much easier ;)



Jan



 -Ursprüngliche Nachricht-
 Von: Martijn Kruithof [mailto:j...@kruithof.xs4all.nl] 
 Gesendet: Samstag, 31. Januar 2009 22:14
 An: Ant Developers List
 Betreff: Re: svn commit: r739577 - 
 /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
 
 Doubted it, checked it and it returned NullPointerException.
 
 D:\type Test.java
 public class Test
 {
 public static void main(String[] args)
 {
 System.out.println(String.valueOf(null));
 }
 }
 
 D:\java Test
 Exception in thread main java.lang.NullPointerException
 at java.lang.String.init(Unknown Source)
 at java.lang.String.valueOf(Unknown Source)
 at Test.main(Test.java:6)
 
 br Martijn
 
 Matt Benson schreef:
  I always thought String.valueOf(null) returned null.
   Was I on crack?
 
  -Matt
 
  P.S.  Good to see you committing, Martijn...
 
  --- j...@apache.org wrote:
 

  Author: jkf
  Date: Sat Jan 31 17:10:50 2009
  New Revision: 739577
 
  URL:
  http://svn.apache.org/viewvc?rev=739577view=rev
  Log:
  Original toString would always throw a NPE.
 
  Modified:
 
 
  
  
 ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

  Modified:
 
  
  
 ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

  URL:
 
  
  
 http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apach
 e/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=7
39577view=diff

  
 ==
 

  ---
 
  
  
 ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

  (original)
  +++
 
  
  
 ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

  Sat Jan 31 17:10:50 2009
  @@ -33,6 +33,6 @@
* {...@inheritdoc}
*/
   public String toString() {
  -return String.valueOf(null);
  +return null;
   }
   }
 
 
 
  
 
 
 

 
  
 -
  To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
  For additional commands, e-mail: dev-h...@ant.apache.org
 

 
 
 -
 To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
 For additional commands, e-mail: dev-h...@ant.apache.org
 
 

-
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org



Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

2009-01-31 Thread Matt Benson
I always thought String.valueOf(null) returned null.
 Was I on crack?

-Matt

P.S.  Good to see you committing, Martijn...

--- j...@apache.org wrote:

 Author: jkf
 Date: Sat Jan 31 17:10:50 2009
 New Revision: 739577
 
 URL:
 http://svn.apache.org/viewvc?rev=739577view=rev
 Log:
 Original toString would always throw a NPE.
 
 Modified:


ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
 
 Modified:

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
 URL:

http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=739577view=diff

==
 ---

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
 (original)
 +++

ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
 Sat Jan 31 17:10:50 2009
 @@ -33,6 +33,6 @@
   * {...@inheritdoc}
   */
  public String toString() {
 -return String.valueOf(null);
 +return null;
  }
  }
 
 
 



  

-
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org



Re: svn commit: r739577 - /ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java

2009-01-31 Thread Martijn Kruithof

Doubted it, checked it and it returned NullPointerException.

D:\type Test.java
public class Test
{
public static void main(String[] args)
{
System.out.println(String.valueOf(null));
}
}

D:\java Test
Exception in thread main java.lang.NullPointerException
   at java.lang.String.init(Unknown Source)
   at java.lang.String.valueOf(Unknown Source)
   at Test.main(Test.java:6)

br Martijn

Matt Benson schreef:

I always thought String.valueOf(null) returned null.
 Was I on crack?

-Matt

P.S.  Good to see you committing, Martijn...

--- j...@apache.org wrote:

  

Author: jkf
Date: Sat Jan 31 17:10:50 2009
New Revision: 739577

URL:
http://svn.apache.org/viewvc?rev=739577view=rev
Log:
Original toString would always throw a NPE.

Modified:
   



ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  

Modified:



ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  

URL:



http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java?rev=739577r1=739576r2=739577view=diff
  
==
  

---



ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  

(original)
+++



ant/core/trunk/src/main/org/apache/tools/ant/property/NullReturn.java
  

Sat Jan 31 17:10:50 2009
@@ -33,6 +33,6 @@
  * {...@inheritdoc}
  */
 public String toString() {
-return String.valueOf(null);
+return null;
 }
 }








  


-
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

  



-
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org