Ah, I see what you are saying. Yes, I see how this wouldn't be a breaking change at all. Sorry for my confusion.
On Tue, Mar 4, 2025, 2:27 AM Mark de Does <m...@mdedoes.xs4all.nl> wrote: > Kevin, Others, > > See my more elaborate response to Andreas Lehmkuehler. > > It is not a breaking change as existing code uses the existing methods, > that are unchanged. > > So let's not rename PDAbstractContentStream. That might be a breaking > change. (I think it is not, but let's stay on the safe side) > > About the name: I noticed that PDContentStream mainly is about reading > content streams. PDAbstractContentStream is about issuing commands to > the stream, so I added *Output* somewhere in the name. For me any name > will do. I agree that the Microsoft convention from the 1990ies to add > an I or include 'Interface' in the name is not a good idea. > > What name do we choose? PDContentInstructionStream? > > Greetings.. Mark > > -- > Mark de Does, Magdalenastraat 6, 3512 NH Utrecht, the Netherlands > <https://www.google.com/maps/search/Magdalenastraat+6,+3512+NH+Utrecht,+the+Netherlands?entry=gmail&source=g> > , > http://maps.google.nl/?q=52.08692,5.1271, > e:m...@mdedoes.xs4all.nl t: 030 2314150 > > On 03-03-2025 15:34, Kevin Day wrote: > > I'm pretty sure introducing an interface is a breaking change at the > > binary level. While it is source compatible, it will require recompile > > for anyone calling the method. > > > > I personally am not a fan of adding "Interface" to the name of > > interfaces (or putting an "I" at the front). > > > > I like PDContentInstructionStream. > > > > If you choose a name like PDContentInstructionStream, you will > > probably also want to change the name of the abstract class to > > PDAbstractContentInstructionStream (or > > AbstractPDContentInstructionStream). The change is already breaking, > > so changing the name of that class is probably ok. > > > > Have you looked carefully at the design from a "single responsibility" > > perspective? I don't know how many methods you pulled up to the > > interface, but if it is a lot of methods, that might indicate a solid > > design review would be a good idea. I'm happy to take a look - but it > > will be a week before I can get to it. > > > > Finally, if backwards compatibility is a high priority, then changing > > the class to not be final would be the best approach. I prefer the > > interface approach, but sometimes backwards compatibility is more > > important than elegant design... > > > > K > > > > > > On Mon, Mar 3, 2025, 4:09 AM Tilman Hausherr <thaush...@t-online.de> > > wrote: > > > > On 28.02.2025 18:07, Mark de Does wrote: > >> > >> Tilman, Others, > >> > >> To avoid reflections about the original intentions, let's go for > >> the interface approach. (Or can /John/ be consulted?) I already > >> typed the code so that does not feel as a waste for me. > >> > >> That resolves some of the issues in my original mail. Lets > >> recuperate: > >> > >> * Do you think introducing an interface is overkill? Simply > >> making PDAbstractContentStream public would achieve the same > >> thing for me. :: We go for the interface approach > >> * I chose the name PDContentStream for the interface. Later on, > >> I discovered it is an unfortunate name. :: I browsed ISO > >> 32000-2:2020. In 7.8.2 (/Content streams/) It defines a > >> content stream as a sequence of instructions. Would > >> PDInstuctionStream be a good name for the interface? > >> * I moved the JavaDoc comments from the abstract class to the > >> interface. You agree? Or shall I also leave them in place? :: > >> Agreed to move? > >> * On which branch must I base my PR? (I see that the trunk > >> already has a 4.0 version number) :: I am jumping to get this > >> now! What can I do to get this in the next 3.something > >> release? (As far as I can judge.. This widens the API > >> interface and does not change anything functionally) > >> > > Hi, > > > > I added a link to the ticket. You're welcome to apply for an > > account - just include something that we know it's you. I agree > > with the javadoc move. PRs should be against the trunk so OK. > > > > I'm not sure if it is a breaking change. I think it isn't, but > > ChatGPT says it is, but reading its reasoning makes me think it > isn't. > > > > I don't like the name, why not PDContentStreamInterface? Yes it is > > confusing that we have a PDContentStream interface. I'd wait a bit > > for other opinions. > > > > John is still member of the project but hasn't been active since > then. > > > > Tilman > > > > > > > >> * > >> > >> > >> > >> > >> Greetings.. Mark. (Sorry for being pushy) > >> > >> -- > >> Mark de Does,Magdalenastraat 6, 3512 NH Utrecht, the Netherlands < > https://www.google.com/maps/search/Magdalenastraat+6,+3512+NH+Utrecht,+the+Netherlands?entry=gmail&source=g > >, > >> http://maps.google.nl/?q=52.08692,5.1271, > >> e:m...@mdedoes.xs4all.nl t: 030 2314150 > >> On 28-02-2025 14:40, Tilman Hausherr wrote: > >>> Making PDAbstractContentStream public seems to be the easier > >>> solution, but: > >>> It was created package-private. I don't know if (1) John had a > >>> specific reason for it or (2) this was just "best practice" to > >>> make stuff restricted until somebody requests it to be > >>> accessible. However he wrote "unless we want users to subclass > >>> PDAbstractContentStream" so he wanted to prevent that, so it > >>> would be (1). That makes me undecided. > >>> > >>> See here: https://issues.apache.org/jira/browse/PDFBOX-4068 > >>> > >>> Amusingly not only this is still open but it was me who created > >>> it 🤦♂️ > >>> > >>> Tilman > >>> > >>> On 28.02.2025 14:22, Mark de Does wrote: > >>>> In one of my projects, I convert (a subset of) SVG to PDF, > >>>> using PdfBox. > >>>> > >>>> In SVG, the contents of the main <svg> element, the <marker>, > >>>> <symbol> and <pattern> definitions have the same syntax and > >>>> structure. With PdfBox 2, I use a PDPageContentStream to record > >>>> the content of all three. With PdfBox 3, that no longer works > >>>> because I must use a PDPatternContentStream to record a > >>>> pattern. Because the different kinds of content stream do not > >>>> share a visible (public) ancestor, I cannot use the same code > >>>> to record SVG content to a content stream. > >>>> > >>>> This morning, I captured the public methods of > >>>> PDAbstractContentStream in an interface and declared > >>>> PDAbstractContentStream to implement that interface. I adapted > >>>> my code to use the interface and everything works fine. (As > >>>> expected). > >>>> > >>>> Before I make a PR, I need some guidance. > >>>> > >>>> * Do you think introducing an interface is overkill? Simply > >>>> making > >>>> PDAbstractContentStream public would achieve the same thing > >>>> for me. > >>>> (The class, not the constructor) > >>>> * I chose the name PDContentStream for the interface. Later on, I > >>>> discovered that is an infortunate name: A different > >>>> interface with > >>>> that name already exists. What would be a better name? > >>>> * I moved the JavaDoc comments from the abstract class to the > >>>> interface. You agree? Or shall I also leave them in place? > >>>> * On which branch must I base my PR? (I see that the trunk > >>>> already has > >>>> a 4.0 version number) > >>>> > >>>> Thanks and Greetings.. Mark > >>>> > >>> > >>> > >>> > --------------------------------------------------------------------- > >>> > >>> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org > >>> For additional commands, e-mail: users-h...@pdfbox.apache.org > >>> > >