Object>>#name deprecated in Pharo 6 -- what do I need to do?
Hello In the last days there was a discussion that Object>>#name should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced? What do I need to do if I get a deprecation warning [1]? Thanks for the answer in advance Hannes [1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead. Select Proceed to continue, or close this window to cancel the operation.
It says so "on the tin" i.e. in the exception itself "Implement your own domain representation of an object, or use #asString or #printString instead." ;-)
On 24 Aug 2017, at 14:49, H. Hirzel <hannes.hirzel@gmail.com> wrote:
Hello
In the last days there was a discussion that
Object>>#name
should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced?
What do I need to do if I get a deprecation warning [1]?
Thanks for the answer in advance
Hannes
[1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
Select Proceed to continue, or close this window to cancel the operation.
Yes Object >> name is deprecated. A huge victory against evil ideas :) I'm proud of us. On Thu, Aug 24, 2017 at 6:02 PM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
It says so "on the tin" i.e. in the exception itself
"Implement your own domain representation of an object, or use #asString or #printString instead."
;-)
On 24 Aug 2017, at 14:49, H. Hirzel <hannes.hirzel@gmail.com> wrote:
Hello
In the last days there was a discussion that
Object>>#name
should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced?
What do I need to do if I get a deprecation warning [1]?
Thanks for the answer in advance
Hannes
[1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
Select Proceed to continue, or close this window to cancel the operation.
I don't have an Image to check, but I believe Object>>name just does "^self printString", so by default, in your application send #printString instead of #name. cheers -ben P.S. Perhaps this would be a good candidate for automated rewrite? On Thu, Aug 24, 2017 at 8:49 PM, H. Hirzel <hannes.hirzel@gmail.com> wrote:
Hello
In the last days there was a discussion that
Object>>#name
should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced?
What do I need to do if I get a deprecation warning [1]?
Thanks for the answer in advance
Hannes
[1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
Select Proceed to continue, or close this window to cancel the operation.
OK, so #name should not be used at all [1] The error message I get is PPCommonMarkSpecTest class>>DoIt (blockVisitor is Undeclared) The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead. I wonder how I can fix this without going to much into details. --Hannes ------------------------------------------------------------------------------------------------------------------------ [1] Pharo 6.1 source code: Object>>name "Answer a name for the receiver. This is used generically in the title of certain inspectors, such as the referred-to inspector, and specificially by various subsystems. By default, we let the object just print itself out.. " self deprecated: 'Implement your own domain representation of an object, or use #asString or #printString instead.' on: '27 May 2016' in: #Pharo6. ^ self printString On 8/25/17, Ben Coman <btc@openinworld.com> wrote:
I don't have an Image to check, but I believe Object>>name just does "^self printString", so by default, in your application send #printString instead of #name.
cheers -ben
P.S. Perhaps this would be a good candidate for automated rewrite?
On Thu, Aug 24, 2017 at 8:49 PM, H. Hirzel <hannes.hirzel@gmail.com> wrote:
Hello
In the last days there was a discussion that
Object>>#name
should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced?
What do I need to do if I get a deprecation warning [1]?
Thanks for the answer in advance
Hannes
[1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
Select Proceed to continue, or close this window to cancel the operation.
Just checking my presumption... is PPCMNode>>#gtTreeViewIn: you own application method? So where it sends #name, instead send #printString (or #asString). Alternatively, #name is being sent to some domain object that doesn't implement #name, so it falls back to the super one from Object. So implement YourDomainObject>>#name: so the one from Object is not executed. cheers -ben On Sat, Aug 26, 2017 at 4:38 PM, H. Hirzel <hannes.hirzel@gmail.com> wrote:
OK, so #name should not be used at all [1]
The error message I get is
PPCommonMarkSpecTest class>>DoIt (blockVisitor is Undeclared) The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
I wonder how I can fix this without going to much into details.
--Hannes
------------------------------------------------------------ ------------------------------------------------------------ [1] Pharo 6.1 source code:
Object>>name "Answer a name for the receiver. This is used generically in the title of certain inspectors, such as the referred-to inspector, and specificially by various subsystems. By default, we let the object just print itself out.. "
self deprecated: 'Implement your own domain representation of an object, or use #asString or #printString instead.' on: '27 May 2016' in: #Pharo6. ^ self printString
On 8/25/17, Ben Coman <btc@openinworld.com> wrote:
I don't have an Image to check, but I believe Object>>name just does "^self printString", so by default, in your application send #printString instead of #name.
cheers -ben
P.S. Perhaps this would be a good candidate for automated rewrite?
On Thu, Aug 24, 2017 at 8:49 PM, H. Hirzel <hannes.hirzel@gmail.com> wrote:
Hello
In the last days there was a discussion that
Object>>#name
should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced?
What do I need to do if I get a deprecation warning [1]?
Thanks for the answer in advance
Hannes
[1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
Select Proceed to continue, or close this window to cancel the operation.
Hannes You are certainly not required to eliminate #name altogether; all you have to do is to ensure that any object that receives the message #name knows how to answer its own name in an appropriate way. To rephrase Benâs second para in a more long-winded way: a. Run the code that generates the deprecation warning. b. In the warning pop-up, click on âDebugâ. c. Examine the debug stack in the top pane. It is probable that the first two lines will read: HannesClass(Object) deprecated:on:in HannesClass(Object) name where HannesClass is the name of some class in your domain model. d. You now know that some code you have written is sending the message #name to an instance of HannesClass, but the class does not have such a method. The solution is to decide how an instance of that class should answer its name, and implement that as a method on the instance side of that class. If nothing else is obvious, the usual default is ^self printString. e. If the top line of the debug stack does not refer to a class in your model, work your way down the stack until you find a class that is yours. Hope this helps Peter Kenny From: Pharo-users [mailto:pharo-users-bounces@lists.pharo.org] On Behalf Of Ben Coman Sent: 26 August 2017 13:08 To: Any question about pharo is welcome <pharo-users@lists.pharo.org> Subject: Re: [Pharo-users] Object>>#name deprecated in Pharo 6 -- what do I need to do? Just checking my presumption... is PPCMNode>>#gtTreeViewIn: you own application method? So where it sends #name, instead send #printString (or #asString). Alternatively, #name is being sent to some domain object that doesn't implement #name, so it falls back to the super one from Object. So implement YourDomainObject>>#name: so the one from Object is not executed. cheers -ben On Sat, Aug 26, 2017 at 4:38 PM, H. Hirzel <hannes.hirzel@gmail.com <mailto:hannes.hirzel@gmail.com> > wrote: OK, so #name should not be used at all [1] The error message I get is PPCommonMarkSpecTest class>>DoIt (blockVisitor is Undeclared) The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead. I wonder how I can fix this without going to much into details. --Hannes ------------------------------------------------------------------------------------------------------------------------ [1] Pharo 6.1 source code: Object>>name "Answer a name for the receiver. This is used generically in the title of certain inspectors, such as the referred-to inspector, and specificially by various subsystems. By default, we let the object just print itself out.. " self deprecated: 'Implement your own domain representation of an object, or use #asString or #printString instead.' on: '27 May 2016' in: #Pharo6. ^ self printString On 8/25/17, Ben Coman <btc@openinworld.com <mailto:btc@openinworld.com> > wrote:
I don't have an Image to check, but I believe Object>>name just does "^self printString", so by default, in your application send #printString instead of #name.
cheers -ben
P.S. Perhaps this would be a good candidate for automated rewrite?
On Thu, Aug 24, 2017 at 8:49 PM, H. Hirzel <hannes.hirzel@gmail.com <mailto:hannes.hirzel@gmail.com> > wrote:
Hello
In the last days there was a discussion that
Object>>#name
should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced?
What do I need to do if I get a deprecation warning [1]?
Thanks for the answer in advance
Hannes
[1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
Select Proceed to continue, or close this window to cancel the operation.
Hello all Thank you for the helpful answers. What I updated was PPCMNode>>#name "protocol: accessing" name "hackity hack, this should not be used except for tests..." ^ self printString This is the root object of the document model [1] generated by the PetitMarkDown parser, a common markdown parser by Jan Kurs [2]. Now 488 out of 479 tests pass. Regards Hannes [1] PPCMNode is the base class of the document node hierarchy of a document described by markdown ProtoObject #() Object #() PPCMNode #() PPCMDelegateNode #(#children) PPCMBlockQuote #(#code #infoString) PPCMContainer #() PPCMDocument #() PPCMEmphasize #() PPCMFencedCode #(#infoString) PPCMHeader #(#level #title) PPCMHtmlBlock #() PPCMIndentedCode #() PPCMLine #() PPCMList #(#type #start) PPCMListItem #() PPCMParagraph #() PPCMStrong #() PPCMHardBreak #() PPCMHrule #(#rule) PPCMHtml #(#text) PPCMInlinedCode #(#code) PPCMLink #(#label #destination #title) PPCMLinkRef #(#label) PPCMLinkRefDef #(#label #destination #title) PPCMLinkRefDefPlaceholder #() PPCMPlainLine #(#text) PPCMPlainText #(#text) PPCMSoftBreak #() PPCMText #(#text) [2] Name: PetitMarkdown-JanKurs.7 Author: JanKurs Time: 24 August 2016, 12:25:40.146088 pm UUID: a2256c36-fc35-48ad-936d-9fd7567488e1 http://smalltalkhub.com/mc/JanKurs/PetitParser/main On 8/26/17, PBKResearch <peter@pbkresearch.co.uk> wrote:
Hannes
You are certainly not required to eliminate #name altogether; all you have to do is to ensure that any object that receives the message #name knows how to answer its own name in an appropriate way. To rephrase Benâs second para in a more long-winded way:
a. Run the code that generates the deprecation warning. b. In the warning pop-up, click on âDebugâ. c. Examine the debug stack in the top pane. It is probable that the first two lines will read:
HannesClass(Object) deprecated:on:in
HannesClass(Object) name
where HannesClass is the name of some class in your domain model.
d. You now know that some code you have written is sending the message #name to an instance of HannesClass, but the class does not have such a method. The solution is to decide how an instance of that class should answer its name, and implement that as a method on the instance side of that class. If nothing else is obvious, the usual default is ^self printString. e. If the top line of the debug stack does not refer to a class in your model, work your way down the stack until you find a class that is yours.
Hope this helps
Peter Kenny
From: Pharo-users [mailto:pharo-users-bounces@lists.pharo.org] On Behalf Of Ben Coman Sent: 26 August 2017 13:08 To: Any question about pharo is welcome <pharo-users@lists.pharo.org> Subject: Re: [Pharo-users] Object>>#name deprecated in Pharo 6 -- what do I need to do?
Just checking my presumption... is PPCMNode>>#gtTreeViewIn:
you own application method? So where it sends #name, instead send #printString (or #asString).
Alternatively, #name is being sent to some domain object that doesn't implement #name, so it falls back to the super one from Object. So implement YourDomainObject>>#name: so the one from Object is not executed.
cheers -ben
On Sat, Aug 26, 2017 at 4:38 PM, H. Hirzel <hannes.hirzel@gmail.com <mailto:hannes.hirzel@gmail.com> > wrote:
OK, so #name should not be used at all [1]
The error message I get is
PPCommonMarkSpecTest class>>DoIt (blockVisitor is Undeclared) The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
I wonder how I can fix this without going to much into details.
--Hannes
------------------------------------------------------------------------------------------------------------------------ [1] Pharo 6.1 source code:
Object>>name "Answer a name for the receiver. This is used generically in the title of certain inspectors, such as the referred-to inspector, and specificially by various subsystems. By default, we let the object just print itself out.. "
self deprecated: 'Implement your own domain representation of an object, or use #asString or #printString instead.' on: '27 May 2016' in: #Pharo6. ^ self printString
On 8/25/17, Ben Coman <btc@openinworld.com <mailto:btc@openinworld.com> > wrote:
I don't have an Image to check, but I believe Object>>name just does "^self printString", so by default, in your application send #printString instead of #name.
cheers -ben
P.S. Perhaps this would be a good candidate for automated rewrite?
On Thu, Aug 24, 2017 at 8:49 PM, H. Hirzel <hannes.hirzel@gmail.com <mailto:hannes.hirzel@gmail.com> > wrote:
Hello
In the last days there was a discussion that
Object>>#name
should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced?
What do I need to do if I get a deprecation warning [1]?
Thanks for the answer in advance
Hannes
[1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
Select Proceed to continue, or close this window to cancel the operation.
Am 11.09.2017 um 19:05 schrieb H. Hirzel <hannes.hirzel@gmail.com>:
Hello all
Thank you for the helpful answers.
What I updated was
PPCMNode>>#name "protocol: accessing" name "hackity hack, this should not be used except for tests..." ^ self printString
This is the root object of the document model [1] generated by the PetitMarkDown parser, a common markdown parser by Jan Kurs [2].
Now 488 out of 479 tests pass.
I would call that superb quality ð Norbert
Regards Hannes
[1]
PPCMNode is the base class of the document node hierarchy of a document described by markdown
ProtoObject #() Object #() PPCMNode #() PPCMDelegateNode #(#children) PPCMBlockQuote #(#code #infoString) PPCMContainer #() PPCMDocument #() PPCMEmphasize #() PPCMFencedCode #(#infoString) PPCMHeader #(#level #title) PPCMHtmlBlock #() PPCMIndentedCode #() PPCMLine #() PPCMList #(#type #start) PPCMListItem #() PPCMParagraph #() PPCMStrong #() PPCMHardBreak #() PPCMHrule #(#rule) PPCMHtml #(#text) PPCMInlinedCode #(#code) PPCMLink #(#label #destination #title) PPCMLinkRef #(#label) PPCMLinkRefDef #(#label #destination #title) PPCMLinkRefDefPlaceholder #() PPCMPlainLine #(#text) PPCMPlainText #(#text) PPCMSoftBreak #() PPCMText #(#text)
[2] Name: PetitMarkdown-JanKurs.7 Author: JanKurs Time: 24 August 2016, 12:25:40.146088 pm UUID: a2256c36-fc35-48ad-936d-9fd7567488e1
http://smalltalkhub.com/mc/JanKurs/PetitParser/main
On 8/26/17, PBKResearch <peter@pbkresearch.co.uk> wrote: Hannes
You are certainly not required to eliminate #name altogether; all you have to do is to ensure that any object that receives the message #name knows how to answer its own name in an appropriate way. To rephrase Benâs second para in a more long-winded way:
a. Run the code that generates the deprecation warning. b. In the warning pop-up, click on âDebugâ. c. Examine the debug stack in the top pane. It is probable that the first two lines will read:
HannesClass(Object) deprecated:on:in
HannesClass(Object) name
where HannesClass is the name of some class in your domain model.
d. You now know that some code you have written is sending the message #name to an instance of HannesClass, but the class does not have such a method. The solution is to decide how an instance of that class should answer its name, and implement that as a method on the instance side of that class. If nothing else is obvious, the usual default is ^self printString. e. If the top line of the debug stack does not refer to a class in your model, work your way down the stack until you find a class that is yours.
Hope this helps
Peter Kenny
From: Pharo-users [mailto:pharo-users-bounces@lists.pharo.org] On Behalf Of Ben Coman Sent: 26 August 2017 13:08 To: Any question about pharo is welcome <pharo-users@lists.pharo.org> Subject: Re: [Pharo-users] Object>>#name deprecated in Pharo 6 -- what do I need to do?
Just checking my presumption... is PPCMNode>>#gtTreeViewIn:
you own application method? So where it sends #name, instead send #printString (or #asString).
Alternatively, #name is being sent to some domain object that doesn't implement #name, so it falls back to the super one from Object. So implement YourDomainObject>>#name: so the one from Object is not executed.
cheers -ben
On Sat, Aug 26, 2017 at 4:38 PM, H. Hirzel <hannes.hirzel@gmail.com <mailto:hannes.hirzel@gmail.com> > wrote:
OK, so #name should not be used at all [1]
The error message I get is
PPCommonMarkSpecTest class>>DoIt (blockVisitor is Undeclared) The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
I wonder how I can fix this without going to much into details.
--Hannes
------------------------------------------------------------------------------------------------------------------------ [1] Pharo 6.1 source code:
Object>>name "Answer a name for the receiver. This is used generically in the title of certain inspectors, such as the referred-to inspector, and specificially by various subsystems. By default, we let the object just print itself out.. "
self deprecated: 'Implement your own domain representation of an object, or use #asString or #printString instead.' on: '27 May 2016' in: #Pharo6. ^ self printString
On 8/25/17, Ben Coman <btc@openinworld.com <mailto:btc@openinworld.com> > wrote:
I don't have an Image to check, but I believe Object>>name just does "^self printString", so by default, in your application send #printString instead of #name.
cheers -ben
P.S. Perhaps this would be a good candidate for automated rewrite?
On Thu, Aug 24, 2017 at 8:49 PM, H. Hirzel <hannes.hirzel@gmail.com <mailto:hannes.hirzel@gmail.com> > wrote:
Hello
In the last days there was a discussion that
Object>>#name
should no longer be used. I did not follow the discussion in detail. What was decided how #name should be replaced?
What do I need to do if I get a deprecation warning [1]?
Thanks for the answer in advance
Hannes
[1] The method Object>>#name called from PPCMNode>>#gtTreeViewIn: has been deprecated. Implement your own domain representation of an object, or use #asString or #printString instead.
Select Proceed to continue, or close this window to cancel the operation.
participants (7)
-
Ben Coman -
Esteban A. Maringolo -
H. Hirzel -
Norbert Hartl -
PBKResearch -
Stephane Ducasse -
Sven Van Caekenberghe