SharpenConfigMapping.java
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2025 Apryse Group NV
Authors: Apryse Software.
This program is offered under a commercial and under the AGPL license.
For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
AGPL licensing:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itextpdf.kernel;
import com.itextpdf.commons.UseBCWrappersModuleOption;
import sharpen.config.MappingConfiguration;
import sharpen.config.MappingConfigurator;
import sharpen.config.ModuleOption;
import sharpen.config.ModulesConfigurator;
import sharpen.config.OptionsConfigurator;
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class SharpenConfigMapping implements MappingConfiguration {
@Override
public int getMappingPriority() {
return 12;
}
@Override
public String getModuleName() {
return "kernel";
}
@Override
public void applyMappingConfiguration(MappingConfigurator configurator) {
configurator.mapNamespace("clipper", "ClipperLib");
configurator.mapNamespace("xmp", "XMP");
configurator.addFullName("iText.Kernel.Events.IEventHandler");
configurator.mapMethod("com.itextpdf.kernel.pdf.PdfObject.getType", "GetObjectType");
configurator.mapMethod("com.itextpdf.kernel.events.Event.getType", "GetEventType");
configurator.mapMethod("com.itextpdf.kernel.geom.AffineTransform.getType", "GetTransformType");
configurator.mapMethod("com.itextpdf.kernel.pdf.canvas.wmf.MetaObject.getType", "GetObjectType");
configurator.mapMethod("com.itextpdf.kernel.pdf.function.Function.getType", "GetFunctionType");
configurator.mapMethod("com.itextpdf.kernel.pdf.tagging.PdfStructElem.getType", "GetStructElementType");
configurator.mapMethod("com.itextpdf.kernel.pdf.canvas.parser.clipper.Paths.getBounds", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.Clipper.GetBounds");
configurator.keepInternalProtected("com.itextpdf.kernel.actions.events.AddFingerPrintEvent.doAction");
configurator.keepInternalProtected("com.itextpdf.kernel.actions.events.FlushPdfDocumentEvent.doAction");
configurator.keepInternalProtected("com.itextpdf.kernel.actions.events.LinkDocumentIdEvent.doAction");
configurator.keepInternalProtected("com.itextpdf.kernel.crypto.securityhandler.CToolNoDeveloperExtension.compareObjects");
configurator.removeMethod("com.itextpdf.kernel.colors.DeviceRgb.DeviceRgb(java.awt.Color)", true);
configurator.mapStringLiteral("com.itextpdf.kernel.pdf.PdfXrefTable.writeKeyInfo.platform", " for .NET");
configurator.mapStringLiteral("com.itextpdf.kernel.font.FontUtil.UNIVERSAL_CMAP_DIR", "ToUnicode.");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.IClipper", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.Clipper");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.Point.LongPoint", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.IntPoint");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.LongRect", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.IntRect");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.PolyTree", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.PolyTree");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.ClipperBridge", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.ClipperBridge");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.IClipper.PolyType", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.PolyType");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.IClipper.PolyFillType", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.PolyFillType");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.IClipper.JoinType", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.JoinType");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.IClipper.EndType", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.EndType");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.IClipper.ClipType", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.ClipType");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.DefaultClipper", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.Clipper");
configurator.mapType("com.itextpdf.kernel.pdf.canvas.parser.clipper.Path", "System.Collections.Generic.List<IntPoint>");
configurator.mapMethod("com.itextpdf.kernel.pdf.canvas.parser.clipper.Paths.makePolyTreeToPaths", "iText.Kernel.Pdf.Canvas.Parser.ClipperLib.Clipper.PolyTreeToPaths");
configurator.mapProperty("com.itextpdf.kernel.pdf.canvas.parser.clipper.PolyNode.getContour", "Contour");
configurator.mapProperty("com.itextpdf.kernel.pdf.canvas.parser.clipper.PolyNode.isOpen", "IsOpen");
configurator.mapProperty("com.itextpdf.kernel.pdf.canvas.parser.clipper.Point.LongPoint.getX", "X");
configurator.mapProperty("com.itextpdf.kernel.pdf.canvas.parser.clipper.Point.LongPoint.getY", "Y");
configurator.addFullName("com.itextpdf.kernel.geom.Path");
configurator.removeMethodOverload("com.itextpdf.kernel.pdf.PdfWriter.write(int)");
configurator.removeMethodOverload("com.itextpdf.kernel.pdf.PdfWriter.write(byte[])");
configurator.removeMethodOverload("com.itextpdf.kernel.pdf.PdfWriter.write(byte[],int,int)");
configurator.removeMethodOverload("com.itextpdf.kernel.pdf.PdfWriter.close");
configurator.removeMethod("com.itextpdf.kernel.pdf.xobject.PdfImageXObject.getBufferedImage");
configurator.removeMethod("com.itextpdf.kernel.pdf.canvas.PdfCanvasTest.awtImagesTest01");
configurator.removeMethod("com.itextpdf.kernel.pdf.PdfReaderTest.getMemoryUse");
configurator.removeMethod("com.itextpdf.kernel.pdf.PdfReaderTest.garbageCollect");
configurator.mapMethod("com.itextpdf.kernel.pdf.function.PdfFunction.getType", "GetFunctionType");
configurator.mapVariableType("com.itextpdf.kernel.pdf.PdfPage.setPageLabel.numberingStyle", "PageLabelNumberingStyle?");
configurator.ignoreVarForNullableGenericsConversion("com.itextpdf.kernel.pdf.PdfNumTree.items");
configurator.ignoreVarForNullableGenericsConversion("com.itextpdf.kernel.pdf.tagging.ParentTreeHandler.registerAllMcrs.parentTreeEntries");
configurator.ignoreVarForNullableGenericsConversion("com.itextpdf.kernel.pdf.tagging.ParentTreeHandler.registerAllMcrs.entry");
configurator.ignoreVarForNullableGenericsConversion("com.itextpdf.kernel.pdf.tagging.ParentTreeHandler.registerAllMcrs.entry");
configurator.ignoreVarForNullableGenericsConversion("com.itextpdf.kernel.pdf.PdfDocument.getPageLabels.pageLabels");
configurator.mapMethodReturnType("com.itextpdf.kernel.pdf.tagging.ParentTreeHandler.structParentIndexIntoKey", "int");
configurator.mapMethodReturnType("com.itextpdf.kernel.pdf.PdfNumTree.getNumbers", "IDictionary<int?, PdfObject>");
configurator.keepInternalProtected("com.itextpdf.kernel.font.Type3Font.setFontName");
configurator.keepInternalProtected("com.itextpdf.kernel.font.Type3Font.setFontFamily");
configurator.keepInternalProtected("com.itextpdf.kernel.font.Type3Font.setFontWeight");
configurator.keepInternalProtected("com.itextpdf.kernel.font.Type3Font.setFontStretch");
configurator.keepInternalProtected("com.itextpdf.kernel.font.Type3Font.setItalicAngle");
configurator.keepInternalProtected("com.itextpdf.kernel.font.Type3Font.setCapHeight");
configurator.keepInternalProtected("com.itextpdf.kernel.font.Type3Font.setTypoAscender");
configurator.keepInternalProtected("com.itextpdf.kernel.font.Type3Font.setTypoDescender");
configurator.keepInternalProtected("com.itextpdf.kernel.font.PdfType3FontTest" + ".DisableEnsureUnderlyingObjectHasIndirectReference.ensureUnderlyingObjectHasIndirectReference");
configurator.ignoreSuperInterface("java.lang.Cloneable", "com.itextpdf.kernel.geom.Rectangle");
configurator.ignoreSuperInterface("java.lang.Cloneable", "com.itextpdf.kernel.geom.PageSize");
configurator.ignoreSuperInterface("java.lang.Cloneable", "com.itextpdf.kernel.geom.AffineTransform");
configurator.mapFunctionalInterfaceToDelegate("com.itextpdf.kernel.pdf.function.BaseInputOutPutConvertors$IInputConversionFunction");
configurator.mapFunctionalInterfaceToDelegate("com.itextpdf.kernel.pdf.function.BaseInputOutPutConvertors$IOutputConversionFunction");
configurator.mapFunctionalInterfaceToDelegate("com.itextpdf.kernel.pdf.function.IPdfFunctionFactory");
configurator.mapMethod("com.itextpdf.kernel.pdf.PdfArray.iterator", "GetEnumerator");
configurator.addCustomUsingDeclaration("com.itextpdf.kernel.pdf.PdfArray", Arrays.asList("System.Collections"));
configurator.removeMethod("com.itextpdf.kernel.pdf.PdfEncryptor.getContent");
configurator.removeField("com.itextpdf.kernel.pdf.ReaderProperties.externalDecryptionProcess");
configurator.removeField("com.itextpdf.kernel.pdf.ReaderProperties.certificateKeyProvider");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.pdf.PdfEncryption.PdfEncryption(" + "com.itextpdf.kernel.pdf.PdfDictionary,java.security.Key,java.security.cert.Certificate," + "java.lang.String,com.itextpdf.kernel.security.IExternalDecryptionProcess)", "1, 2, 3");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.pdf.PdfEncryption.PdfEncryption(" + "com.itextpdf.kernel.pdf.PdfDictionary,java.security.Key,java.security.cert.Certificate," + "java.lang.String,com.itextpdf.kernel.security.IExternalDecryptionProcess,com.itextpdf.kernel.mac.MacIntegrityProtector)", "1, 2, 3, 6");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.pdf.PdfEncryption.PdfEncryption(" + "com.itextpdf.kernel.pdf.PdfDictionary,java.security.Key,java.security.cert.Certificate," + "java.lang.String,com.itextpdf.kernel.security.IExternalDecryptionProcess,com.itextpdf.kernel.mac.AbstractMacIntegrityProtector)", "1, 2, 3, 6");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.securityhandler.EncryptionUtils.fetchEnvelopedData", "1, 2, 5");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.securityhandler.PubKeySecurityHandler.computeGlobalKeyOnReading", "1, 2, 3, 6, 7");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.securityhandler.PubKeySecurityHandler.initKeyAndReadDictionary", "1, 2, 3, 6");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.securityhandler.PubSecHandlerUsingAes128.PubSecHandlerUsingAes128(" + "com.itextpdf.kernel.pdf.PdfDictionary,java.security.Key,java.security.cert.Certificate,java.lang.String," + "com.itextpdf.kernel.security.IExternalDecryptionProcess,boolean)", "1, 2, 3, 6");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.securityhandler.PubSecHandlerUsingStandard40.PubSecHandlerUsingStandard40(" + "com.itextpdf.kernel.pdf.PdfDictionary,java.security.Key,java.security.cert.Certificate,java.lang.String," + "com.itextpdf.kernel.security.IExternalDecryptionProcess,boolean)", "1, 2, 3, 6");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.pdf.ReaderProperties.setPublicKeySecurityParams(" + "java.security.cert.Certificate,java.security.Key,java.lang.String," + "com.itextpdf.kernel.security.IExternalDecryptionProcess)", "1, 2");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.pdf.ReaderProperties.setPublicKeySecurityParams(" + "java.security.cert.Certificate,com.itextpdf.kernel.security.IExternalDecryptionProcess)", "1");
configurator.mapMethod("com.itextpdf.kernel.crypto.CryptoUtil.readPublicCertificate", "iText.Kernel.Crypto.CryptoUtil.ReadPublicCertificate", false);
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.DigestAlgorithms.getMessageDigestFromOid", "1");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.DigestAlgorithms.getMessageDigest", "1");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.DigestAlgorithms.digest" + "(java.io.InputStream,java.lang.String,java.lang.String)", "1, 2");
configurator.mapMethodParametersOrder("com.itextpdf.signatures.PdfPKCS7.PdfPKCS7(byte[],com.itextpdf.kernel.pdf.PdfName,java.lang.String)", "1, 2");
configurator.removeMethod("com.itextpdf.kernel.crypto.DigestAlgorithms.normalizeDigestName");
configurator.mapMethodParametersOrder("com.itextpdf.signatures.LtvVerifier.LtvVerifier(com.itextpdf.kernel.pdf.PdfDocument,java.lang.String)", "1");
configurator.removeMethod("com.itextpdf.signatures.LtvVerifier.LtvVerifier(com.itextpdf.kernel.pdf.PdfDocument,java.lang.String)");
configurator.mapMethodParametersOrder("com.itextpdf.signatures.LtvVerification.LtvVerification(com.itextpdf.kernel.pdf.PdfDocument,java.lang.String)", "1");
configurator.removeMethod("com.itextpdf.signatures.LtvVerification.LtvVerification(com.itextpdf.kernel.pdf.PdfDocument,java.lang.String)");
configurator.mapMethod("com.itextpdf.kernel.pdf.PdfWriter.close", "Dispose");
configurator.removeMethod("com.itextpdf.kernel.pdf.annot.PdfSoundAnnotation.correctWavFile", true);
configurator.removeMethod("com.itextpdf.kernel.xmp.properties.XMPPropertyInfo.getValue");
configurator.removeMethod("com.itextpdf.kernel.xmp.properties.XMPPropertyInfo.getOptions");
configurator.mapMethod("com.itextpdf.kernel.xmp.impl.Utils.normalizeLangValue", "iText.Kernel.XMP.Impl.Utils.NormalizeLangValue");
configurator.mapMethodToCustomMember("com.itextpdf.kernel.pdf.canvas.PdfCanvas.iteratorToList", "EnumeratorToList", SharpenConfigCustomMembers.enumeratorToList);
configurator.mapMethodToCustomMember("com.itextpdf.kernel.pdf.EncryptionProperties.randomBytes", "RandomBytes", SharpenConfigCustomMembers.encryptionPropertiesRandomBytes);
configurator.addCustomUsingDeclaration("com.itextpdf.kernel.pdf.EncryptionProperties", Arrays.asList("System.Security.Cryptography"));
configurator.mapVariableType("com.itextpdf.kernel.colors.DeviceRgbTest.colorByAWTColorTest.color", "System.Drawing.Color");
configurator.mapMethodToCustomMember("com.itextpdf.kernel.geom.Rectangle.clone", "Clone", SharpenConfigCustomMembers.cloneRectangle);
configurator.mapMethodToCustomMember("com.itextpdf.kernel.geom.AffineTransform.clone", "Clone", SharpenConfigCustomMembers.cloneAffineTransform);
configurator.addCustomMember("com.itextpdf.kernel.colors.DeviceRgb", SharpenConfigCustomMembers.deviceRgbDrawingConstructor, 8);
configurator.addCustomMember("com.itextpdf.kernel.pdf.PdfArray", SharpenConfigCustomMembers.getEnumerator);
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.CryptoUtil.getMessageDigest", "1");
configurator.mapMethodParametersOrder("com.itextpdf.kernel.crypto.CryptoUtil.getMessageDigest(java.lang.String,java.lang.String)", "1");
//BouncyCastleWrappersConfigUtils.applyMappingConfiguration(configurator);
}
@Override
public void applySharpenOptions(OptionsConfigurator configurator) {
}
@Override
public void applyConfigModuleSettings(ModulesConfigurator configurator) {
}
@Override
public void setConfigModuleSettings(ModulesConfigurator modulesConfigurator) {
modulesConfigurator.setModuleOption(UseBCWrappersModuleOption.getInstance(), true);
}
@Override
public Collection<ModuleOption> getAvailableModuleSettings() {
return Collections.EMPTY_SET;
}
@Override
public Collection<String> getDependencies() {
return Collections.EMPTY_LIST;
}
@Override
public Collection<String> getIgnoredSourceFiles() {
return Collections.EMPTY_LIST;
}
@Override
public Collection<String> getIgnoredResources() {
return Collections.EMPTY_LIST;
}
@Override
public List<SimpleImmutableEntry<String, String>> getOverwrittenResources() {
return Collections.EMPTY_LIST;
}
}