--- old/jdk/src/share/classes/java/lang/StackTraceElement.java 2010-11-05 16:04:16.000000000 -0700 +++ new/jdk/src/share/classes/java/lang/StackTraceElement.java 2010-11-05 16:04:16.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package java.lang; +import java.util.Objects; + /** * An element in a stack trace, as returned by {@link * Throwable#getStackTrace()}. Each element represents a single stack frame. @@ -53,26 +55,21 @@ * @param methodName the name of the method containing the execution point * represented by the stack trace element * @param fileName the name of the file containing the execution point - * represented by the stack trace element, or null if + * represented by the stack trace element, or {@code null} if * this information is unavailable * @param lineNumber the line number of the source line containing the * execution point represented by this stack trace element, or * a negative number if this information is unavailable. A value * of -2 indicates that the method containing the execution point * is a native method - * @throws NullPointerException if declaringClass or - * methodName is null + * @throws NullPointerException if {@code declaringClass} or + * {@code methodName} is null * @since 1.5 */ public StackTraceElement(String declaringClass, String methodName, String fileName, int lineNumber) { - if (declaringClass == null) - throw new NullPointerException("Declaring class is null"); - if (methodName == null) - throw new NullPointerException("Method name is null"); - - this.declaringClass = declaringClass; - this.methodName = methodName; + this.declaringClass = Objects.nonNull(declaringClass, "Declaring class is null"); + this.methodName = Objects.nonNull(methodName, "Method name is null"); this.fileName = fileName; this.lineNumber = lineNumber; } @@ -80,13 +77,13 @@ /** * Returns the name of the source file containing the execution point * represented by this stack trace element. Generally, this corresponds - * to the SourceFile attribute of the relevant class + * to the {@code SourceFile} attribute of the relevant {@code class} * file (as per The Java Virtual Machine Specification, Section * 4.7.7). In some systems, the name may refer to some source code unit * other than a file, such as an entry in source repository. * * @return the name of the file containing the execution point - * represented by this stack trace element, or null if + * represented by this stack trace element, or {@code null} if * this information is unavailable. */ public String getFileName() { @@ -96,8 +93,8 @@ /** * Returns the line number of the source line containing the execution * point represented by this stack trace element. Generally, this is - * derived from the LineNumberTable attribute of the relevant - * class file (as per The Java Virtual Machine + * derived from the {@code LineNumberTable} attribute of the relevant + * {@code class} file (as per The Java Virtual Machine * Specification, Section 4.7.8). * * @return the line number of the source line containing the execution @@ -112,7 +109,7 @@ * Returns the fully qualified name of the class containing the * execution point represented by this stack trace element. * - * @return the fully qualified name of the Class containing + * @return the fully qualified name of the {@code Class} containing * the execution point represented by this stack trace element. */ public String getClassName() { @@ -123,8 +120,8 @@ * Returns the name of the method containing the execution point * represented by this stack trace element. If the execution point is * contained in an instance or class initializer, this method will return - * the appropriate special method name, <init> or - * <clinit>, as per Section 3.9 of The Java Virtual + * the appropriate special method name, {@code } or + * {@code }, as per Section 3.9 of The Java Virtual * Machine Specification. * * @return the name of the method containing the execution point @@ -138,7 +135,7 @@ * Returns true if the method containing the execution point * represented by this stack trace element is a native method. * - * @return true if the method containing the execution point + * @return {@code true} if the method containing the execution point * represented by this stack trace element is a native method. */ public boolean isNativeMethod() { @@ -151,21 +148,21 @@ * examples may be regarded as typical: *
    *
  • - * "MyClass.mash(MyClass.java:9)" - Here, "MyClass" + * {@code "MyClass.mash(MyClass.java:9)"} - Here, {@code "MyClass"} * is the fully-qualified name of the class containing the * execution point represented by this stack trace element, - * "mash" is the name of the method containing the execution - * point, "MyClass.java" is the source file containing the - * execution point, and "9" is the line number of the source + * {@code "mash"} is the name of the method containing the execution + * point, {@code "MyClass.java"} is the source file containing the + * execution point, and {@code "9"} is the line number of the source * line containing the execution point. *
  • - * "MyClass.mash(MyClass.java)" - As above, but the line + * {@code "MyClass.mash(MyClass.java)"} - As above, but the line * number is unavailable. *
  • - * "MyClass.mash(Unknown Source)" - As above, but neither + * {@code "MyClass.mash(Unknown Source)"} - As above, but neither * the file name nor the line number are available. *
  • - * "MyClass.mash(Native Method)" - As above, but neither + * {@code "MyClass.mash(Native Method)"} - As above, but neither * the file name nor the line number are available, and the method * containing the execution point is known to be a native method. *
@@ -181,25 +178,21 @@ /** * Returns true if the specified object is another - * StackTraceElement instance representing the same execution - * point as this instance. Two stack trace elements a and - * b are equal if and only if: + * {@code StackTraceElement} instance representing the same execution + * point as this instance. Two stack trace elements {@code a} and + * {@code b} are equal if and only if: *
      *     equals(a.getFileName(), b.getFileName()) &&
      *     a.getLineNumber() == b.getLineNumber()) &&
      *     equals(a.getClassName(), b.getClassName()) &&
      *     equals(a.getMethodName(), b.getMethodName())
      * 
- * where equals is defined as: - *
-     *     static boolean equals(Object a, Object b) {
-     *         return a==b || (a != null && a.equals(b));
-     *     }
-     * 
+ * where {@code equals} has the semantics of {@link + * java.util.Objects#equals(Object, Object) Objects.equals}. * * @param obj the object to be compared with this stack trace element. * @return true if the specified object is another - * StackTraceElement instance representing the same + * {@code StackTraceElement} instance representing the same * execution point as this instance. */ public boolean equals(Object obj) { @@ -208,12 +201,10 @@ if (!(obj instanceof StackTraceElement)) return false; StackTraceElement e = (StackTraceElement)obj; - return e.declaringClass.equals(declaringClass) && e.lineNumber == lineNumber - && eq(methodName, e.methodName) && eq(fileName, e.fileName); - } - - private static boolean eq(Object a, Object b) { - return a==b || (a != null && a.equals(b)); + return e.declaringClass.equals(declaringClass) && + e.lineNumber == lineNumber && + Objects.equals(methodName, e.methodName) && + Objects.equals(fileName, e.fileName); } /** @@ -221,7 +212,7 @@ */ public int hashCode() { int result = 31*declaringClass.hashCode() + methodName.hashCode(); - result = 31*result + (fileName == null ? 0 : fileName.hashCode()); + result = 31*result + Objects.hashCode(fileName); result = 31*result + lineNumber; return result; }