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

Reply via email to