]> source.dussan.org Git - poi.git/commitdiff
Dispose XmlCursor
authorAndreas Beeker <kiwiwings@apache.org>
Mon, 16 May 2016 09:54:01 +0000 (09:54 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Mon, 16 May 2016 09:54:01 +0000 (09:54 +0000)
Replacing a method argument (XmlCursor) with a local instance and then updating it, doesn't make sense

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1744002 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFootnote.java
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContentCell.java
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java

index 74de72db3361edf45afc8a232dd954f30dafaa70..23a63d0e80f114880c2f0bd8c84c33b120bfc5e7 100644 (file)
@@ -667,11 +667,9 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
     private boolean isCursorInBody(XmlCursor cursor) {
         XmlCursor verify = cursor.newCursor();
         verify.toParent();
-        try {
-            return (verify.getObject() == this.ctDocument.getBody());
-        } finally {
-            verify.dispose();
-        }
+        boolean result = (verify.getObject() == this.ctDocument.getBody());
+        verify.dispose();
+        return result;
     }
 
     private int getPosOfBodyElement(IBodyElement needle) {
index a2f14a7e76ff20ca825b1369010a153941cb43ba..b5f24dd7185643024b0ea88610e47588ebdbfdb8 100644 (file)
@@ -269,8 +269,10 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
                     i++;\r
             }\r
             bodyElements.add(i, newT);\r
-            cursor = t.newCursor();\r
+            XmlCursor c2 = t.newCursor();\r
+            cursor.toCursor(c2);\r
             cursor.toEndToken();\r
+            c2.dispose();\r
             return newT;\r
         }\r
         return null;\r
@@ -283,7 +285,7 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
      * @return the inserted paragraph\r
      * @see org.apache.poi.xwpf.usermodel.IBody#insertNewParagraph(XmlCursor cursor)\r
      */\r
-    public XWPFParagraph insertNewParagraph(XmlCursor cursor) {\r
+    public XWPFParagraph insertNewParagraph(final XmlCursor cursor) {\r
         if (isCursorInFtn(cursor)) {\r
             String uri = CTP.type.getName().getNamespaceURI();\r
             String localPart = "p";\r
@@ -302,15 +304,19 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
                 paragraphs.add(pos, newP);\r
             }\r
             int i = 0;\r
-            cursor.toCursor(p.newCursor());\r
+            XmlCursor p2 = p.newCursor();\r
+            cursor.toCursor(p2);\r
+            p2.dispose();\r
             while (cursor.toPrevSibling()) {\r
                 o = cursor.getObject();\r
                 if (o instanceof CTP || o instanceof CTTbl)\r
                     i++;\r
             }\r
             bodyElements.add(i, newP);\r
-            cursor.toCursor(p.newCursor());\r
+            p2 = p.newCursor();\r
+            cursor.toCursor(p2);\r
             cursor.toEndToken();\r
+            p2.dispose();\r
             return newP;\r
         }\r
         return null;\r
index 415204aace7e0e7dc0f8f7ab795a3a9750fa1f7c..f4a13e454e28aa4e53769dd731b95e202d08c621 100644 (file)
@@ -355,15 +355,19 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
                 paragraphs.add(pos, newP);
             }
             int i = 0;
-            cursor.toCursor(p.newCursor());
+            XmlCursor p2 = p.newCursor();
+            cursor.toCursor(p2);
+            p2.dispose();
             while (cursor.toPrevSibling()) {
                 o = cursor.getObject();
                 if (o instanceof CTP || o instanceof CTTbl)
                     i++;
             }
             bodyElements.add(i, newP);
-            cursor.toCursor(p.newCursor());
+            p2 = p.newCursor();
+            cursor.toCursor(p2);
             cursor.toEndToken();
+            p2.dispose();
             return newP;
         }
         return null;
@@ -374,7 +378,7 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
      * @param cursor
      * @return the inserted table
      */
-    public XWPFTable insertNewTbl(XmlCursor cursor) {
+    public XWPFTable insertNewTbl(final XmlCursor cursor) {
         if (isCursorInHdrF(cursor)) {
             String uri = CTTbl.type.getName().getNamespaceURI();
             String localPart = "tbl";
@@ -394,15 +398,19 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
                 tables.add(pos, newT);
             }
             int i = 0;
-            cursor = t.newCursor();
-            while (cursor.toPrevSibling()) {
-                o = cursor.getObject();
-                if (o instanceof CTP || o instanceof CTTbl)
+            XmlCursor cursor2 = t.newCursor();
+            while (cursor2.toPrevSibling()) {
+                o = cursor2.getObject();
+                if (o instanceof CTP || o instanceof CTTbl) {
                     i++;
+                }
             }
+            cursor2.dispose();
             bodyElements.add(i, newT);
-            cursor = t.newCursor();
+            cursor2 = t.newCursor();
+            cursor.toCursor(cursor2);
             cursor.toEndToken();
+            cursor2.dispose();
             return newT;
         }
         return null;
@@ -416,10 +424,9 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
     private boolean isCursorInHdrF(XmlCursor cursor) {
         XmlCursor verify = cursor.newCursor();
         verify.toParent();
-        if (verify.getObject() == this.headerFooter) {
-            return true;
-        }
-        return false;
+        boolean result = (verify.getObject() == this.headerFooter);
+        verify.dispose();
+        return result;
     }
 
 
@@ -492,6 +499,7 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
         cursor.toParent();
         XmlObject o = cursor.getObject();
         if (!(o instanceof CTRow)) {
+            cursor.dispose();
             return null;
         }
         CTRow row = (CTRow) o;
index 57ff6bcea6c5eaa4804cceab8f0e95f37d559061..4e2d3654d1bcc17843dee0d9f3d97aaa044102ac 100644 (file)
@@ -1396,58 +1396,59 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para
         int beginRunPos = 0, candCharPos = 0;
         boolean newList = false;
         
-        @SuppressWarnings("deprecation")
         CTR[] rArray = paragraph.getRArray();
         for (int runPos = startRun; runPos < rArray.length; runPos++) {
             int beginTextPos = 0, beginCharPos = 0, textPos = 0, charPos = 0;
             CTR ctRun = rArray[runPos];
             XmlCursor c = ctRun.newCursor();
             c.selectPath("./*");
-            while (c.toNextSelection()) {
-                XmlObject o = c.getObject();
-                if (o instanceof CTText) {
-                    if (textPos >= startText) {
-                        String candidate = ((CTText) o).getStringValue();
-                        if (runPos == startRun)
-                            charPos = startChar;
-                        else
-                            charPos = 0;
-
-                        for (; charPos < candidate.length(); charPos++) {
-                            if ((candidate.charAt(charPos) == searched.charAt(0)) && (candCharPos == 0)) {
-                                beginTextPos = textPos;
-                                beginCharPos = charPos;
-                                beginRunPos = runPos;
-                                newList = true;
-                            }
-                            if (candidate.charAt(charPos) == searched.charAt(candCharPos)) {
-                                if (candCharPos + 1 < searched.length())
-                                    candCharPos++;
-                                else if (newList) {
-                                    TextSegement segement = new TextSegement();
-                                    segement.setBeginRun(beginRunPos);
-                                    segement.setBeginText(beginTextPos);
-                                    segement.setBeginChar(beginCharPos);
-                                    segement.setEndRun(runPos);
-                                    segement.setEndText(textPos);
-                                    segement.setEndChar(charPos);
-                                    return segement;
+            try {
+                while (c.toNextSelection()) {
+                    XmlObject o = c.getObject();
+                    if (o instanceof CTText) {
+                        if (textPos >= startText) {
+                            String candidate = ((CTText) o).getStringValue();
+                            if (runPos == startRun)
+                                charPos = startChar;
+                            else
+                                charPos = 0;
+    
+                            for (; charPos < candidate.length(); charPos++) {
+                                if ((candidate.charAt(charPos) == searched.charAt(0)) && (candCharPos == 0)) {
+                                    beginTextPos = textPos;
+                                    beginCharPos = charPos;
+                                    beginRunPos = runPos;
+                                    newList = true;
+                                }
+                                if (candidate.charAt(charPos) == searched.charAt(candCharPos)) {
+                                    if (candCharPos + 1 < searched.length())
+                                        candCharPos++;
+                                    else if (newList) {
+                                        TextSegement segement = new TextSegement();
+                                        segement.setBeginRun(beginRunPos);
+                                        segement.setBeginText(beginTextPos);
+                                        segement.setBeginChar(beginCharPos);
+                                        segement.setEndRun(runPos);
+                                        segement.setEndText(textPos);
+                                        segement.setEndChar(charPos);
+                                        return segement;
+                                    }
+                                } else {
+                                    candCharPos = 0;
                                 }
-                            } else {
-                                candCharPos = 0;
                             }
                         }
-                    }
-                    textPos++;
-                } else if (o instanceof CTProofErr) {
-                    c.removeXml();
-                } else if (o instanceof CTRPr) ;
-                    //do nothing
-                else
-                    candCharPos = 0;
+                        textPos++;
+                    } else if (o instanceof CTProofErr) {
+                        c.removeXml();
+                    } else if (o instanceof CTRPr) ;
+                        //do nothing
+                    else
+                        candCharPos = 0;
+                }
+            } finally {
+                c.dispose();
             }
-
-            c.dispose();
         }
         return null;
     }
@@ -1465,10 +1466,8 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para
         int textEnd = segment.getEndText();
         int charEnd = segment.getEndChar();
         StringBuilder out = new StringBuilder();
-        @SuppressWarnings("deprecation")
         CTR[] rArray = paragraph.getRArray();
         for (int i = runBegin; i <= runEnd; i++) {
-            @SuppressWarnings("deprecation")
             CTText[] tArray = rArray[i].getTArray();
             int startText = 0, endText = tArray.length - 1;
             if (i == runBegin)
index 6942aa749dd5928ab8e1927f90b32b926544c48f..d160e662e3d16bc5abe9ae90178f2649e82c2ece 100644 (file)
@@ -76,7 +76,8 @@ public class XWPFSDTContent implements ISDTContent {
                 runs.add(run);
                 bodyElements.add(run);
             }
-        }\r
+        }
+        cursor.dispose();\r
     }\r
 \r
     public String getText() {\r
index 17f388b59e3cd8ca9c09b64ce95686d832ba4d53..4ded4787ea6ade02766fd89b1d7c699cc0a4ee24 100644 (file)
@@ -84,7 +84,8 @@ public class XWPFSDTContentCell implements ISDTContent {
                 depth--;\r
             }\r
         }\r
-        text = sb.toString();\r
+        text = sb.toString();
+        cursor.dispose();\r
     }\r
 \r
 \r
index 39a92f41cfc21603be91358dbee65732af529a5b..4f1a77cfb70c0b729804c85032a474328377e98b 100644 (file)
@@ -258,7 +258,7 @@ public class XWPFTableCell implements IBody, ICell {
      * @param cursor\r
      * @return the inserted paragraph\r
      */\r
-    public XWPFParagraph insertNewParagraph(XmlCursor cursor) {\r
+    public XWPFParagraph insertNewParagraph(final XmlCursor cursor) {\r
         if (!isCursorInTableCell(cursor)) {\r
             return null;\r
         }\r
@@ -280,19 +280,23 @@ public class XWPFTableCell implements IBody, ICell {
             paragraphs.add(pos, newP);\r
         }\r
         int i = 0;\r
-        cursor.toCursor(p.newCursor());\r
+        XmlCursor p2 = p.newCursor();\r
+        cursor.toCursor(p2);\r
+        p2.dispose();\r
         while (cursor.toPrevSibling()) {\r
             o = cursor.getObject();\r
             if (o instanceof CTP || o instanceof CTTbl)\r
                 i++;\r
         }\r
         bodyElements.add(i, newP);\r
-        cursor.toCursor(p.newCursor());\r
+        p2 = p.newCursor();\r
+        cursor.toCursor(p2);\r
+        p2.dispose();\r
         cursor.toEndToken();\r
         return newP;\r
     }\r
 \r
-    public XWPFTable insertNewTbl(XmlCursor cursor) {\r
+    public XWPFTable insertNewTbl(final XmlCursor cursor) {\r
         if (isCursorInTableCell(cursor)) {\r
             String uri = CTTbl.type.getName().getNamespaceURI();\r
             String localPart = "tbl";\r
@@ -312,15 +316,18 @@ public class XWPFTableCell implements IBody, ICell {
                 tables.add(pos, newT);\r
             }\r
             int i = 0;\r
-            cursor = t.newCursor();\r
-            while (cursor.toPrevSibling()) {\r
-                o = cursor.getObject();\r
+            XmlCursor cursor2 = t.newCursor();\r
+            while (cursor2.toPrevSibling()) {\r
+                o = cursor2.getObject();\r
                 if (o instanceof CTP || o instanceof CTTbl)\r
                     i++;\r
             }\r
+            cursor2.dispose();\r
             bodyElements.add(i, newT);\r
-            cursor = t.newCursor();\r
+            cursor2 = t.newCursor();\r
+            cursor.toCursor(cursor2);\r
             cursor.toEndToken();\r
+            cursor2.dispose();\r
             return newT;\r
         }\r
         return null;\r
@@ -332,10 +339,9 @@ public class XWPFTableCell implements IBody, ICell {
     private boolean isCursorInTableCell(XmlCursor cursor) {\r
         XmlCursor verify = cursor.newCursor();\r
         verify.toParent();\r
-        if (verify.getObject() == this.ctTc) {\r
-            return true;\r
-        }\r
-        return false;\r
+        boolean result = (verify.getObject() == this.ctTc);\r
+        verify.dispose();\r
+        return result;\r
     }\r
 \r
     /**\r
index 2ec97ec2986f3e2f91fb8957d996e21756209a5c..eb1ec777533a452f4de372d9a08e72126aebd5a5 100644 (file)
@@ -146,7 +146,8 @@ public class XWPFTableRow {
             } else if (o instanceof CTSdtCell) {\r
                 cells.add(new XWPFSDTCell((CTSdtCell) o, this, table.getBody()));\r
             }\r
-        }\r
+        }
+        cursor.dispose();\r
         return cells;\r
     }