Skip to content

Commit a82d67a

Browse files
committed
Bug 56854 - XMLBeans performance when using getXXXList() and other proxy methods
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1620997 13f79535-47bb-0310-9956-ffa450edef68
1 parent 5b6cf95 commit a82d67a

File tree

67 files changed

+515
-472
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+515
-472
lines changed

src/ooxml/java/org/apache/poi/POIXMLProperties.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -371,9 +371,10 @@ public void addProperty(String name, boolean value){
371371
*
372372
* @return next property id starting with 2
373373
*/
374-
protected int nextPid(){
374+
@SuppressWarnings("deprecation")
375+
protected int nextPid(){
375376
int propid = 1;
376-
for(CTProperty p : props.getProperties().getPropertyList()){
377+
for(CTProperty p : props.getProperties().getPropertyArray()){
377378
if(p.getPid() > propid) propid = p.getPid();
378379
}
379380
return propid + 1;
@@ -385,8 +386,9 @@ protected int nextPid(){
385386
* @param name the name to check
386387
* @return whether a property with the given name exists in the custom properties
387388
*/
389+
@SuppressWarnings("deprecation")
388390
public boolean contains(String name){
389-
for(CTProperty p : props.getProperties().getPropertyList()){
391+
for(CTProperty p : props.getProperties().getPropertyArray()){
390392
if(p.getName().equals(name)) return true;
391393
}
392394
return false;

src/ooxml/java/org/apache/poi/POIXMLPropertiesTextExtractor.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ Licensed to the Apache Software Foundation (ASF) under one or more
1919

2020
import java.math.BigDecimal;
2121
import java.util.Date;
22-
import java.util.List;
2322

2423
import org.apache.poi.openxml4j.opc.internal.PackagePropertiesPart;
2524
import org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperty;
@@ -126,13 +125,13 @@ public String getExtendedPropertiesText() {
126125
* Returns the custom document properties, if
127126
* there are any
128127
*/
128+
@SuppressWarnings("deprecation")
129129
public String getCustomPropertiesText() {
130-
StringBuffer text = new StringBuffer();
130+
StringBuilder text = new StringBuilder();
131131
org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperties
132132
props = getDocument().getProperties().getCustomProperties().getUnderlyingProperties();
133133

134-
List<CTProperty> properties = props.getPropertyList();
135-
for(CTProperty property : properties) {
134+
for(CTProperty property : props.getPropertyArray()) {
136135
String val = "(not implemented!)";
137136

138137
if (property.isSetLpwstr()) {

src/ooxml/java/org/apache/poi/xslf/XSLFSlideShow.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,20 @@ Licensed to the Apache Software Foundation (ASF) under one or more
3131
import org.apache.poi.xslf.usermodel.XMLSlideShow;
3232
import org.apache.poi.xslf.usermodel.XSLFRelation;
3333
import org.apache.xmlbeans.XmlException;
34-
import org.openxmlformats.schemas.presentationml.x2006.main.*;
34+
import org.openxmlformats.schemas.presentationml.x2006.main.CTCommentList;
35+
import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesSlide;
36+
import org.openxmlformats.schemas.presentationml.x2006.main.CTPresentation;
37+
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;
38+
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdList;
39+
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry;
40+
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMaster;
41+
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdList;
42+
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdListEntry;
43+
import org.openxmlformats.schemas.presentationml.x2006.main.CmLstDocument;
44+
import org.openxmlformats.schemas.presentationml.x2006.main.NotesDocument;
45+
import org.openxmlformats.schemas.presentationml.x2006.main.PresentationDocument;
46+
import org.openxmlformats.schemas.presentationml.x2006.main.SldDocument;
47+
import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument;
3548

3649
/**
3750
* Experimental class to do low level processing of pptx files.
@@ -53,6 +66,7 @@ public class XSLFSlideShow extends POIXMLDocument {
5366
*/
5467
private List<PackagePart> embedds;
5568

69+
@SuppressWarnings("deprecation")
5670
public XSLFSlideShow(OPCPackage container) throws OpenXML4JException, IOException, XmlException {
5771
super(container);
5872

@@ -64,7 +78,7 @@ public XSLFSlideShow(OPCPackage container) throws OpenXML4JException, IOExceptio
6478
PresentationDocument.Factory.parse(getCorePart().getInputStream());
6579

6680
embedds = new LinkedList<PackagePart>();
67-
for (CTSlideIdListEntry ctSlide : getSlideReferences().getSldIdList()) {
81+
for (CTSlideIdListEntry ctSlide : getSlideReferences().getSldIdArray()) {
6882
PackagePart corePart = getCorePart();
6983
PackagePart slidePart = corePart.getRelatedPart(
7084
corePart.getRelationship(ctSlide.getId2()));

src/ooxml/java/org/apache/poi/xslf/extractor/XSLFPowerPointExtractor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ public String getText(boolean slideText, boolean notesText) {
118118
* @param notesText Should we retrieve text from notes?
119119
* @param masterText Should we retrieve text from master slides?
120120
*/
121+
@SuppressWarnings("deprecation")
121122
public String getText(boolean slideText, boolean notesText, boolean masterText) {
122123
StringBuffer text = new StringBuffer();
123124

@@ -150,7 +151,7 @@ public String getText(boolean slideText, boolean notesText, boolean masterText)
150151

151152
// If the slide has comments, do those too
152153
if (comments != null) {
153-
for (CTComment comment : comments.getCTCommentsList().getCmList()) {
154+
for (CTComment comment : comments.getCTCommentsList().getCmArray()) {
154155
// Do the author if we can
155156
if (commentAuthors != null) {
156157
CTCommentAuthor author = commentAuthors.getAuthorById(comment.getAuthorId());

src/ooxml/java/org/apache/poi/xslf/model/geom/CustomGeometry.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,17 @@
1919

2020
package org.apache.poi.xslf.model.geom;
2121

22-
import org.openxmlformats.schemas.drawingml.x2006.main.*;
23-
2422
import java.util.ArrayList;
2523
import java.util.Iterator;
2624
import java.util.List;
2725

26+
import org.openxmlformats.schemas.drawingml.x2006.main.CTCustomGeometry2D;
27+
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
28+
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuideList;
29+
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomRect;
30+
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2D;
31+
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DList;
32+
2833
/**
2934
* Definition of a custom geometric shape
3035
*
@@ -36,19 +41,20 @@ public class CustomGeometry implements Iterable<Path>{
3641
List<Path> paths = new ArrayList<Path>();
3742
Path textBounds;
3843

44+
@SuppressWarnings("deprecation")
3945
public CustomGeometry(CTCustomGeometry2D geom) {
4046
CTGeomGuideList avLst = geom.getAvLst();
41-
if(avLst != null) for(CTGeomGuide gd : avLst.getGdList()){
47+
if(avLst != null) for(CTGeomGuide gd : avLst.getGdArray()){
4248
adjusts.add(new AdjustValue(gd));
4349
}
4450

4551
CTGeomGuideList gdLst = geom.getGdLst();
46-
if(gdLst != null) for(CTGeomGuide gd : gdLst.getGdList()){
52+
if(gdLst != null) for(CTGeomGuide gd : gdLst.getGdArray()){
4753
guides.add(new Guide(gd));
4854
}
4955

5056
CTPath2DList pathLst = geom.getPathLst();
51-
if(pathLst != null) for(CTPath2D spPath : pathLst.getPathList()){
57+
if(pathLst != null) for(CTPath2D spPath : pathLst.getPathArray()){
5258
paths.add(new Path(spPath));
5359
}
5460

src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTable.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,20 @@ Licensed to the Apache Software Foundation (ASF) under one or more
2020
import org.openxmlformats.schemas.drawingml.x2006.main.CTTable;
2121
import org.openxmlformats.schemas.drawingml.x2006.main.CTTableRow;
2222

23-
import java.util.List;
24-
2523
public class DrawingTable {
2624
private final CTTable table;
2725

2826
public DrawingTable(CTTable table) {
2927
this.table = table;
3028
}
3129

30+
@SuppressWarnings("deprecation")
3231
public DrawingTableRow[] getRows() {
33-
List<CTTableRow> ctTableRows = table.getTrList();
34-
DrawingTableRow[] o = new DrawingTableRow[ctTableRows.size()];
32+
CTTableRow[] ctTableRows = table.getTrArray();
33+
DrawingTableRow[] o = new DrawingTableRow[ctTableRows.length];
3534

3635
for (int i=0; i<o.length; i++) {
37-
o[i] = new DrawingTableRow(ctTableRows.get(i));
36+
o[i] = new DrawingTableRow(ctTableRows[i]);
3837
}
3938

4039
return o;

src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTableRow.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,20 @@ Licensed to the Apache Software Foundation (ASF) under one or more
2020
import org.openxmlformats.schemas.drawingml.x2006.main.CTTableCell;
2121
import org.openxmlformats.schemas.drawingml.x2006.main.CTTableRow;
2222

23-
import java.util.List;
24-
2523
public class DrawingTableRow {
2624
private final CTTableRow row;
2725

2826
public DrawingTableRow(CTTableRow row) {
2927
this.row = row;
3028
}
3129

30+
@SuppressWarnings("deprecation")
3231
public DrawingTableCell[] getCells() {
33-
List<CTTableCell> ctTableCells = row.getTcList();
34-
DrawingTableCell[] o = new DrawingTableCell[ctTableCells.size()];
32+
CTTableCell[] ctTableCells = row.getTcArray();
33+
DrawingTableCell[] o = new DrawingTableCell[ctTableCells.length];
3534

3635
for (int i=0; i<o.length; i++) {
37-
o[i] = new DrawingTableCell(ctTableCells.get(i));
36+
o[i] = new DrawingTableCell(ctTableCells[i]);
3837
}
3938

4039
return o;

src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTextBody.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,20 @@ Licensed to the Apache Software Foundation (ASF) under one or more
2020
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
2121
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
2222

23-
import java.util.List;
24-
2523
public class DrawingTextBody {
2624
private final CTTextBody textBody;
2725

2826
public DrawingTextBody(CTTextBody textBody) {
2927
this.textBody = textBody;
3028
}
3129

30+
@SuppressWarnings("deprecation")
3231
public DrawingParagraph[] getParagraphs() {
33-
List<CTTextParagraph> paragraphs = textBody.getPList();
34-
DrawingParagraph[] o = new DrawingParagraph[paragraphs.size()];
32+
CTTextParagraph[] paragraphs = textBody.getPArray();
33+
DrawingParagraph[] o = new DrawingParagraph[paragraphs.length];
3534

3635
for (int i=0; i<o.length; i++) {
37-
o[i] = new DrawingParagraph(paragraphs.get(i));
36+
o[i] = new DrawingParagraph(paragraphs[i]);
3837
}
3938

4039
return o;

src/ooxml/java/org/apache/poi/xslf/usermodel/RenderableShape.java

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,25 @@
1919

2020
package org.apache.poi.xslf.usermodel;
2121

22+
import java.awt.AlphaComposite;
23+
import java.awt.BasicStroke;
24+
import java.awt.Color;
25+
import java.awt.GradientPaint;
26+
import java.awt.Graphics2D;
27+
import java.awt.Paint;
28+
import java.awt.Shape;
29+
import java.awt.Stroke;
30+
import java.awt.TexturePaint;
31+
import java.awt.geom.AffineTransform;
32+
import java.awt.geom.Point2D;
33+
import java.awt.geom.Rectangle2D;
34+
import java.awt.image.BufferedImage;
35+
import java.lang.reflect.Constructor;
36+
import java.util.ArrayList;
37+
import java.util.Arrays;
38+
import java.util.Collection;
39+
import java.util.Comparator;
40+
2241
import org.apache.poi.openxml4j.opc.PackagePart;
2342
import org.apache.poi.openxml4j.opc.PackageRelationship;
2443
import org.apache.poi.util.Internal;
@@ -47,25 +66,6 @@
4766
import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrixReference;
4867
import org.openxmlformats.schemas.drawingml.x2006.main.STPathShadeType;
4968

50-
import java.awt.AlphaComposite;
51-
import java.awt.BasicStroke;
52-
import java.awt.Color;
53-
import java.awt.GradientPaint;
54-
import java.awt.Graphics2D;
55-
import java.awt.Paint;
56-
import java.awt.Shape;
57-
import java.awt.Stroke;
58-
import java.awt.TexturePaint;
59-
import java.awt.geom.AffineTransform;
60-
import java.awt.geom.Point2D;
61-
import java.awt.geom.Rectangle2D;
62-
import java.awt.image.BufferedImage;
63-
import java.lang.reflect.Constructor;
64-
import java.util.ArrayList;
65-
import java.util.Arrays;
66-
import java.util.Collection;
67-
import java.util.Comparator;
68-
6969
/**
7070
* Encapsulates logic to translate DrawingML objects to Java2D
7171
*/
@@ -548,6 +548,7 @@ public void render(Graphics2D graphics){
548548
}
549549
}
550550

551+
@SuppressWarnings("deprecation")
551552
private Collection<Outline> computeOutlines(Graphics2D graphics) {
552553

553554
Collection<Outline> lst = new ArrayList<Outline>();
@@ -576,7 +577,7 @@ private Collection<Outline> computeOutlines(Graphics2D graphics) {
576577
public Guide getAdjustValue(String name) {
577578
CTPresetGeometry2D prst = _shape.getSpPr().getPrstGeom();
578579
if (prst.isSetAvLst()) {
579-
for (CTGeomGuide g : prst.getAvLst().getGdList()) {
580+
for (CTGeomGuide g : prst.getAvLst().getGdArray()) {
580581
if (g.getName().equals(name)) {
581582
return new Guide(g);
582583
}

src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ public XSLFSlideShow _getXSLFSlideShow() throws OpenXML4JException, IOException,
115115
}
116116

117117
@Override
118+
@SuppressWarnings("deprecation")
118119
protected void onDocumentRead() throws IOException {
119120
try {
120121
PresentationDocument doc =
@@ -140,8 +141,7 @@ protected void onDocumentRead() throws IOException {
140141

141142
_slides = new ArrayList<XSLFSlide>();
142143
if (_presentation.isSetSldIdLst()) {
143-
List<CTSlideIdListEntry> slideIds = _presentation.getSldIdLst().getSldIdList();
144-
for (CTSlideIdListEntry slId : slideIds) {
144+
for (CTSlideIdListEntry slId : _presentation.getSldIdLst().getSldIdArray()) {
145145
XSLFSlide sh = shIdMap.get(slId.getId2());
146146
if (sh == null) {
147147
_logger.log(POILogger.WARN, "Slide with r:id " + slId.getId() + " was defined, but didn't exist in package, skipping");
@@ -201,13 +201,14 @@ public List<XSLFPictureData> getAllPictures() {
201201
* @param layout
202202
* @return created slide
203203
*/
204+
@SuppressWarnings("deprecation")
204205
public XSLFSlide createSlide(XSLFSlideLayout layout) {
205206
int slideNumber = 256, cnt = 1;
206207
CTSlideIdList slideList;
207208
if (!_presentation.isSetSldIdLst()) slideList = _presentation.addNewSldIdLst();
208209
else {
209210
slideList = _presentation.getSldIdLst();
210-
for(CTSlideIdListEntry slideId : slideList.getSldIdList()){
211+
for(CTSlideIdListEntry slideId : slideList.getSldIdArray()){
211212
slideNumber = (int)Math.max(slideId.getId() + 1, slideNumber);
212213
cnt++;
213214
}
@@ -283,16 +284,16 @@ public void setSlideOrder(XSLFSlide slide, int newIndex){
283284
_slides.add(newIndex, _slides.remove(oldIndex));
284285

285286
// fix ordering in the low-level xml
286-
List<CTSlideIdListEntry> slideIds = _presentation.getSldIdLst().getSldIdList();
287-
CTSlideIdListEntry oldEntry = slideIds.get(oldIndex);
288-
slideIds.add(newIndex, oldEntry);
289-
slideIds.remove(oldEntry);
287+
CTSlideIdList sldIdLst = _presentation.getSldIdLst();
288+
CTSlideIdListEntry oldEntry = sldIdLst.getSldIdArray(oldIndex);
289+
sldIdLst.insertNewSldId(newIndex).set(oldEntry);
290+
sldIdLst.removeSldId(oldIndex);
290291
}
291292

292293
public XSLFSlide removeSlide(int index){
293294
XSLFSlide slide = _slides.remove(index);
294295
removeRelation(slide);
295-
_presentation.getSldIdLst().getSldIdList().remove(index);
296+
_presentation.getSldIdLst().removeSldId(index);
296297
return slide;
297298
}
298299

0 commit comments

Comments
 (0)