Hi Joe,

Looks good to me. I have two additional comments, one nit - and
one for some later follow-up - so no need for a new webrev.


1. Nit: I think it should be final as well:

+++ new/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java 2017-07-07 21:15:14.418212557 -0700
[...]
-    private static Integer m_synch_object = new Integer(1);
+    private static Object m_synch_object = new Object();


2. Can you also add the following items to the list of things
that should be investigated in a followup/cleanup?
It bothers me that a non-deprecated method still needs to call
a deprecated API:

+++ new/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIElementNSImpl.java 2017-07-07 21:15:01.881586697 -0700
[...]
+    @SuppressWarnings("deprecation")
     public String getSchemaDefault() {
return fDeclaration == null ? null : fDeclaration.getConstraintValue();
     }

+++ new/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/AttributePSVImpl.java 2017-07-07 21:15:04.749729882 -0700
[...]
+    @SuppressWarnings("deprecation")
     public String getSchemaDefault() {
return fDeclaration == null ? null : fDeclaration.getConstraintValue();
     }

+++ new/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/AttributePSVImpl.java 2017-07-07 21:15:04.749729882 -0700
[...]
+    @SuppressWarnings("deprecation")
     public String getSchemaDefault() {
return fDeclaration == null ? null : fDeclaration.getConstraintValue();
     }

+++ new/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/ElementPSVImpl.java 2017-07-07 21:15:05.077746257 -0700
[...]
+    @SuppressWarnings("deprecation")
     public String getSchemaDefault() {
return fDeclaration == null ? null : fDeclaration.getConstraintValue();
     }


cheers,

-- daniel

On 08/07/2017 01:53, huizhe wang wrote:
Here's the updated webrev:
http://cr.openjdk.java.net/~joehw/jdk10/8181154/webrev01/

Thanks,
Joe

On 7/7/2017 10:59 AM, huizhe wang wrote:

#11
com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java

1166     final public void setYear(BigInteger year) {

nit: for consistency you should reorder the keywords to:

         public final void

same file:

 - BigInteger.valueOf((long) 1) => BigInteger.ONE
 - new BigDecimal(TWELVE) => introduce a constant DECIMAL_TWELVE?
- new BigDecimal(TWENTY_FOUR) => introduce a constant DECIMAL_TWENTY_FOUR?


Added the two constants.




#12
com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java

  81 @SuppressWarnings("deprecation")
  82 public abstract class AbstractSAXParser
  83     extends AbstractXMLDocumentParser
  84     implements PSVIProvider, // PSVI
  85               Parser, XMLReader // SAX1, SAX2

A better solution would be to deprecate the methods that implement
deprecated methods - and avoid using deprecated APIs elsewhere...

#13
com/sun/org/apache/xerces/internal/util/AttributesProxy.java

  36 @SuppressWarnings("deprecation")
  37 public final class AttributesProxy
  38     implements AttributeList, Attributes2 {

I wonder whether deprecating the methods implementing a deprecated
API would allow to remove @SuppressWarnings("deprecation") - maybe not
in this case since this class needs to implement a deprecated interface
and a non deprecated one (and therefore the class itself can't be
deprecated). Anyway it might be good to add the @Deprecated
annotations to deprecated methods.

We'll take a closer look at this through [1], for both #12 and #13, and #17 as well. AttributesProxy is used quite widely. We'll need to get into the details to see if we can remove the deprecated AttributeList.

Since there are import references that are deprecated, the suppress annotation has to be added at the class.

[1] https://bugs.openjdk.java.net/browse/JDK-8183972


#14
com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java

if _main use deprecated APIs then maybe _main should be @Deprecated
as well.

Done.

#15
com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java

 207     private static Integer m_synch_object = 1;

This is not correct! Since this object is only use as a synchronization
lock then please change this to:

         private static Object m_synch_object = new Object();

Ok, fixed now. But I don't think the sync is necessary, logged https://bugs.openjdk.java.net/browse/JDK-8184019 to take a look later and can also do some cleanups.


#16
com/sun/org/apache/xpath/internal/axes/HasPositionalPredChecker.java

Can this class be changed to stop using deprecated APIs instead?

It can probably be removed, will do so through https://bugs.openjdk.java.net/browse/JDK-8184020.



#17
javax/xml/parsers/SAXParser.java
org/xml/sax/helpers/ParserAdapter.java
org/xml/sax/helpers/XMLReaderAdapter.java

Can these classes be changed to stop using deprecated APIs instead?
Or at least a cleanup issue logged for that effect?

Most likely we can't since these are public APIs. DocumentHandler for example, is still usable. We can probably add forRemoval and then remove in the next release.


That's all!

Thanks for all of that!

Best,
Joe


best regards,

-- daniel

On 05/07/2017 19:48, Joe Wang wrote:
Hi,

This patch fixes deprecation warnings in the jaxp repo. I'm limiting the changes to deprecation or the 102 classes. The cup-generated classes, XPath*.java, could use some cleanup or even rewrite, but that will be left in future works (JDK-8183580).

Most of the changes are straight-forward, but I did have trouble with the replacing clazz.newInstance() with clazz.getDeclaredConstructor().newInstance() since in some cases I got RuntimePermission problems. So for most of such cases, I've replaced them with getConstructor() instead, thanks Alan for the suggestion. For specific cases such as xsltc/compiler/Parser.java, I'm using getDeclaredConstructor() because some of the classes didn't have a public constructor.

Again, please bear with me for the cup-generated classes that have super long lines (e.g. XPathParser.java). Please read with Udiffs instead of Sdiffs.

Some of the boxing (e.g. Integer.valueOf()) in the BCEL classes may not be necessary, but that's how they look in BCEL to which an update is scheduled in JDK 10.

All tests passed.

JBS: https://bugs.openjdk.java.net/browse/JDK-8181154
webrevs: http://cr.openjdk.java.net/~joehw/jdk10/8181154/webrev/

Thanks
Joe





Reply via email to