Author: kiwiwings Date: Sun Dec 22 21:44:45 2019 New Revision: 1871911 URL: http://svn.apache.org/viewvc?rev=1871911&view=rev Log: #64004 - Replace clone() with copy constructor - mainly HSSF classes
Added: poi/trunk/src/java/org/apache/poi/common/Duplicatable.java (with props) poi/trunk/src/java/org/apache/poi/hssf/record/FormulaSpecialCachedValue.java (with props) poi/trunk/src/java/org/apache/poi/hssf/record/common/ExtRst.java (with props) poi/trunk/src/java/org/apache/poi/hssf/record/common/FormatRun.java (with props) poi/trunk/src/java/org/apache/poi/hssf/record/common/PhRun.java (with props) Modified: poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java poi/trunk/src/integrationtest/org/apache/poi/hssf/usermodel/RecordsStresser.java poi/trunk/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java poi/trunk/src/java/org/apache/poi/ddf/EscherContainerRecord.java poi/trunk/src/java/org/apache/poi/ddf/EscherRecord.java poi/trunk/src/java/org/apache/poi/ddf/EscherTextboxRecord.java poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/DummyRecordBase.java poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/LastCellOfRowDummyRecord.java poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingCellDummyRecord.java poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingRowDummyRecord.java poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java poi/trunk/src/java/org/apache/poi/hssf/model/RecordStream.java poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ArrayRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/AutoFilterInfoRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/BOFRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/BackupRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/BlankRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/BookBoolRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/BoolErrRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderBase.java poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CFRule12Record.java poi/trunk/src/java/org/apache/poi/hssf/record/CFRuleBase.java poi/trunk/src/java/org/apache/poi/hssf/record/CFRuleRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CRNCountRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CRNRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CalcCountRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CalcModeRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CellRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CodepageRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CommonObjectDataSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ContinueRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/CountryRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DBCellRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DConRefRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DSFRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DVALRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DateWindow1904Record.java poi/trunk/src/java/org/apache/poi/hssf/record/DefaultColWidthRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DefaultRowHeightRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DeltaRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DimensionsRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DrawingGroupRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DrawingRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/DrawingRecordForBiffViewer.java poi/trunk/src/java/org/apache/poi/hssf/record/DrawingSelectionRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/EOFRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/EndSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/EscherAggregate.java poi/trunk/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ExtendedFormatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FeatHdrRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FeatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FilePassRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FileSharingRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FnGroupCountRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FontRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FooterRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FormatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FormulaRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FtCblsSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FtCfSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/FtPioGrbitSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/GridsetRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/GroupMarkerSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/GutsRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/HCenterRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/HeaderFooterBase.java poi/trunk/src/java/org/apache/poi/hssf/record/HeaderFooterRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/HeaderRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/HideObjRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/HorizontalPageBreakRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/HyperlinkRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/IndexRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/InterfaceEndRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/InterfaceHdrRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/IterationRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/LabelRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/LabelSSTRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/LbsDataSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/LeftMarginRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/MMSRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/MergeCellsRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/MulBlankRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/MulRKRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/NameCommentRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/NameRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/NoteRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/NoteStructureSubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/NumberRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ObjRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ObjectProtectRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/OldFormulaRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/OldLabelRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/OldSheetRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/OldStringRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/PageBreakRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/PaletteRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/PaneRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/PasswordRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/PasswordRev4Record.java poi/trunk/src/java/org/apache/poi/hssf/record/PrecisionRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/PrintGridlinesRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/PrintHeadersRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/PrintSetupRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ProtectRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java poi/trunk/src/java/org/apache/poi/hssf/record/RKRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/RecalcIdRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/Record.java poi/trunk/src/java/org/apache/poi/hssf/record/RecordBase.java poi/trunk/src/java/org/apache/poi/hssf/record/RecordInputStream.java poi/trunk/src/java/org/apache/poi/hssf/record/RefModeRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/RefreshAllRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/RightMarginRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/RowRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/SCLRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/SSTRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/SaveRecalcRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/ScenarioProtectRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/SelectionRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/SharedValueRecordBase.java poi/trunk/src/java/org/apache/poi/hssf/record/StandardRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/StringRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/StyleRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/SubRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/SupBookRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/TabIdRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/TableRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/TableStylesRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/TopMarginRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/UncalcedRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/UnknownRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/UseSelFSRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/UserSViewBegin.java poi/trunk/src/java/org/apache/poi/hssf/record/UserSViewEnd.java poi/trunk/src/java/org/apache/poi/hssf/record/VCenterRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/VerticalPageBreakRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/WSBoolRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/WindowOneRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/WindowProtectRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/WindowTwoRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/WriteAccessRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ColumnInfoRecordsAggregate.java poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ConditionalFormattingTable.java poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/DataValidityTable.java poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/MergedCellsTable.java poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RecordAggregate.java poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/BorderFormatting.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/ColorGradientFormatting.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/ColorGradientThreshold.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/DataBarFormatting.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/DataBarThreshold.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/FontFormatting.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/IconMultiStateFormatting.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/IconMultiStateThreshold.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/PatternFormatting.java poi/trunk/src/java/org/apache/poi/hssf/record/cf/Threshold.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/AreaFormatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/AreaRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/AxisLineFormatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/AxisOptionsRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/AxisParentRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/AxisRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/AxisUsedRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/BarRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/BeginRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/CatLabRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/CategorySeriesAxisRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndBlockRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndObjectRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartFRTInfoRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartFormatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartStartBlockRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartStartObjectRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartTitleFormatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/DatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataFormatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataLabelExtensionRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/DefaultDataLabelTextPropertiesRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/EndRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontBasisRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontIndexRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/FrameRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/LegendRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/LineFormatRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/NumberFormatIndexRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ObjectLinkRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotAreaRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotGrowthRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesChartGroupIndexRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesIndexRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesLabelsRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesListRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesTextRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesToChartGroupRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/SheetPropertiesRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/TextRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/TickRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/UnitsRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/chart/ValueRangeRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/common/ExtendedColor.java poi/trunk/src/java/org/apache/poi/hssf/record/common/FeatFormulaErr2.java poi/trunk/src/java/org/apache/poi/hssf/record/common/FeatProtection.java poi/trunk/src/java/org/apache/poi/hssf/record/common/FeatSmartTag.java poi/trunk/src/java/org/apache/poi/hssf/record/common/FtrHeader.java poi/trunk/src/java/org/apache/poi/hssf/record/common/SharedFeature.java poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java poi/trunk/src/java/org/apache/poi/hssf/record/cont/ContinuableRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/pivottable/DataItemRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/pivottable/ExtendedPivotTableViewFieldsRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/pivottable/PageItemRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/pivottable/StreamIDRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/pivottable/ViewDefinitionRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/pivottable/ViewFieldsRecord.java poi/trunk/src/java/org/apache/poi/hssf/record/pivottable/ViewSourceRecord.java poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFChart.java poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFHyperlink.java poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRichTextString.java poi/trunk/src/java/org/apache/poi/hssf/util/CellRangeAddress8Bit.java poi/trunk/src/java/org/apache/poi/hssf/util/LazilyConcatenatedByteArray.java poi/trunk/src/java/org/apache/poi/poifs/crypt/Decryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/EncryptionHeader.java poi/trunk/src/java/org/apache/poi/poifs/crypt/EncryptionInfo.java poi/trunk/src/java/org/apache/poi/poifs/crypt/EncryptionVerifier.java poi/trunk/src/java/org/apache/poi/poifs/crypt/Encryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/binaryrc4/BinaryRC4Decryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/binaryrc4/BinaryRC4EncryptionHeader.java poi/trunk/src/java/org/apache/poi/poifs/crypt/binaryrc4/BinaryRC4EncryptionVerifier.java poi/trunk/src/java/org/apache/poi/poifs/crypt/binaryrc4/BinaryRC4Encryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIEncryptionHeader.java poi/trunk/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIEncryptionVerifier.java poi/trunk/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIEncryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionHeader.java poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionVerifier.java poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XORDecryptor.java poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionHeader.java poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionVerifier.java poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptor.java poi/trunk/src/java/org/apache/poi/ss/formula/Formula.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AddPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area2DPtgBase.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaErrPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaNPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AttrPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/BoolPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ConcatPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ControlPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedArea3DPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedRef3DPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DividePtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/EqualPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ErrPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ExpPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncVarPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterEqualPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterThanPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntersectionPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessEqualPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessThanPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemAreaPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemErrPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MultiplyPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NotEqualPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NumberPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/OperandPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/OperationPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ParenthesisPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/PercentPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/PowerPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ptg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RangePtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref2DPtgBase.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefErrorPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefNPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ScalarConstantPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/StringPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/SubtractPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/TblPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/UnaryMinusPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/UnaryPlusPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/UnionPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/UnknownPtg.java poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ValueOperatorPtg.java poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddress.java poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java poi/trunk/src/java/org/apache/poi/ss/util/SSCellRange.java poi/trunk/src/java/org/apache/poi/util/IntMapper.java poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/agile/AgileDecryptor.java poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/agile/AgileEncryptionHeader.java poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/agile/AgileEncryptionVerifier.java poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/agile/AgileEncryptor.java poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java poi/trunk/src/scratchpad/src/org/apache/poi/hemf/record/emf/HemfPenStyle.java poi/trunk/src/scratchpad/src/org/apache/poi/hemf/record/emfplus/HemfPlusPen.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/BitMaskTextProp.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/CharFlagsTextProp.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/FontAlignmentProp.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/HSLFTabStop.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/HSLFTabStopPropCollection.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/ParagraphFlagsTextProp.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/TextAlignmentProp.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/TextProp.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/TextPropCollection.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/WrapFlagsTextProp.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfDrawProperties.java poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/record/HwmfColorRef.java poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/record/HwmfPenStyle.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestAutoFilterInfoRecord.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestCFRuleRecord.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestFtCblsSubRecord.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestMergeCellsRecord.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestNoteRecord.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestNoteStructureSubRecord.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java poi/trunk/src/testcases/org/apache/poi/hssf/record/TestTextObjectRecord.java poi/trunk/src/testcases/org/apache/poi/hssf/record/common/TestUnicodeString.java poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAbstractFunctionPtg.java Modified: poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java (original) +++ poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java Sun Dec 22 21:44:45 2019 @@ -65,26 +65,26 @@ import org.junit.runners.Parameterized.P /** * This is an integration test which performs various actions on all stored test-files and tries - * to reveal problems which are introduced, but not covered (yet) by unit tests. - * - * This test looks for any file under the test-data directory and tries to do some useful + * to reveal problems which are introduced, but not covered (yet) by unit tests. + * + * This test looks for any file under the test-data directory and tries to do some useful * processing with it based on it's type. - * + * * The test is implemented as a junit {@link Parameterized} test, which leads - * to one test-method call for each file (currently around 950 files are handled). - * - * There is a a mapping of extension to implementations of the interface - * {@link FileHandler} which defines how the file is loaded and which actions are - * tried with the file. - * + * to one test-method call for each file (currently around 950 files are handled). + * + * There is a a mapping of extension to implementations of the interface + * {@link FileHandler} which defines how the file is loaded and which actions are + * tried with the file. + * * The test can be expanded by adding more actions to the FileHandlers, this automatically * applies the action to any such file in our test-data repository. - * + * * There is also a list of files that should actually fail. - * - * Note: It is also a test-failure if a file that is expected to fail now actually works, - * i.e. if a bug was fixed in POI itself, the file should be removed from the expected-failures - * here as well! This is to ensure that files that should not work really do not work, e.g. + * + * Note: It is also a test-failure if a file that is expected to fail now actually works, + * i.e. if a bug was fixed in POI itself, the file should be removed from the expected-failures + * here as well! This is to ensure that files that should not work really do not work, e.g. * that we do not remove expected sanity checks. */ @RunWith(Parameterized.class) @@ -96,7 +96,7 @@ public class TestAllFiles { private static final Map<String,String> FILE_PASSWORD; - + // map file extensions to the actual mappers public static final Map<String, FileHandler> HANDLERS = new HashMap<>(); @@ -136,7 +136,7 @@ public class TestAllFiles { // Visio - binary HANDLERS.put(".vsd", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HDGFFileHandler()); - + // Visio - ooxml HANDLERS.put(".vsdm", new XDGFFileHandler()); HANDLERS.put(".vsdx", new XDGFFileHandler()); @@ -238,7 +238,7 @@ public class TestAllFiles { passmap.put("poifs/protected_agile.docx", Decryptor.DEFAULT_PASSWORD); passmap.put("poifs/60320-protected.xlsx", "Test001!!"); passmap.put("poifs/protected_sha512.xlsx", "this is a test"); - + FILE_PASSWORD = Collections.unmodifiableMap(passmap); } @@ -326,7 +326,7 @@ public class TestAllFiles { "spreadsheet/testEXCEL_95.xls", "spreadsheet/59074.xls", "spreadsheet/60284.xls", - + // OOXML Strict is not yet supported, see bug #57699 "spreadsheet/SampleSS.strict.xlsx", "spreadsheet/SimpleStrict.xlsx", @@ -342,7 +342,7 @@ public class TestAllFiles { // sheet cloning errors "spreadsheet/56450.xls", - "spreadsheet/OddStyleRecord.xls", + // "spreadsheet/OddStyleRecord.xls", // msg files with non-standard encodings "hsmf/ASCII_CP1251_LCID1049.msg", @@ -377,7 +377,7 @@ public class TestAllFiles { } FileHandler handler = HANDLERS.get(getExtension(file)); files.add(new Object[] { file, handler }); - + // for some file-types also run OPCFileHandler if(handler instanceof XSSFFileHandler || handler instanceof XWPFFileHandler || @@ -385,7 +385,7 @@ public class TestAllFiles { handler instanceof XDGFFileHandler) { files.add(new Object[] { file, new OPCFileHandler() }); } - + if (handler instanceof HSSFFileHandler || handler instanceof HSLFFileHandler || handler instanceof HWPFFileHandler || @@ -410,7 +410,7 @@ public class TestAllFiles { String pass = TestAllFiles.FILE_PASSWORD.get(file); Biff8EncryptionKey.setCurrentUserPassword(pass); } - + @Test public void testAllFiles() throws Exception { if(handler == null) { @@ -426,7 +426,7 @@ public class TestAllFiles { file.endsWith(".xlsb") || file.endsWith(".pptx")) && handler instanceof OPCFileHandler; boolean ignoreHPSF = (handler instanceof HPSFFileHandler); - + try { try (InputStream stream = new BufferedInputStream(new FileInputStream(inputFile), 64 * 1024)) { handler.handleFile(stream, file); @@ -436,7 +436,7 @@ public class TestAllFiles { handler.handleExtracting(inputFile); - assertFalse("Expected to fail for file " + file + " and handler " + handler + ", but did not fail!", + assertFalse("Expected to fail for file " + file + " and handler " + handler + ", but did not fail!", EXPECTED_FAILURES.contains(file) && !ignoredOPC && !ignoreHPSF); } catch (OldFileFormatException e) { // for old word files we should still support extracting text Modified: poi/trunk/src/integrationtest/org/apache/poi/hssf/usermodel/RecordsStresser.java URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/hssf/usermodel/RecordsStresser.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/integrationtest/org/apache/poi/hssf/usermodel/RecordsStresser.java (original) +++ poi/trunk/src/integrationtest/org/apache/poi/hssf/usermodel/RecordsStresser.java Sun Dec 22 21:44:45 2019 @@ -28,14 +28,14 @@ import org.apache.poi.hssf.record.Record import org.junit.Test; /** - * Needs to be implemented in this package to have access to + * Needs to be implemented in this package to have access to * HSSFWorkbook.getWorkbook() */ public class RecordsStresser { public static void handleWorkbook(HSSFWorkbook wb) { List<Record> records = wb.getWorkbook().getRecords(); for(Record record : records) { - // some Records do not implement clone ?! + // some Records do not implement clone ?! // equals instead of instanceof is on purpose here to only skip exactly this class and not any derived ones // if(record.getClass().equals(InterfaceHdrRecord.class) || // record.getClass().equals(MMSRecord.class) || @@ -46,18 +46,16 @@ public class RecordsStresser { // continue; // } try { - Record newRecord = (Record) record.clone(); - - assertEquals("Expecting the same class back from clone(), but had Record of type " + record.getClass() + " and got back a " + newRecord.getClass() + " from clone()", - record.getClass(), newRecord.getClass()); - + Record newRecord = record.copy(); + + assertEquals("Expecting the same class back from clone(), but had Record of type " + record.getClass() + " and got back a " + newRecord.getClass() + " from clone()", + record.getClass(), newRecord.getClass()); + byte[] origBytes = record.serialize(); byte[] newBytes = newRecord.serialize(); - - assertArrayEquals("Record of type " + record.getClass() + " should return the same byte array via the clone() method, but did return a different array", + + assertArrayEquals("Record of type " + record.getClass() + " should return the same byte array via the clone() method, but did return a different array", origBytes, newBytes); - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); } catch (RuntimeException e) { // some Records do not implement clone, ignore those for now assertTrue(e.getMessage().contains("needs to define a clone method")); Added: poi/trunk/src/java/org/apache/poi/common/Duplicatable.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/common/Duplicatable.java?rev=1871911&view=auto ============================================================================== --- poi/trunk/src/java/org/apache/poi/common/Duplicatable.java (added) +++ poi/trunk/src/java/org/apache/poi/common/Duplicatable.java Sun Dec 22 21:44:45 2019 @@ -0,0 +1,39 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.common; + +/** + * This is an alternative to the {@link Cloneable} interface without its side-effects. + * A class implementing Duplicatable provides a deep-copy of itself - usually this is done via a copy-constructor, + * which is invoked with a self-reference by the copy method. + * References to child objects are duplicated - references to parents are kept as-is and + * might need to be replaced by the parent copy operation. + * + * @param <T> the implementing class itself + * + * @see <a href="https://www.artima.com/intv/bloch.html#part13">Copy Constructor versus Cloning</a> + */ +public interface Duplicatable { + // Providing a generics interface Duplicatable<T extends Duplicatable<T>> pushes too many + // changes to the implementing classes and the benefit of providing a subtype-specific copy method + // is not sufficient + /** + * @return a deep copy of the implementing class / instance + */ + Duplicatable copy(); +} Propchange: poi/trunk/src/java/org/apache/poi/common/Duplicatable.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: poi/trunk/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java Sun Dec 22 21:44:45 2019 @@ -171,7 +171,4 @@ public abstract class AbstractEscherOptR "properties", this::getEscherProperties ); } - - @Override - public abstract AbstractEscherOptRecord copy(); } Modified: poi/trunk/src/java/org/apache/poi/ddf/EscherContainerRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ddf/EscherContainerRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ddf/EscherContainerRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/ddf/EscherContainerRecord.java Sun Dec 22 21:44:45 2019 @@ -142,13 +142,9 @@ public final class EscherContainerRecord * @return true, if any child has the given recordId */ public boolean hasChildOfType(short recordId) { - for (EscherRecord r : this) { - if(r.getRecordId() == recordId) { - return true; - } - } - return false; + return _childRecords.stream().anyMatch(r -> r.getRecordId() == recordId); } + @Override public EscherRecord getChild( int index ) { return _childRecords.get(index); @@ -170,6 +166,7 @@ public final class EscherContainerRecord return Collections.unmodifiableList(_childRecords).iterator(); } + /** * replaces the internal child list with the contents of the supplied <tt>childRecords</tt> */ Modified: poi/trunk/src/java/org/apache/poi/ddf/EscherRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ddf/EscherRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ddf/EscherRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/ddf/EscherRecord.java Sun Dec 22 21:44:45 2019 @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.function.Supplier; +import org.apache.poi.common.Duplicatable; import org.apache.poi.common.usermodel.GenericRecord; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; @@ -32,12 +33,13 @@ import org.apache.poi.util.GenericRecord import org.apache.poi.util.GenericRecordXmlWriter; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; /** * The base abstract record from which all escher records are defined. Subclasses will need * to define methods for serialization/deserialization and for determining the record size. */ -public abstract class EscherRecord implements Cloneable, GenericRecord { +public abstract class EscherRecord implements Duplicatable, GenericRecord { private static final BitField fInstance = BitFieldFactory.getInstance(0xfff0); private static final BitField fVersion = BitFieldFactory.getInstance(0x000f); @@ -238,9 +240,12 @@ public abstract class EscherRecord imple * Escher records may need to be clonable in the future. * * @return the cloned object + * @deprecated use {@link #copy()} */ @Override @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") public final EscherRecord clone() { return copy(); } @@ -350,5 +355,6 @@ public abstract class EscherRecord imple ); } + @Override public abstract EscherRecord copy(); } \ No newline at end of file Modified: poi/trunk/src/java/org/apache/poi/ddf/EscherTextboxRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ddf/EscherTextboxRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ddf/EscherTextboxRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/ddf/EscherTextboxRecord.java Sun Dec 22 21:44:45 2019 @@ -31,7 +31,7 @@ import org.apache.poi.util.RecordFormatE * Escher format. We don't attempt to understand the contents, since * they will be in the parent's format, not Escher format. */ -public final class EscherTextboxRecord extends EscherRecord implements Cloneable { +public final class EscherTextboxRecord extends EscherRecord { //arbitrarily selected; may need to increase private static final int MAX_RECORD_LENGTH = 100_000; Modified: poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java Sun Dec 22 21:44:45 2019 @@ -31,7 +31,7 @@ import org.apache.poi.util.LittleEndian; * This record is used whenever a escher record is encountered that * we do not explicitly support. */ -public final class UnknownEscherRecord extends EscherRecord implements Cloneable { +public final class UnknownEscherRecord extends EscherRecord { //arbitrarily selected; may need to increase private static final int MAX_RECORD_LENGTH = 100_000_000; Modified: poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/DummyRecordBase.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/DummyRecordBase.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/DummyRecordBase.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/DummyRecordBase.java Sun Dec 22 21:44:45 2019 @@ -23,11 +23,9 @@ import org.apache.poi.util.RecordFormatE /** */ abstract class DummyRecordBase extends Record { - - protected DummyRecordBase() { - // - } - + + protected DummyRecordBase() {} + public final short getSid() { return -1; } Modified: poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/LastCellOfRowDummyRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/LastCellOfRowDummyRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/LastCellOfRowDummyRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/LastCellOfRowDummyRecord.java Sun Dec 22 21:44:45 2019 @@ -25,37 +25,42 @@ package org.apache.poi.hssf.eventusermod public final class LastCellOfRowDummyRecord extends DummyRecordBase { private final int row; private final int lastColumnNumber; - + public LastCellOfRowDummyRecord(int row, int lastColumnNumber) { this.row = row; this.lastColumnNumber = lastColumnNumber; } - + /** * Returns the (0 based) number of the row we are * currently working on. - * + * * @return the (0 based) number of the row */ public int getRow() { return row; } - + /** * Returns the (0 based) number of the last column * seen for this row. You should have already been * called with that record. * This is -1 in the case of there being no columns * for the row. - * + * * @return the (0 based) number of the last column */ public int getLastColumnNumber() { return lastColumnNumber; } - + @Override public String toString() { return "End-of-Row for Row=" + row + " at Column=" + lastColumnNumber; } + + @Override + public LastCellOfRowDummyRecord copy() { + return this; + } } Modified: poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingCellDummyRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingCellDummyRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingCellDummyRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingCellDummyRecord.java Sun Dec 22 21:44:45 2019 @@ -23,13 +23,18 @@ package org.apache.poi.hssf.eventusermod * but still want to trigger something */ public final class MissingCellDummyRecord extends DummyRecordBase { - private int row; - private int column; - + private final int row; + private final int column; + public MissingCellDummyRecord(int row, int column) { this.row = row; this.column = column; } public int getRow() { return row; } public int getColumn() { return column; } + + @Override + public MissingCellDummyRecord copy() { + return this; + } } Modified: poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingRowDummyRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingRowDummyRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingRowDummyRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/eventusermodel/dummyrecord/MissingRowDummyRecord.java Sun Dec 22 21:44:45 2019 @@ -23,12 +23,17 @@ package org.apache.poi.hssf.eventusermod * want to trigger something */ public final class MissingRowDummyRecord extends DummyRecordBase { - private int rowNumber; - + private final int rowNumber; + public MissingRowDummyRecord(int rowNumber) { this.rowNumber = rowNumber; } public int getRowNumber() { return rowNumber; } + + @Override + public MissingRowDummyRecord copy() { + return this; + } } Modified: poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java Sun Dec 22 21:44:45 2019 @@ -132,7 +132,7 @@ public final class InternalSheet { if (rs.peekNextSid() != BOFRecord.sid) { throw new RecordFormatException("BOF record expected"); } - + BOFRecord bof = (BOFRecord) rs.getNext(); if (bof.getType() == BOFRecord.TYPE_WORKSHEET) { // Good, well supported @@ -152,7 +152,7 @@ public final class InternalSheet { throw new UnsupportedBOFType(bof.getType()); } records.add(bof); - + while (rs.hasNext()) { int recSid = rs.peekNextSid(); @@ -339,14 +339,14 @@ public final class InternalSheet { recs.add(r); }}); } - + public static class UnsupportedBOFType extends RecordFormatException { private final int type; protected UnsupportedBOFType(int type) { super("BOF not of a supported type, found " + type); this.type = type; } - + public int getType() { return type; } @@ -360,11 +360,7 @@ public final class InternalSheet { _destList = destList; } public void visitRecord(Record r) { - try { - _destList.add((Record)r.clone()); - } catch (CloneNotSupportedException e) { - throw new RecordFormatException(e); - } + _destList.add(r.copy()); } } @@ -374,7 +370,7 @@ public final class InternalSheet { * can be added to a sheet. The <b>Record</b> object does not implement cloneable. * When adding a new record, implement a public clone method if and only if the record * belongs to a sheet. - * + * * @return the cloned sheet */ public InternalSheet cloneSheet() { @@ -391,12 +387,8 @@ public final class InternalSheet { */ rb = new DrawingRecord(); } - try { - Record rec = (Record) ((Record) rb).clone(); - clonedRecords.add(rec); - } catch (CloneNotSupportedException e) { - throw new RecordFormatException(e); - } + Record rec = ((Record) rb).copy(); + clonedRecords.add(rec); } return createSheet(new RecordStream(clonedRecords, 0)); } @@ -478,7 +470,7 @@ public final class InternalSheet { /** * Updates formulas in cells and conditional formats due to moving of cells - * + * * @param shifter the formular shifter * @param externSheetIndex the externSheet index of this sheet */ @@ -995,7 +987,7 @@ public final class InternalSheet { /** * set the default row height for the sheet (if the rows do not define their own height) - * + * * @param dch the default row height */ public void setDefaultRowHeight(short dch) { @@ -1247,7 +1239,7 @@ public final class InternalSheet { /** * Gets the gridset record for this sheet. - * + * * @return the gridset record for this sheet */ public GridsetRecord getGridsetRecord() @@ -1257,9 +1249,9 @@ public final class InternalSheet { /** * Returns the first occurrence of a record matching a particular sid. - * + * * @param sid the sid to search for - * + * * @return the matching record or {@code null} if it wasn't found */ public Record findFirstRecordBySid(short sid) { @@ -1330,7 +1322,7 @@ public final class InternalSheet { { printGridlines = newPrintGridlines; } - + /** * Returns the PrintHeadersRecord. * @return PrintHeadersRecord for the sheet. @@ -1519,7 +1511,7 @@ public final class InternalSheet { public boolean isDisplayRowColHeadings() { return windowTwo.getDisplayRowColHeadings(); } - + /** * Sets whether the RowColHeadings are shown in a viewer. * @param show whether to show RowColHeadings or not @@ -1681,7 +1673,7 @@ public final class InternalSheet { temp.toArray(result); return result; } - + public int getColumnOutlineLevel(int columnIndex) { return _columnInfos.getOutlineLevel(columnIndex); } Modified: poi/trunk/src/java/org/apache/poi/hssf/model/RecordStream.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/model/RecordStream.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/model/RecordStream.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/model/RecordStream.java Sun Dec 22 21:44:45 2019 @@ -32,7 +32,7 @@ public final class RecordStream { /** * Creates a RecordStream bounded by startIndex and endIndex - * + * * @param inputList the list to iterate over * @param startIndex the start index within the list * @param endIx the end index within the list, which is the index of the end element + 1 @@ -71,6 +71,13 @@ public final class RecordStream { } /** + * @return the next Record. <code>null</code> if this stream is exhausted. + */ + public Record peekNextRecord() { + return (hasNext()) ? _list.get(_nextIndex) : null; + } + + /** * @return -1 if at end of records */ public int peekNextSid() { Modified: poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/AbstractEscherHolderRecord.java Sun Dec 22 21:44:45 2019 @@ -25,14 +25,15 @@ import org.apache.poi.ddf.EscherContaine import org.apache.poi.ddf.EscherRecord; import org.apache.poi.ddf.EscherRecordFactory; import org.apache.poi.ddf.NullEscherSerializationListener; -import org.apache.poi.util.LittleEndian; import org.apache.poi.hssf.util.LazilyConcatenatedByteArray; +import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; /** * The escher container record is used to hold escher records. It is abstract and * must be subclassed for maximum benefit. */ -public abstract class AbstractEscherHolderRecord extends Record implements Cloneable { +public abstract class AbstractEscherHolderRecord extends Record { private static boolean DESERIALISE; static { try { @@ -42,17 +43,17 @@ public abstract class AbstractEscherHold } } - private final List<EscherRecord> escherRecords; + private final List<EscherRecord> escherRecords = new ArrayList<>(); private final LazilyConcatenatedByteArray rawDataContainer = new LazilyConcatenatedByteArray(); - public AbstractEscherHolderRecord() - { - escherRecords = new ArrayList<>(); + public AbstractEscherHolderRecord() {} + + public AbstractEscherHolderRecord(AbstractEscherHolderRecord other) { + other.escherRecords.stream().map(EscherRecord::copy).forEach(escherRecords::add); + rawDataContainer.concatenate(other.rawDataContainer); } - public AbstractEscherHolderRecord(RecordInputStream in) - { - escherRecords = new ArrayList<>(); + public AbstractEscherHolderRecord(RecordInputStream in) { if (! DESERIALISE ) { rawDataContainer.concatenate(in.readRemainder()); } else { @@ -143,10 +144,16 @@ public abstract class AbstractEscherHold public abstract short getSid(); @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") public AbstractEscherHolderRecord clone() { - return (AbstractEscherHolderRecord)cloneViaReserialise(); + return copy(); } + @Override + public abstract AbstractEscherHolderRecord copy(); + public void addEscherRecord(int index, EscherRecord element) { escherRecords.add( index, element ); @@ -171,7 +178,7 @@ public abstract class AbstractEscherHold * If we have a EscherContainerRecord as one of our * children (and most top level escher holders do), * then return that. - * + * * @return the EscherContainerRecord or {@code null} if no child is a container record */ public EscherContainerRecord getEscherContainer() { @@ -187,15 +194,15 @@ public abstract class AbstractEscherHold * Descends into all our children, returning the * first EscherRecord with the given id, or null * if none found - * + * * @param id the record to look for - * + * * @return the record or {@code null} if it can't be found */ public EscherRecord findFirstWithId(short id) { return findFirstWithId(id, getEscherRecords()); } - + private EscherRecord findFirstWithId(short id, List<EscherRecord> records) { // Check at our level for (EscherRecord r : records) { @@ -227,7 +234,7 @@ public abstract class AbstractEscherHold /** * Big drawing group records are split but it's easier to deal with them * as a whole group so we need to join them together. - * + * * @param record the record data to concatenate to the end */ public void join( AbstractEscherHolderRecord record ) Modified: poi/trunk/src/java/org/apache/poi/hssf/record/ArrayRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/ArrayRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/ArrayRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/ArrayRecord.java Sun Dec 22 21:44:45 2019 @@ -17,18 +17,19 @@ package org.apache.poi.hssf.record; -import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.util.CellRangeAddress8Bit; import org.apache.poi.ss.formula.Formula; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndianOutput; +import org.apache.poi.util.Removal; /** * ARRAY (0x0221)<p> * * Treated in a similar way to SharedFormulaRecord */ -public final class ArrayRecord extends SharedValueRecordBase implements Cloneable { +public final class ArrayRecord extends SharedValueRecordBase { public final static short sid = 0x0221; private static final int OPT_ALWAYS_RECALCULATE = 0x0001; @@ -38,6 +39,13 @@ public final class ArrayRecord extends S private int _field3notUsed; private Formula _formula; + public ArrayRecord(ArrayRecord other) { + super(other); + _options = other._options; + _field3notUsed = other._field3notUsed; + _formula = (other._formula == null) ? null : other._formula.copy(); + } + public ArrayRecord(RecordInputStream in) { super(in); _options = in.readUShort(); @@ -92,16 +100,18 @@ public final class ArrayRecord extends S } sb.append("]"); return sb.toString(); - } - - @Override - public ArrayRecord clone() { - ArrayRecord rec = new ArrayRecord(_formula.copy(), getRange()); + } - // they both seem unused, but clone them nevertheless to have an exact copy - rec._options = _options; - rec._field3notUsed = _field3notUsed; + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public ArrayRecord clone() { + return copy(); + } - return rec; + @Override + public ArrayRecord copy() { + return new ArrayRecord(this); } } Modified: poi/trunk/src/java/org/apache/poi/hssf/record/AutoFilterInfoRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/AutoFilterInfoRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/AutoFilterInfoRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/AutoFilterInfoRecord.java Sun Dec 22 21:44:45 2019 @@ -20,27 +20,28 @@ package org.apache.poi.hssf.record; import org.apache.poi.util.LittleEndianOutput; +import org.apache.poi.util.Removal; /** * The AutoFilterInfo record specifies the number of columns that have AutoFilter enabled * and indicates the beginning of the collection of AutoFilter records. - * - * @author Yegor Kozlov */ -public final class AutoFilterInfoRecord extends StandardRecord implements Cloneable { - public final static short sid = 0x9D; +public final class AutoFilterInfoRecord extends StandardRecord { + public static final short sid = 0x9D; /** * Number of AutoFilter drop-down arrows on the sheet */ - private short _cEntries; // = 0; + private short _cEntries; - public AutoFilterInfoRecord() - { + public AutoFilterInfoRecord() {} + + public AutoFilterInfoRecord(AutoFilterInfoRecord other) { + super(other); + _cEntries = other._cEntries; } - public AutoFilterInfoRecord(RecordInputStream in) - { + public AutoFilterInfoRecord(RecordInputStream in) { _cEntries = in.readShort(); } @@ -91,9 +92,15 @@ public final class AutoFilterInfoRecord } @Override - public AutoFilterInfoRecord clone() - { - return (AutoFilterInfoRecord)cloneViaReserialise(); + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public AutoFilterInfoRecord clone() { + return copy(); + } + + @Override + public AutoFilterInfoRecord copy() { + return new AutoFilterInfoRecord(this); } - } \ No newline at end of file Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BOFRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BOFRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/BOFRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/BOFRecord.java Sun Dec 22 21:44:45 2019 @@ -19,44 +19,40 @@ package org.apache.poi.hssf.record; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndianOutput; +import org.apache.poi.util.Removal; /** - * Title: Beginning Of File (0x0809)<P> - * Description: Somewhat of a misnomer, its used for the beginning of a set of - * records that have a particular purpose or subject. - * Used in sheets and workbooks.<P> - * REFERENCE: PG 289 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P> - * @author Andrew C. Oliver - * @author Jason Height (jheight at chariot dot net dot au) + * Somewhat of a misnomer, its used for the beginning of a set of records that + * have a particular purpose or subject. Used in sheets and workbooks. */ -public final class BOFRecord extends StandardRecord implements Cloneable { +public final class BOFRecord extends StandardRecord { /** * for BIFF8 files the BOF is 0x809. For earlier versions see - * {@link #biff2_sid} {@link #biff3_sid} {@link #biff4_sid} + * {@link #biff2_sid} {@link #biff3_sid} {@link #biff4_sid} * {@link #biff5_sid} */ - public final static short sid = 0x809; + public static final short sid = 0x809; // SIDs from earlier BIFF versions - public final static short biff2_sid = 0x009; - public final static short biff3_sid = 0x209; - public final static short biff4_sid = 0x409; - public final static short biff5_sid = 0x809; + public static final short biff2_sid = 0x009; + public static final short biff3_sid = 0x209; + public static final short biff4_sid = 0x409; + public static final short biff5_sid = 0x809; /** suggested default (0x0600 - BIFF8) */ - public final static int VERSION = 0x0600; + public static final int VERSION = 0x0600; /** suggested default 0x10d3 */ - public final static int BUILD = 0x10d3; + public static final int BUILD = 0x10d3; /** suggested default 0x07CC (1996) */ - public final static int BUILD_YEAR = 0x07CC; // 1996 + public static final int BUILD_YEAR = 0x07CC; // 1996 /** suggested default for a normal sheet (0x41) */ - public final static int HISTORY_MASK = 0x41; + public static final int HISTORY_MASK = 0x41; - public final static int TYPE_WORKBOOK = 0x05; - public final static int TYPE_VB_MODULE = 0x06; - public final static int TYPE_WORKSHEET = 0x10; - public final static int TYPE_CHART = 0x20; - public final static int TYPE_EXCEL_4_MACRO = 0x40; - public final static int TYPE_WORKSPACE_FILE = 0x100; + public static final int TYPE_WORKBOOK = 0x05; + public static final int TYPE_VB_MODULE = 0x06; + public static final int TYPE_WORKSHEET = 0x10; + public static final int TYPE_CHART = 0x20; + public static final int TYPE_EXCEL_4_MACRO = 0x40; + public static final int TYPE_WORKSPACE_FILE = 0x100; private int field_1_version; private int field_2_type; @@ -68,9 +64,18 @@ public final class BOFRecord extends Sta /** * Constructs an empty BOFRecord with no fields set. */ - public BOFRecord() { + public BOFRecord() {} + + public BOFRecord(BOFRecord other) { + super(other); + field_1_version = other.field_1_version; + field_2_type = other.field_2_type; + field_3_build = other.field_3_build; + field_4_year = other.field_4_year; + field_5_history = other.field_5_history; + field_6_rversion = other.field_6_rversion; } - + private BOFRecord(int type) { field_1_version = VERSION; field_2_type = type; @@ -79,7 +84,7 @@ public final class BOFRecord extends Sta field_5_history = 0x01; field_6_rversion = VERSION; } - + public static BOFRecord createSheetBOF() { return new BOFRecord(TYPE_WORKSHEET); } @@ -269,14 +274,15 @@ public final class BOFRecord extends Sta } @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") public BOFRecord clone() { - BOFRecord rec = new BOFRecord(); - rec.field_1_version = field_1_version; - rec.field_2_type = field_2_type; - rec.field_3_build = field_3_build; - rec.field_4_year = field_4_year; - rec.field_5_history = field_5_history; - rec.field_6_rversion = field_6_rversion; - return rec; + return copy(); + } + + @Override + public BOFRecord copy() { + return new BOFRecord(this); } } Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BackupRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BackupRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/BackupRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/BackupRecord.java Sun Dec 22 21:44:45 2019 @@ -15,33 +15,31 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.hssf.record; import org.apache.poi.util.LittleEndianOutput; /** - * Title: Backup Record <P> - * Description: Boolean specifying whether - * the GUI should store a backup of the file.<P> - * REFERENCE: PG 287 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P> - * @author Andrew C. Oliver (acoliver at apache dot org) + * Boolean specifying whether the GUI should store a backup of the file. + * * @version 2.0-pre */ -public final class BackupRecord - extends StandardRecord -{ - public final static short sid = 0x40; - private short field_1_backup; // = 0; +public final class BackupRecord extends StandardRecord { + public static final short sid = 0x40; - public BackupRecord() - { + private short field_1_backup; + + public BackupRecord() {} + + public BackupRecord(BackupRecord other) { + super(other); + field_1_backup = other.field_1_backup; } - public BackupRecord(RecordInputStream in) - { + public BackupRecord(RecordInputStream in) { field_1_backup = in.readShort(); } @@ -90,4 +88,9 @@ public final class BackupRecord { return sid; } + + @Override + public BackupRecord copy() { + return new BackupRecord(this); + } } Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BlankRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BlankRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/BlankRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/BlankRecord.java Sun Dec 22 21:44:45 2019 @@ -19,28 +19,32 @@ package org.apache.poi.hssf.record; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndianOutput; +import org.apache.poi.util.Removal; /** - * Title: Blank cell record (0x0201) <P> - * Description: Represents a column in a row with no value but with styling.<P> - * REFERENCE: PG 287 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P> - * @author Andrew C. Oliver (acoliver at apache dot org) - * @author Jason Height (jheight at chariot dot net dot au) + * Represents a column in a row with no value but with styling. + * * @version 2.0-pre */ -public final class BlankRecord extends StandardRecord implements CellValueRecordInterface, Cloneable { - public final static short sid = 0x0201; - private int field_1_row; - private short field_2_col; - private short field_3_xf; +public final class BlankRecord extends StandardRecord implements CellValueRecordInterface { + public static final short sid = 0x0201; + + private int field_1_row; + private short field_2_col; + private short field_3_xf; /** Creates a new instance of BlankRecord */ - public BlankRecord() - { + public BlankRecord() {} + + public BlankRecord(BlankRecord other) { + super(other); + field_1_row = other.field_1_row; + field_2_col = other.field_2_col; + field_3_xf = other.field_3_xf; } - public BlankRecord(RecordInputStream in) - { + + public BlankRecord(RecordInputStream in) { field_1_row = in.readUShort(); field_2_col = in.readShort(); field_3_xf = in.readShort(); @@ -138,11 +142,15 @@ public final class BlankRecord extends S } @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") public BlankRecord clone() { - BlankRecord rec = new BlankRecord(); - rec.field_1_row = field_1_row; - rec.field_2_col = field_2_col; - rec.field_3_xf = field_3_xf; - return rec; + return copy(); + } + + @Override + public BlankRecord copy() { + return new BlankRecord(this); } } Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BookBoolRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BookBoolRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/BookBoolRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/BookBoolRecord.java Sun Dec 22 21:44:45 2019 @@ -15,33 +15,31 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.hssf.record; import org.apache.poi.util.LittleEndianOutput; /** - * Title: Save External Links record (BookBool)<P> - * Description: Contains a flag specifying whether the Gui should save externally - * linked values from other workbooks. <P> - * REFERENCE: PG 289 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P> - * @author Andrew C. Oliver (acoliver at apache dot org) + * Contains a flag specifying whether the Gui should save externally linked values from other workbooks. + * * @version 2.0-pre */ -public final class BookBoolRecord - extends StandardRecord -{ - public final static short sid = 0xDA; - private short field_1_save_link_values; +public final class BookBoolRecord extends StandardRecord { + public static final short sid = 0xDA; - public BookBoolRecord() - { + private short field_1_save_link_values; + + public BookBoolRecord() {} + + public BookBoolRecord(BookBoolRecord other) { + super(other); + field_1_save_link_values = other.field_1_save_link_values; } - public BookBoolRecord(RecordInputStream in) - { + public BookBoolRecord(RecordInputStream in) { field_1_save_link_values = in.readShort(); } @@ -90,4 +88,9 @@ public final class BookBoolRecord { return sid; } + + @Override + public BookBoolRecord copy() { + return new BookBoolRecord(this); + } } Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BoolErrRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BoolErrRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/BoolErrRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/BoolErrRecord.java Sun Dec 22 21:44:45 2019 @@ -21,24 +21,27 @@ import org.apache.poi.ss.usermodel.Formu import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndianOutput; import org.apache.poi.util.RecordFormatException; +import org.apache.poi.util.Removal; /** - * Creates new BoolErrRecord. (0x0205) <P> - * REFERENCE: PG ??? Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P> - * @author Michael P. Harhen - * @author Jason Height (jheight at chariot dot net dot au) + * Creates new BoolErrRecord. (0x0205) */ -public final class BoolErrRecord extends CellRecord implements Cloneable { - public final static short sid = 0x0205; +public final class BoolErrRecord extends CellRecord { + public static final short sid = 0x0205; private int _value; /** - * If <code>true</code>, this record represents an error cell value, otherwise this record represents a boolean cell value + * If <code>true</code>, this record represents an error cell value, + * otherwise this record represents a boolean cell value */ private boolean _isError; /** Creates new BoolErrRecord */ - public BoolErrRecord() { - // fields uninitialised + public BoolErrRecord() {} + + public BoolErrRecord(BoolErrRecord other) { + super(other); + _value = other._value; + _isError = other._isError; } /** @@ -183,11 +186,15 @@ public final class BoolErrRecord extends } @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") public BoolErrRecord clone() { - BoolErrRecord rec = new BoolErrRecord(); - copyBaseFields(rec); - rec._value = _value; - rec._isError = _isError; - return rec; + return copy(); + } + + @Override + public BoolErrRecord copy() { + return new BoolErrRecord(this); } } Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/BottomMarginRecord.java Sun Dec 22 21:44:45 2019 @@ -20,22 +20,24 @@ package org.apache.poi.hssf.record; import org.apache.poi.util.LittleEndianOutput; +import org.apache.poi.util.Removal; /** * Record for the bottom margin. */ -public final class BottomMarginRecord extends StandardRecord implements Margin, Cloneable { - public final static short sid = 0x29; +public final class BottomMarginRecord extends StandardRecord implements Margin { + public static final short sid = 0x29; private double field_1_margin; - public BottomMarginRecord() - { + public BottomMarginRecord() {} + public BottomMarginRecord(BottomMarginRecord other) { + super(other); + field_1_margin = other.field_1_margin; } - public BottomMarginRecord( RecordInputStream in ) - { + public BottomMarginRecord( RecordInputStream in ) { field_1_margin = in.readDouble(); } @@ -79,10 +81,15 @@ public final class BottomMarginRecord ex } @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") public BottomMarginRecord clone() { - BottomMarginRecord rec = new BottomMarginRecord(); - rec.field_1_margin = this.field_1_margin; - return rec; + return copy(); } -} // END OF \ No newline at end of file + @Override + public BottomMarginRecord copy() { + return new BottomMarginRecord(this); + } +} \ No newline at end of file Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java Sun Dec 22 21:44:45 2019 @@ -18,9 +18,9 @@ package org.apache.poi.hssf.record; import java.util.Arrays; -import java.util.Comparator; import java.util.List; +import org.apache.poi.ss.util.WorkbookUtil; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; import org.apache.poi.util.HexDump; @@ -28,20 +28,16 @@ import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndianConsts; import org.apache.poi.util.LittleEndianOutput; import org.apache.poi.util.StringUtil; -import org.apache.poi.ss.util.WorkbookUtil; /** - * Title: Bound Sheet Record (aka BundleSheet) (0x0085)<P> - * Description: Defines a sheet within a workbook. Basically stores the sheet name - * and tells where the Beginning of file record is within the HSSF - * file. <P> - * REFERENCE: PG 291 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2) + * Defines a sheet within a workbook. Basically stores the sheet name and + * tells where the Beginning of file record is within the HSSF file. */ public final class BoundSheetRecord extends StandardRecord { - public final static short sid = 0x0085; - + public static final short sid = 0x0085; private static final BitField hiddenFlag = BitFieldFactory.getInstance(0x01); private static final BitField veryHiddenFlag = BitFieldFactory.getInstance(0x02); + private int field_1_position_of_BOF; private int field_2_option_flags; private int field_4_isMultibyteUnicode; @@ -52,13 +48,21 @@ public final class BoundSheetRecord exte setSheetname(sheetname); } + public BoundSheetRecord(BoundSheetRecord other) { + super(other); + field_1_position_of_BOF = other.field_1_position_of_BOF; + field_2_option_flags = other.field_2_option_flags; + field_4_isMultibyteUnicode = other.field_4_isMultibyteUnicode; + field_5_sheetname = other.field_5_sheetname; + } + /** * UTF8: sid + len + bof + flags + len(str) + unicode + str 2 + 2 + 4 + 2 + * 1 + 1 + len(str) * * UNICODE: sid + len + bof + flags + len(str) + unicode + str 2 + 2 + 4 + 2 + * 1 + 1 + 2 * len(str) - * + * * @param in the record stream to read from */ public BoundSheetRecord(RecordInputStream in) { @@ -158,7 +162,7 @@ public final class BoundSheetRecord exte /** * Is the sheet hidden? Different from very hidden - * + * * @return {@code true} if hidden */ public boolean isHidden() { @@ -167,7 +171,7 @@ public final class BoundSheetRecord exte /** * Is the sheet hidden? Different from very hidden - * + * * @param hidden {@code true} if hidden */ public void setHidden(boolean hidden) { @@ -176,7 +180,7 @@ public final class BoundSheetRecord exte /** * Is the sheet very hidden? Different from (normal) hidden - * + * * @return {@code true} if very hidden */ public boolean isVeryHidden() { @@ -185,7 +189,7 @@ public final class BoundSheetRecord exte /** * Is the sheet very hidden? Different from (normal) hidden - * + * * @param veryHidden {@code true} if very hidden */ public void setVeryHidden(boolean veryHidden) { @@ -195,22 +199,24 @@ public final class BoundSheetRecord exte /** * Converts a List of {@link BoundSheetRecord}s to an array and sorts by the position of their * BOFs. - * + * * @param boundSheetRecords the boundSheetRecord list to arrayify - * + * * @return the sorted boundSheetRecords */ public static BoundSheetRecord[] orderByBofPosition(List<BoundSheetRecord> boundSheetRecords) { BoundSheetRecord[] bsrs = new BoundSheetRecord[boundSheetRecords.size()]; boundSheetRecords.toArray(bsrs); - Arrays.sort(bsrs, BOFComparator); + Arrays.sort(bsrs, BoundSheetRecord::compareRecords); return bsrs; } - - private static final Comparator<BoundSheetRecord> BOFComparator = new Comparator<BoundSheetRecord>() { - public int compare(BoundSheetRecord bsr1, BoundSheetRecord bsr2) { - return bsr1.getPositionOfBof() - bsr2.getPositionOfBof(); - } - }; + private static int compareRecords(BoundSheetRecord bsr1, BoundSheetRecord bsr2) { + return bsr1.getPositionOfBof() - bsr2.getPositionOfBof(); + } + + @Override + public BoundSheetRecord copy() { + return new BoundSheetRecord(this); + } } Modified: poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java?rev=1871911&r1=1871910&r2=1871911&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java (original) +++ poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java Sun Dec 22 21:44:45 2019 @@ -21,22 +21,28 @@ import org.apache.poi.hssf.record.common import org.apache.poi.hssf.record.common.FutureRecord; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.LittleEndianOutput; +import org.apache.poi.util.Removal; /** * Conditional Formatting Header v12 record CFHEADER12 (0x0879), * for conditional formattings introduced in Excel 2007 and newer. */ -public final class CFHeader12Record extends CFHeaderBase implements FutureRecord, Cloneable { +public final class CFHeader12Record extends CFHeaderBase implements FutureRecord { public static final short sid = 0x0879; private FtrHeader futureHeader; - /** Creates new CFHeaderRecord */ public CFHeader12Record() { createEmpty(); futureHeader = new FtrHeader(); futureHeader.setRecordType(sid); } + + public CFHeader12Record(CFHeader12Record other) { + super(other); + futureHeader = other.futureHeader.copy(); + } + public CFHeader12Record(CellRangeAddress[] regions, int nRules) { super(regions, nRules); futureHeader = new FtrHeader(); @@ -78,12 +84,17 @@ public final class CFHeader12Record exte public CellRangeAddress getAssociatedRange() { return futureHeader.getAssociatedRange(); } - + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") public CFHeader12Record clone() { - CFHeader12Record result = new CFHeader12Record(); - result.futureHeader = (FtrHeader)futureHeader.clone(); - super.copyTo(result); - return result; + return copy(); + } + + @Override + public CFHeader12Record copy() { + return new CFHeader12Record(this); } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org