Skip to content

Commit ec7a775

Browse files
Get rid of some redundant checks, minor fixes
DEVSIX-608
1 parent c3330ba commit ec7a775

File tree

11 files changed

+25
-52
lines changed

11 files changed

+25
-52
lines changed

forms/src/main/java/com/itextpdf/forms/PdfAcroForm.java

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -707,18 +707,18 @@ public void flattenFields() {
707707
}
708708

709709
PdfArray fFields = getFields();
710-
removeObjectFromArray(fFields, fieldObject);
710+
fFields.remove(fieldObject);
711711
if (annotation != null) {
712712
page.removeAnnotation(annotation);
713713
}
714714
PdfDictionary parent = fieldObject.getAsDictionary(PdfName.Parent);
715715
if (parent != null) {
716716
PdfArray kids = parent.getAsArray(PdfName.Kids);
717-
removeObjectFromArray(kids, fieldObject);
717+
kids.remove(fieldObject);
718718
// TODO what if parent was in it's turn the only child of it's parent (parent of parent)?
719719
// shouldn't we remove them recursively? check it
720720
if (kids.isEmpty()) {
721-
removeObjectFromArray(fFields, parent);
721+
fFields.remove(parent);
722722
}
723723
}
724724
}
@@ -755,13 +755,15 @@ public boolean removeField(String fieldName) {
755755

756756
PdfDictionary parent = field.getParent();
757757
if (parent != null) {
758-
removeObjectFromArray(parent.getAsArray(PdfName.Kids), fieldObject);
758+
parent.getAsArray(PdfName.Kids).remove(fieldObject);
759759
fields.remove(fieldName);
760760
return true;
761761
}
762762

763-
if (removeObjectFromArray(getFields(), fieldObject)) {
764-
fields.remove(fieldName);
763+
PdfArray fieldsPdfArray = getFields();
764+
if (fieldsPdfArray.contains(fieldObject)) {
765+
fieldsPdfArray.remove(fieldObject);
766+
this.fields.remove(fieldName);
765767
return true;
766768
}
767769
return false;
@@ -904,9 +906,6 @@ private PdfDictionary processKids(PdfArray kids, PdfDictionary parent, PdfPage p
904906
} else {
905907
for (int i = 0; i < kids.size(); i++) {
906908
PdfObject kid = kids.get(i);
907-
if (kid.isIndirectReference()) {
908-
kid = ((PdfIndirectReference) kid).getRefersTo();
909-
}
910909
PdfArray otherKids = ((PdfDictionary) kid).getAsArray(PdfName.Kids);
911910
if (otherKids != null) {
912911
processKids(otherKids, (PdfDictionary) kid, page);
@@ -1100,15 +1099,4 @@ private Set<PdfFormField> prepareFieldsForFlattening(PdfFormField field) {
11001099
}
11011100
return preparedFields;
11021101
}
1103-
1104-
private boolean removeObjectFromArray(PdfArray array, PdfObject toRemove) {
1105-
if (array.contains(toRemove)) {
1106-
array.remove(toRemove);
1107-
return true;
1108-
} else if (array.contains(toRemove.getIndirectReference())) {
1109-
array.remove(toRemove.getIndirectReference());
1110-
return true;
1111-
}
1112-
return false;
1113-
}
11141102
}

forms/src/main/java/com/itextpdf/forms/fields/PdfFormField.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -990,9 +990,6 @@ public PdfFormField setValue(String value) {
990990
if (kids != null) {
991991
for (int i = 0; i < kids.size(); i++) {
992992
PdfObject kid = kids.get(i);
993-
if (kid.isIndirectReference()) {
994-
kid = ((PdfIndirectReference) kid).getRefersTo();
995-
}
996993
PdfFormField field = new PdfFormField((PdfDictionary) kid);
997994
field.font = font;
998995
field.fontSize = fontSize;
@@ -1472,9 +1469,6 @@ public List<PdfWidgetAnnotation> getWidgets() {
14721469
if (kids != null) {
14731470
for (int i = 0; i < kids.size(); i++) {
14741471
PdfObject kid = kids.get(i);
1475-
if (kid.isIndirectReference()) {
1476-
kid = ((PdfIndirectReference) kid).getRefersTo();
1477-
}
14781472
subType = ((PdfDictionary) kid).getAsName(PdfName.Subtype);
14791473
if (subType != null && subType.equals(PdfName.Widget)) {
14801474
widgets.add((PdfWidgetAnnotation) PdfAnnotation.makeAnnotation(kid));
@@ -1965,9 +1959,6 @@ public boolean regenerateField() {
19651959
if (null != kids) {
19661960
for (int i = 0; i < kids.size(); i++) {
19671961
PdfObject kid = kids.get(i);
1968-
if (kid.isIndirectReference()) {
1969-
kid = ((PdfIndirectReference) kid).getRefersTo();
1970-
}
19711962
PdfFormField field = new PdfFormField((PdfDictionary) kid);
19721963
PdfWidgetAnnotation widget = field.getWidgets().get(0);
19731964
PdfDictionary buttonValues = field.getPdfObject().getAsDictionary(PdfName.AP).getAsDictionary(PdfName.N);

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfDocument.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -552,8 +552,8 @@ public PdfPage removePage(int pageNum) {
552552

553553
if (!removedPage.getPdfObject().isFlushed()) {
554554
removedPage.getPdfObject().remove(PdfName.Parent);
555+
removedPage.getPdfObject().getIndirectReference().setFree();
555556
}
556-
removedPage.getPdfObject().getIndirectReference().setFree();
557557

558558
dispatchEvent(new PdfDocumentEvent(PdfDocumentEvent.REMOVE_PAGE, removedPage));
559559
}
@@ -1619,7 +1619,7 @@ protected void checkIsoConformance() {
16191619
* @param pdfObject an object to mark.
16201620
*/
16211621
protected void markObjectAsMustBeFlushed(PdfObject pdfObject) {
1622-
if (pdfObject.isIndirect()) {
1622+
if (pdfObject.getIndirectReference() != null) {
16231623
pdfObject.getIndirectReference().setState(PdfObject.MUST_BE_FLUSHED);
16241624
}
16251625
}

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfObject.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,7 @@ public final void flush() {
158158
*/
159159
public final void flush(boolean canBeInObjStm) {
160160
if (isFlushed() || getIndirectReference() == null) {
161-
// TODO here we should take into account and log the case when object is MustBeIndirect, but has no indirect reference
162-
// TODO DEVSIX-744
161+
// TODO DEVSIX-744: here we should take into account and log the case when object is MustBeIndirect, but has no indirect reference
163162
// Logger logger = LoggerFactory.getLogger(PdfObject.class);
164163
// if (isFlushed()) {
165164
// logger.warn("Meaningless call, the object has already flushed");

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfPage.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -836,11 +836,7 @@ public PdfPage addAnnotation(int index, PdfAnnotation annotation, boolean tagAnn
836836
public PdfPage removeAnnotation(PdfAnnotation annotation) {
837837
PdfArray annots = getAnnots(false);
838838
if (annots != null) {
839-
if (annots.contains(annotation.getPdfObject())) {
840-
annots.remove(annotation.getPdfObject());
841-
} else {
842-
annots.remove(annotation.getPdfObject().getIndirectReference());
843-
}
839+
annots.remove(annotation.getPdfObject());
844840

845841
if (annots.isEmpty()) {
846842
getPdfObject().remove(PdfName.Annots);

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfPages.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ This file is part of the iText (R) project.
4444
package com.itextpdf.kernel.pdf;
4545

4646
class PdfPages extends PdfObjectWrapper<PdfDictionary> {
47-
47+
4848
private static final long serialVersionUID = 404629033132277362L;
4949
private int from;
5050
private PdfNumber count;
@@ -121,11 +121,7 @@ public void addPages(PdfPages pdfPages) {
121121
public void removeFromParent() {
122122
if (parent != null) {
123123
assert getCount() == 0;
124-
if (parent.kids.contains(getPdfObject().getIndirectReference())) {
125-
parent.kids.remove(getPdfObject().getIndirectReference());
126-
} else {
127-
parent.kids.remove(getPdfObject());
128-
}
124+
parent.kids.remove(getPdfObject().getIndirectReference());
129125
if (parent.getCount() == 0) {
130126
parent.removeFromParent();
131127
}

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfWriter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ protected void flushWaitingObjects() {
409409
needFlush = false;
410410
for (int i = 1; i < xref.size(); i++) {
411411
PdfIndirectReference indirectReference = xref.get(i);
412-
if (indirectReference != null
412+
if (indirectReference != null && !indirectReference.isFree()
413413
&& indirectReference.checkState(PdfObject.MUST_BE_FLUSHED)) {
414414
PdfObject obj = indirectReference.getRefersTo(false);
415415
if (obj != null) {
@@ -432,7 +432,7 @@ protected void flushModifiedWaitingObjects() {
432432
PdfXrefTable xref = document.getXref();
433433
for (int i = 1; i < xref.size(); i++) {
434434
PdfIndirectReference indirectReference = xref.get(i);
435-
if (null != indirectReference) {
435+
if (null != indirectReference && !indirectReference.isFree()) {
436436
boolean isModified = indirectReference.checkState(PdfObject.MODIFIED);
437437
if (isModified) {
438438
PdfObject obj = indirectReference.getRefersTo(false);

kernel/src/main/java/com/itextpdf/kernel/pdf/annot/PdfWidgetAnnotation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public void releaseFormFieldFromWidgetAnnotation(){
136136
PdfDictionary parent = annotDict.getAsDictionary(PdfName.Parent);
137137
if (parent != null && annotDict.size() == 1) {
138138
PdfArray kids = parent.getAsArray(PdfName.Kids);
139-
kids.remove(annotDict.getIndirectReference());
139+
kids.remove(annotDict);
140140
if (kids.size() == 0) {
141141
parent.remove(PdfName.Kids);
142142
}

kernel/src/main/java/com/itextpdf/kernel/pdf/layer/PdfLayer.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -404,12 +404,10 @@ public void setPageElement(String pe) {
404404
}
405405

406406
/**
407-
* Gets the indirect reference to the current layer object,
408-
* making it indirect first if necessary.
407+
* Gets the indirect reference to the current layer object.
409408
* @return the indirect reference to the object representing the layer
410409
*/
411410
public PdfIndirectReference getIndirectReference() {
412-
getPdfObject().makeIndirect(getDocument());
413411
return getPdfObject().getIndirectReference();
414412
}
415413

kernel/src/main/java/com/itextpdf/kernel/pdf/layer/PdfLayerMembership.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ public PdfVisibilityExpression getVisibilityExpression() {
179179

180180
@Override
181181
public PdfIndirectReference getIndirectReference() {
182-
getPdfObject().makeIndirect(getDocument());
183182
return getPdfObject().getIndirectReference();
184183
}
185184

0 commit comments

Comments
 (0)