diff --git a/README.md b/README.md
index 8fb78e7c..9b62b7ee 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
A Smalltalk implementation of the Babylonian Programming System.
## How to install
-1. Get [a recent Squeak][squeakorg]
+1. Get [a recent trunk Squeak][squeakorg]
2. Load [Metacello][metacello]
3. Finally, load Babylonian/S with the following command:
@@ -15,11 +15,6 @@ Metacello new
repository: 'github://hpi-swa-lab/babylonian-programming-smalltalk:main/packages';
load.
```
-4. (Recommended) Disable the preference for notifications on saving methods with styles. This prevents that you will be asked whether you want to save style information whenever you save a method with probes.
-
-```Smalltalk
-Preferences disable: #confirmFirstUseOfStyle.
-```
## Current State
diff --git a/packages/Babylonian-Compiler.package/BPCompiler.class/instance/compileCue.noPattern.ifFail..st b/packages/Babylonian-Compiler.package/BPCompiler.class/instance/compileCue.noPattern.ifFail..st
index b0dd38f6..5c7fe145 100644
--- a/packages/Babylonian-Compiler.package/BPCompiler.class/instance/compileCue.noPattern.ifFail..st
+++ b/packages/Babylonian-Compiler.package/BPCompiler.class/instance/compileCue.noPattern.ifFail..st
@@ -12,16 +12,16 @@ compileCue: aCueWithStyledSource noPattern: aBoolean ifFail: failBlock
inside the morph to re-fullfill that premise again during compilation."
| originalMethodNode bpUnstyledSource unstyledCue |
bpUnstyledSource := aCueWithStyledSource sourceStream contents asString.
-
+
unstyledCue := CompilationCue
source: bpUnstyledSource readStream
context: aCueWithStyledSource context
receiver: aCueWithStyledSource receiver
- class: aCueWithStyledSource getClass
+ class: aCueWithStyledSource getClass
environment: aCueWithStyledSource environment
requestor: aCueWithStyledSource requestor.
originalMethodNode := super compileCue: unstyledCue noPattern: aBoolean ifFail: failBlock.
-
+
bpUnstyledSource := originalMethodNode sourceText asString.
(self methodSourceRequiresBPLayers: bpUnstyledSource) ifTrue: [
(self compileInstrumentedVersionOf: aCueWithStyledSource) ifFalse: failBlock].
diff --git a/packages/Babylonian-Compiler.package/BPCompiler.class/instance/rewriteToSource..st b/packages/Babylonian-Compiler.package/BPCompiler.class/instance/rewriteToSource..st
index d80af367..a76e3222 100644
--- a/packages/Babylonian-Compiler.package/BPCompiler.class/instance/rewriteToSource..st
+++ b/packages/Babylonian-Compiler.package/BPCompiler.class/instance/rewriteToSource..st
@@ -1,4 +1,4 @@
private
rewriteToSource: parseResult
-
+
^ self rewriter value: parseResult
\ No newline at end of file
diff --git a/packages/Babylonian-Compiler.package/BPCompiler.class/methodProperties.json b/packages/Babylonian-Compiler.package/BPCompiler.class/methodProperties.json
index a588f74f..0fd23097 100644
--- a/packages/Babylonian-Compiler.package/BPCompiler.class/methodProperties.json
+++ b/packages/Babylonian-Compiler.package/BPCompiler.class/methodProperties.json
@@ -6,10 +6,10 @@
"instance" : {
"annotationKeywords" : "pre 11/8/2019 20:29",
"backgroundCompileInstrumentedVersionOf:basedOn:" : "pre 10/12/2020 15:36",
- "compileCue:noPattern:ifFail:" : "pre 7/20/2022 16:41",
+ "compileCue:noPattern:ifFail:" : "joabe 10/2/2023 12:53",
"compileInstrumentedVersionOf:" : "jb 9/9/2021 17:31",
"keywords" : "pre 11/30/2022 09:33",
"methodSourceRequiresBPLayers:" : "pre 11/11/2019 15:49",
"parse:" : "pre 5/3/2021 15:01",
- "rewriteToSource:" : "pre 8/17/2020 08:54",
+ "rewriteToSource:" : "joabe 10/2/2023 12:48",
"rewriter" : "jb 12/7/2020 18:03" } }
diff --git a/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/AnnotatedKeywordMessageSend.startTag.actualMessage.endTag..st b/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/AnnotatedKeywordMessageSend.startTag.actualMessage.endTag..st
index 86102354..b5a7a993 100644
--- a/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/AnnotatedKeywordMessageSend.startTag.actualMessage.endTag..st
+++ b/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/AnnotatedKeywordMessageSend.startTag.actualMessage.endTag..st
@@ -1,4 +1,4 @@
grammar rules
AnnotatedKeywordMessageSend: aNode startTag: startTag actualMessage: message endTag: endTag
- ^ self rewriteNode: message withTag: startTag
\ No newline at end of file
+ ^ self rewriteNode: message withTag: startTag
\ No newline at end of file
diff --git a/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/bpTemporaryProbe.with..st b/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/bpTemporaryProbe.with..st
index cd34d7b5..55fba210 100644
--- a/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/bpTemporaryProbe.with..st
+++ b/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/bpTemporaryProbe.with..st
@@ -1,4 +1,4 @@
-as yet unclassified
+rewrite rules
bpTemporaryProbe: annotation with: originalExpressionSourceNode
^ annotation instrumentationCallFor: (self value: originalExpressionSourceNode)
\ No newline at end of file
diff --git a/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/rewriteAssignmentNode.withTag..st b/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/rewriteAssignmentNode.withTag..st
index 58b206ff..d664a70c 100644
--- a/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/rewriteAssignmentNode.withTag..st
+++ b/packages/Babylonian-Compiler.package/BPSourceRewriter.class/instance/rewriteAssignmentNode.withTag..st
@@ -7,9 +7,12 @@ rewriteAssignmentNode: aNode withTag: aTag
^ annotationInformation isProbe
ifFalse: [self rewriteNode: aNode withTag: aTag]
ifTrue: ["To handle assignment probes"
- annotationInformation := annotationInformation asAssignmentProbe.
- "The following is a hack to some degree, but a separate semantic would be overkill here"
- variableNames := aNode children first "NormalStatement" children first "AssignmentOperation*" children collect: [:assignment |
- assignment children first interval contents].
+ annotationInformation := annotationInformation asAssignmentProbe.
+ variableNames := (aNode children first ruleName = #AnnotatedStatement)
+ ifTrue: [ "Nested assignments" #()]
+ ifFalse: ["The following is a hack to some degree, but a separate semantic would be overkill here"
+ aNode children first "NormalStatement"
+ children first "AssignmentOperation*"
+ children collect: [:assignment |assignment children first interval contents]] .
annotationInformation variableNames: variableNames.
annotationInformation instrumentationCallFor: (self value: aNode)]
\ No newline at end of file
diff --git a/packages/Babylonian-Compiler.package/BPSourceRewriter.class/methodProperties.json b/packages/Babylonian-Compiler.package/BPSourceRewriter.class/methodProperties.json
index 0170b617..e741bbcb 100644
--- a/packages/Babylonian-Compiler.package/BPSourceRewriter.class/methodProperties.json
+++ b/packages/Babylonian-Compiler.package/BPSourceRewriter.class/methodProperties.json
@@ -6,7 +6,7 @@
"AnnotatedBinaryMessageSend:startTag:actualMessage:endTag:" : "pre 3/5/2020 16:30",
"AnnotatedBlockLiteral:startTag:actualBlock:endTag:" : "pre 9/1/2022 20:34",
"AnnotatedExpression:startTag:actualExpression:endTag:" : "pre 1/24/2020 17:26",
- "AnnotatedKeywordMessageSend:startTag:actualMessage:endTag:" : "pre 3/5/2020 16:30",
+ "AnnotatedKeywordMessageSend:startTag:actualMessage:endTag:" : "joabe 9/25/2023 19:01",
"AnnotatedMessageChain:startTag:actualMessage:endTag:" : "pre 4/29/2020 17:01",
"AnnotatedOperand:startTag:actualOperand:endTag:" : "pre 3/5/2020 17:37",
"AnnotatedStatement:startTag:actualStatement:endTag:" : "jb 12/3/2020 22:36",
@@ -27,7 +27,7 @@
"nextBlockId" : "pre 1/27/2020 09:17",
"nextProbeId" : "pre 5/10/2019 12:20",
"rewriteArgumentNode:withTag:" : "pre 7/23/2022 15:41",
- "rewriteAssignmentNode:withTag:" : "pre 7/6/2020 18:10",
+ "rewriteAssignmentNode:withTag:" : "joabe 10/4/2023 15:31",
"rewriteCascadeNode:withTag:" : "pre 4/29/2020 17:05",
"rewriteNode:withTag:" : "pre 9/25/2020 11:20",
"value:" : "pre 9/25/2020 11:42",
diff --git a/packages/Babylonian-Core.package/BPAnnotation.class/methodProperties.json b/packages/Babylonian-Core.package/BPAnnotation.class/methodProperties.json
index c8ae160c..2ae977a7 100644
--- a/packages/Babylonian-Core.package/BPAnnotation.class/methodProperties.json
+++ b/packages/Babylonian-Core.package/BPAnnotation.class/methodProperties.json
@@ -31,7 +31,7 @@
"morphClass" : "jb 3/5/2022 12:54",
"otherInformation" : "pre 5/29/2019 10:59",
"otherInformation:" : "jb 12/7/2020 18:06",
- "removeFromMethod:" : "jb 1/10/2022 19:20",
+ "removeFromMethod:" : "joabe 10/6/2023 14:28",
"startTag" : "pre 5/10/2021 09:44",
"startTagSource" : "jb 12/7/2020 18:06",
"startTagSource:" : "pre 5/29/2019 10:59",
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/README.md b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/class/clear.st b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/class/clear.st
new file mode 100644
index 00000000..69bd3313
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/class/clear.st
@@ -0,0 +1,4 @@
+class initialization
+clear
+
+ DefaultValue := nil
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/class/default.st b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/class/default.st
new file mode 100644
index 00000000..d950aeb4
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/class/default.st
@@ -0,0 +1,4 @@
+accessing
+default
+
+ ^ DefaultValue ifNil: [DefaultValue := self new]
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/addProbe..st b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/addProbe..st
new file mode 100644
index 00000000..442a0b8a
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/addProbe..st
@@ -0,0 +1,10 @@
+actions
+addProbe: aProbe
+
+ nameToProbesDict at: aProbe assignedClassName
+ ifPresent: [:registeredProbes | registeredProbes add: aProbe]
+ ifAbsent: [ | k |
+ k := KeyedSet keyBlock: [ :each | each variableName ].
+ k add: aProbe.
+ nameToProbesDict at: aProbe assignedClassName put: k]
+
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/at..st b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/at..st
new file mode 100644
index 00000000..fa57f84f
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/at..st
@@ -0,0 +1,4 @@
+accessing
+at: aClassName
+
+ ^ nameToProbesDict at: aClassName
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/initialize.st b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/initialize.st
new file mode 100644
index 00000000..d5cc716d
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/initialize.st
@@ -0,0 +1,5 @@
+initialize-release
+initialize
+
+ super initialize.
+ nameToProbesDict := Dictionary new.
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/nameToProbesDict.st b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/nameToProbesDict.st
new file mode 100644
index 00000000..3b42976d
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/nameToProbesDict.st
@@ -0,0 +1,4 @@
+accessing
+nameToProbesDict
+
+ ^ nameToProbesDict
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/removeProbe..st b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/removeProbe..st
new file mode 100644
index 00000000..7e8930e8
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/instance/removeProbe..st
@@ -0,0 +1,8 @@
+actions
+removeProbe: aProbe
+
+ nameToProbesDict at: aProbe assignedClassName
+ ifPresent: [:registeredProbes | registeredProbes remove: aProbe.
+ registeredProbes ifEmpty:
+ [nameToProbesDict removeKey: aProbe assignedClassName]]
+
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/methodProperties.json b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/methodProperties.json
new file mode 100644
index 00000000..ed306ec6
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/methodProperties.json
@@ -0,0 +1,10 @@
+{
+ "class" : {
+ "clear" : "joabe 9/28/2023 12:59",
+ "default" : "joabe 9/28/2023 12:57" },
+ "instance" : {
+ "addProbe:" : "joabe 10/5/2023 18:01",
+ "at:" : "joabe 9/28/2023 15:08",
+ "initialize" : "joabe 9/27/2023 16:33",
+ "nameToProbesDict" : "joabe 9/28/2023 12:59",
+ "removeProbe:" : "joabe 10/5/2023 17:47" } }
diff --git a/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/properties.json b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/properties.json
new file mode 100644
index 00000000..546f51eb
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPClassNameToInstanceProbes.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Babylonian-Core-Tracing",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ "DefaultValue" ],
+ "commentStamp" : "",
+ "instvars" : [
+ "nameToProbesDict" ],
+ "name" : "BPClassNameToInstanceProbes",
+ "pools" : [
+ ],
+ "super" : "DynamicVariable",
+ "type" : "normal" }
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/README.md b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/class/annotationTag.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/class/annotationTag.st
new file mode 100644
index 00000000..0ef10469
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/class/annotationTag.st
@@ -0,0 +1,4 @@
+constants
+annotationTag
+
+ ^ 'bpInstanceProbe'
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/asMorph.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/asMorph.st
new file mode 100644
index 00000000..6a60304e
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/asMorph.st
@@ -0,0 +1,7 @@
+morphic
+asMorph
+
+ | newMorph |
+ newMorph := BPInstanceVariableProbeMorph new annotation: self; yourself.
+ self updateTextAnchorPropertiesOf: newMorph.
+ ^ newMorph
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/assignedClassName..st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/assignedClassName..st
new file mode 100644
index 00000000..ce428841
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/assignedClassName..st
@@ -0,0 +1,4 @@
+accessing
+assignedClassName: aString
+
+ assignedClassName := aString
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/assignedClassName.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/assignedClassName.st
new file mode 100644
index 00000000..72a04577
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/assignedClassName.st
@@ -0,0 +1,4 @@
+accessing
+assignedClassName
+
+ ^ assignedClassName
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/canBeAnnotatedTo.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/canBeAnnotatedTo.st
new file mode 100644
index 00000000..9fed5d69
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/canBeAnnotatedTo.st
@@ -0,0 +1,4 @@
+ui
+canBeAnnotatedTo
+
+ ^ #(stringLiteral)
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/deleteLinkedProbes.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/deleteLinkedProbes.st
new file mode 100644
index 00000000..8ac1def4
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/deleteLinkedProbes.st
@@ -0,0 +1,11 @@
+initialize-release
+deleteLinkedProbes
+
+ | browser |
+ browser := BPBrowser open.
+
+ self linkedProbes do: [:aProbe |
+ browser browseReference: aProbe methodReference.
+ browser removeAnnotations: {aProbe}].
+
+ browser currentWindow delete.
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/initialize.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/initialize.st
new file mode 100644
index 00000000..2442703e
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/initialize.st
@@ -0,0 +1,6 @@
+initialize-release
+initialize
+
+ super initialize.
+
+ linkedProbes := OrderedCollection new.
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/instrumentationCallFor..st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/instrumentationCallFor..st
new file mode 100644
index 00000000..b0347ba3
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/instrumentationCallFor..st
@@ -0,0 +1,8 @@
+serialization
+instrumentationCallFor: actualEnclosedExpressionSource
+
+ "Currently not used as instance probes do not rewrite a class definition in which they exist"
+ ^ '(self bpTraceVariable: [{1}] forProbe: {2} linked: \{{3}\} inContext: thisContext)'
+ format: {actualEnclosedExpressionSource .
+ self id.
+ ((self linkedProbes gather: [:probe | probe id]) joinSeparatedBy: ' . ')}
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/isInstanceVariableProbe.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/isInstanceVariableProbe.st
new file mode 100644
index 00000000..43f7d173
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/isInstanceVariableProbe.st
@@ -0,0 +1,4 @@
+testing
+isInstanceVariableProbe
+
+ ^ true
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/linkedProbes.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/linkedProbes.st
new file mode 100644
index 00000000..c4809403
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/linkedProbes.st
@@ -0,0 +1,4 @@
+accessing
+linkedProbes
+
+ ^ linkedProbes
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/probeTypeTag.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/probeTypeTag.st
new file mode 100644
index 00000000..da5e9857
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/probeTypeTag.st
@@ -0,0 +1,4 @@
+serialization
+probeTypeTag
+
+ ^ 'bpInstanceProbe'
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/removeFromMethod..st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/removeFromMethod..st
new file mode 100644
index 00000000..18baafbf
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/removeFromMethod..st
@@ -0,0 +1,4 @@
+initialize-release
+removeFromMethod: aCompiledMethod
+
+ "do nothing"
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/variableName..st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/variableName..st
new file mode 100644
index 00000000..a584d519
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/variableName..st
@@ -0,0 +1,4 @@
+accessing
+variableName: aString
+
+ self enclosedExpressionSource: aString
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/variableName.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/variableName.st
new file mode 100644
index 00000000..28a76450
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/variableName.st
@@ -0,0 +1,4 @@
+accessing
+variableName
+
+ ^ self enclosedExpressionSource
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/wantsMetaClassIndication.st b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/wantsMetaClassIndication.st
new file mode 100644
index 00000000..3711a64c
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/instance/wantsMetaClassIndication.st
@@ -0,0 +1,4 @@
+accessing
+wantsMetaClassIndication
+
+ ^ false
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/methodProperties.json b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/methodProperties.json
new file mode 100644
index 00000000..5eb06d6a
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/methodProperties.json
@@ -0,0 +1,18 @@
+{
+ "class" : {
+ "annotationTag" : "joabe 9/25/2023 17:30" },
+ "instance" : {
+ "asMorph" : "joabe 10/6/2023 14:43",
+ "assignedClassName" : "joabe 10/6/2023 14:40",
+ "assignedClassName:" : "joabe 10/6/2023 14:40",
+ "canBeAnnotatedTo" : "joabe 9/21/2023 21:08",
+ "deleteLinkedProbes" : "joabe 10/6/2023 14:40",
+ "initialize" : "joabe 10/4/2023 15:33",
+ "instrumentationCallFor:" : "joabe 10/7/2023 18:25",
+ "isInstanceVariableProbe" : "joabe 9/21/2023 21:18",
+ "linkedProbes" : "joabe 10/4/2023 15:33",
+ "probeTypeTag" : "joabe 9/25/2023 17:30",
+ "removeFromMethod:" : "joabe 9/27/2023 16:43",
+ "variableName" : "joabe 9/28/2023 14:47",
+ "variableName:" : "joabe 9/28/2023 14:47",
+ "wantsMetaClassIndication" : "joabe 9/21/2023 21:08" } }
diff --git a/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/properties.json b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/properties.json
new file mode 100644
index 00000000..f53092e1
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPInstanceVariableProbe.class/properties.json
@@ -0,0 +1,15 @@
+{
+ "category" : "Babylonian-Core-Annotations",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ "assignedClassName",
+ "linkedProbes" ],
+ "name" : "BPInstanceVariableProbe",
+ "pools" : [
+ ],
+ "super" : "BPProbe",
+ "type" : "normal" }
diff --git a/packages/Babylonian-Core.package/BPProbe.class/instance/isInstanceVariableProbe.st b/packages/Babylonian-Core.package/BPProbe.class/instance/isInstanceVariableProbe.st
new file mode 100644
index 00000000..69d46050
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPProbe.class/instance/isInstanceVariableProbe.st
@@ -0,0 +1,4 @@
+testing
+isInstanceVariableProbe
+
+ ^ false
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPProbe.class/methodProperties.json b/packages/Babylonian-Core.package/BPProbe.class/methodProperties.json
index 0ee8a46f..ccb35037 100644
--- a/packages/Babylonian-Core.package/BPProbe.class/methodProperties.json
+++ b/packages/Babylonian-Core.package/BPProbe.class/methodProperties.json
@@ -13,6 +13,7 @@
"hasExpression" : "pre 6/7/2021 16:52",
"hasLabel" : "lu 5/20/2021 15:14",
"instrumentationCallFor:" : "pre 1/10/2023 17:33",
+ "isInstanceVariableProbe" : "joabe 9/21/2023 21:18",
"isProbe" : "pre 7/3/2019 11:12",
"isTemporaryProbe" : "pre 9/2/2022 14:40",
"label" : "joabe 5/9/2023 17:37",
diff --git a/packages/Babylonian-Core.package/BPTraceValue.class/instance/allBabylonianInternalClasses.st b/packages/Babylonian-Core.package/BPTraceValue.class/instance/allBabylonianInternalClasses.st
new file mode 100644
index 00000000..657b195c
--- /dev/null
+++ b/packages/Babylonian-Core.package/BPTraceValue.class/instance/allBabylonianInternalClasses.st
@@ -0,0 +1,8 @@
+private
+allBabylonianInternalClasses
+ ^ #('Babylonian-Core' 'Babylonian-Compiler' 'Babylonian-UI' 'Babylonian-ProbeLog')
+ inject: OrderedCollection new
+ into: [:theClasses :aPackage |
+ theClasses, (PackageOrganizer default packageNamed: aPackage
+ ifPresent: [:thePackage | thePackage classes]
+ ifAbsent: [#()])].
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/BPTraceValue.class/methodProperties.json b/packages/Babylonian-Core.package/BPTraceValue.class/methodProperties.json
index a73dc3a1..5632283d 100644
--- a/packages/Babylonian-Core.package/BPTraceValue.class/methodProperties.json
+++ b/packages/Babylonian-Core.package/BPTraceValue.class/methodProperties.json
@@ -5,6 +5,7 @@
"ignoredMessagesInStack" : "pre 9/27/2023 14:34",
"value:identityHash:stack:" : "pre 10/12/2020 17:57" },
"instance" : {
+ "allBabylonianInternalClasses" : "joabe 7/2/2023 23:54",
"asValueMorph" : "jb 5/20/2021 01:00",
"belongingAnnotation" : "lu 1/31/2022 16:59",
"belongingAnnotationId" : "lu 12/1/2021 07:32",
diff --git a/packages/Babylonian-Core.package/CompiledMethod.extension/instance/bpExtractVariableAssignmentRangesNamed..st b/packages/Babylonian-Core.package/CompiledMethod.extension/instance/bpExtractVariableAssignmentRangesNamed..st
new file mode 100644
index 00000000..b841f234
--- /dev/null
+++ b/packages/Babylonian-Core.package/CompiledMethod.extension/instance/bpExtractVariableAssignmentRangesNamed..st
@@ -0,0 +1,6 @@
+*Babylonian-Core
+bpExtractVariableAssignmentRangesNamed: aVariableName
+
+ ^ (self extractAssignmentIntervalsFrom: self parseTree named: aVariableName) flatten
+
+
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/CompiledMethod.extension/instance/extractAssignmentIntervalsFrom.named..st b/packages/Babylonian-Core.package/CompiledMethod.extension/instance/extractAssignmentIntervalsFrom.named..st
new file mode 100644
index 00000000..103f7753
--- /dev/null
+++ b/packages/Babylonian-Core.package/CompiledMethod.extension/instance/extractAssignmentIntervalsFrom.named..st
@@ -0,0 +1,19 @@
+*Babylonian-Core
+extractAssignmentIntervalsFrom: aRBNodeWithBody named: aVariableName
+
+ "Private"
+ | currentIntervals nestedIntervals |
+ "No shadowing"
+ ((aRBNodeWithBody body temporaries collect: [:aVariableNode | aVariableNode token value])
+ includes: aVariableName) ifTrue: [^ #()].
+
+ nestedIntervals := aRBNodeWithBody body statements select: [:aRBNode | aRBNode isBlock]
+ thenCollect: [:aBlockNode | self extractAssignmentIntervalsFrom: aBlockNode named: aVariableName].
+ currentIntervals := aRBNodeWithBody body statements select: [:aRBNode |
+ aRBNode isAssignment and: [aRBNode variable token value = aVariableName]]
+ thenCollect: [:anAssignmentNode |
+ anAssignmentNode startWithoutParentheses@anAssignmentNode stopWithoutParentheses].
+
+ ^ currentIntervals, nestedIntervals
+
+
\ No newline at end of file
diff --git a/packages/Babylonian-Core.package/CompiledMethod.extension/methodProperties.json b/packages/Babylonian-Core.package/CompiledMethod.extension/methodProperties.json
index 7b1f9357..28eb6b82 100644
--- a/packages/Babylonian-Core.package/CompiledMethod.extension/methodProperties.json
+++ b/packages/Babylonian-Core.package/CompiledMethod.extension/methodProperties.json
@@ -5,10 +5,12 @@
"bpActiveExamples" : "pre 8/20/2020 15:51",
"bpAnnotations" : "pre 6/24/2021 14:26",
"bpExamples" : "pre 1/11/2023 15:01",
+ "bpExtractVariableAssignmentRangesNamed:" : "joabe 10/4/2023 14:47",
"bpNewExampleFrom:" : "pre 5/10/2021 09:11",
"bpRemoveExample:" : "pre 5/19/2021 21:35",
"compiledMethod" : "pre 7/7/2020 15:39",
"exampleInstanceName" : "pre 9/28/2021 16:22",
+ "extractAssignmentIntervalsFrom:named:" : "joabe 10/4/2023 14:21",
"isBPInstalled" : "pre 1/11/2021 12:00",
"isExampleInstanceMethod" : "pre 9/28/2021 16:00",
"newExampleInstance" : "pre 9/28/2021 16:00" } }
diff --git a/packages/Babylonian-ExampleMining.package/BPExampleMorph.extension/instance/updateMorphs.st b/packages/Babylonian-ExampleMining.package/BPExampleMorph.extension/instance/updateMorphs.st
deleted file mode 100644
index f879c586..00000000
--- a/packages/Babylonian-ExampleMining.package/BPExampleMorph.extension/instance/updateMorphs.st
+++ /dev/null
@@ -1,15 +0,0 @@
-*Babylonian-ExampleMining-Core-override
-updateMorphs
-
- self removeAllMorphs.
-
- self
- addActivationButtonMorph;
- addCollapseButtonMorph;
- addAssertResultButtonMorph;
- addLoaderIconHolder;
- addExampleNameMorph;
- addMenuButtonMorph;
- addExampleSpecificMorphs;
- addRecordAndMinimizeButtonMorph;
- addDeleteButtonMorph.
\ No newline at end of file
diff --git a/packages/Babylonian-ExampleMining.package/BPExampleMorph.extension/methodProperties.json b/packages/Babylonian-ExampleMining.package/BPExampleMorph.extension/methodProperties.json
index 0f35f8e5..7d62659b 100644
--- a/packages/Babylonian-ExampleMining.package/BPExampleMorph.extension/methodProperties.json
+++ b/packages/Babylonian-ExampleMining.package/BPExampleMorph.extension/methodProperties.json
@@ -3,5 +3,4 @@
},
"instance" : {
"addRecordAndMinimizeButtonMorph" : "joabe 7/6/2023 22:32",
- "recordAndMinimizeButtonClicked" : "joabe 7/6/2023 22:32",
- "updateMorphs" : "joabe 7/6/2023 22:35" } }
+ "recordAndMinimizeButtonClicked" : "joabe 7/6/2023 22:32" } }
diff --git a/packages/Babylonian-ExampleMining.package/BPExamplesMorph.extension/instance/initialize.st b/packages/Babylonian-ExampleMining.package/BPExamplesMorph.extension/instance/initialize.st
deleted file mode 100644
index 948dde6b..00000000
--- a/packages/Babylonian-ExampleMining.package/BPExamplesMorph.extension/instance/initialize.st
+++ /dev/null
@@ -1,27 +0,0 @@
-*Babylonian-ExampleMining-Core-override
-initialize
-
- super initialize.
-
- self
- color: Color transparent;
- borderWidth: (PluggableButtonMorph basicNew userInterfaceTheme borderWidth);
- borderColor: self class textColor.
-
- self
- changeTableLayout;
- hResizing: #rigid;
- listDirection: #topToBottom;
- cellInset: 1.
-
- self addCollapsedExamplesMorph.
-
- self
- addButtonBar;
- addCreateExampleButtonLabeled: 'add example' selector: #addExampleButtonClicked;
- addCreateExampleButtonLabeled: '| add script example' selector: #addScriptExampleButtonClicked;
- addCreateExampleButtonLabeled: '| add referencing example' selector: #addReferencingExampleButtonClicked;
- addCreateExampleButtonLabeled: '| add TestCaseExample' selector: #addTestCaseExampleButtonClicked;
- addCreateExampleButtonLabeled: '| add recorded example' selector: #addRecordedExampleButtonClicked.
-
- BPExamples value addDependent: self.
\ No newline at end of file
diff --git a/packages/Babylonian-ExampleMining.package/BPExamplesMorph.extension/methodProperties.json b/packages/Babylonian-ExampleMining.package/BPExamplesMorph.extension/methodProperties.json
index 96b923e4..2f9d72cb 100644
--- a/packages/Babylonian-ExampleMining.package/BPExamplesMorph.extension/methodProperties.json
+++ b/packages/Babylonian-ExampleMining.package/BPExamplesMorph.extension/methodProperties.json
@@ -6,6 +6,5 @@
"addRecordedExampleButtonClicked" : "joabe 7/6/2023 22:36",
"addTestCaseExampleButtonClicked" : "joabe 7/6/2023 22:45",
"containsTestMethod" : "joabe 7/6/2023 22:44",
- "initialize" : "joabe 7/6/2023 22:43",
"openRecordingTool" : "joabe 7/6/2023 22:37",
"openSearchTool" : "joabe 7/6/2023 22:37" } }
diff --git a/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/instance/addArgumentScriptMorphs.st b/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/instance/addArgumentScriptMorphs.st
deleted file mode 100644
index 1e554e0c..00000000
--- a/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/instance/addArgumentScriptMorphs.st
+++ /dev/null
@@ -1,32 +0,0 @@
-*Babylonian-ExampleMining-Core-override
-addArgumentScriptMorphs
-
- | editField container |
- self example argumentNames withIndexDo: [:argumentName :index |
- container := self newLabelContainerMorph: (argumentName , ': ').
-
- editField := self
- editFieldStyledInitialContent: (self example argumentScriptStringAt: index)
- onChange: [:str |
- self example argumentScripts at: index put: str.
- self codeContentChanged]
- onAccept: [:str |
- self acceptChangesAtSource.
- false "Do not continue handling this morphs edit"].
- editField
- balloonText: 'write code that instantiates the argument';
- width: 240.
- container addMorphBack: editField.
-
- "Live specimen editing"
- ((self example argumentScripts at: index) isLiveSpecimenReference)
- ifTrue: [container addMorphBack: (self newSpecimenEditingButtonFor: (self example argumentScripts at: index))].
-
- "Live specimen selection"
- container addMorphBack: (self newSpecimenSelectionButtonOnClick: [
- self selectLiveSpecimen: (self example liveSpecimenAt: index) then: [:specimen |
- self example argumentScripts at: index put: specimen.
- self codeContentChanged.
- editField setText: (self example argumentScriptStringAt: index)]]).
-
- exampleSpecificMorphs addMorphBack: container].
\ No newline at end of file
diff --git a/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/instance/addReceiverConstructorMorph.st b/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/instance/addReceiverConstructorMorph.st
deleted file mode 100644
index 1a33fac2..00000000
--- a/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/instance/addReceiverConstructorMorph.st
+++ /dev/null
@@ -1,32 +0,0 @@
-*Babylonian-ExampleMining-Core-override
-addReceiverConstructorMorph
-
- | container editField |
- container := self newLabelContainerMorph: 'self: '.
-
- editField := (self
- editFieldStyledInitialContent: self example receiverConstructorString
- onChange: [:str |
- self example receiverConstructor: str.
- self codeContentChanged]
- onAccept: [:str |
- self acceptChangesAtSource]).
- editField
- balloonText: 'Write code that instantiates the receiver.
-You can also provide a selector that will be called on the
-class-side of this class to create a receiver object.';
- width: 240.
- container addMorphBack: editField.
-
- "Live specimen editing"
- (self example receiverConstructor isLiveSpecimenReference)
- ifTrue: [container addMorphBack: (self newSpecimenEditingButtonFor: self example receiverConstructor)].
-
- "Live specimen selection"
- container addMorphBack: (self newSpecimenSelectionButtonOnClick: [
- self selectLiveSpecimen: self example receiverConstructorLiveSpecimen then: [:specimen |.
- self example receiverConstructor: specimen.
- self codeContentChanged.
- editField setText: self example receiverConstructorString]]).
-
- exampleSpecificMorphs addMorphBack: container.
\ No newline at end of file
diff --git a/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/methodProperties.json b/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/methodProperties.json
index 33670c07..413ec341 100644
--- a/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/methodProperties.json
+++ b/packages/Babylonian-ExampleMining.package/BPMethodExampleMorph.extension/methodProperties.json
@@ -2,6 +2,4 @@
"class" : {
},
"instance" : {
- "addArgumentScriptMorphs" : "joabe 7/6/2023 22:59",
- "addReceiverConstructorMorph" : "joabe 7/6/2023 22:51",
"newSpecimenEditingButtonFor:" : "ek 7/24/2023 18:34" } }
diff --git a/packages/Babylonian-ProbeLog.package/BPSwimlaneLineMorph.class/instance/fontColor.st b/packages/Babylonian-ProbeLog.package/BPSwimlaneLineMorph.class/instance/fontColor.st
new file mode 100644
index 00000000..18c7fd77
--- /dev/null
+++ b/packages/Babylonian-ProbeLog.package/BPSwimlaneLineMorph.class/instance/fontColor.st
@@ -0,0 +1,4 @@
+constants
+fontColor
+
+ ^ PluggableTextMorph basicNew userInterfaceTheme textColor
\ No newline at end of file
diff --git a/packages/Babylonian-ProbeLog.package/BPSwimlaneLineMorph.class/methodProperties.json b/packages/Babylonian-ProbeLog.package/BPSwimlaneLineMorph.class/methodProperties.json
index c89c8788..771f6232 100644
--- a/packages/Babylonian-ProbeLog.package/BPSwimlaneLineMorph.class/methodProperties.json
+++ b/packages/Babylonian-ProbeLog.package/BPSwimlaneLineMorph.class/methodProperties.json
@@ -9,6 +9,7 @@
"colorFor:" : "lu 3/7/2022 19:27",
"containingSwimlane:" : "lu 3/7/2022 18:35",
"context:" : "joabe 5/9/2023 17:41",
+ "fontColor" : "lu 3/7/2022 00:44",
"fontHeight" : "lu 3/7/2022 00:37",
"haltButtonClicked" : "lu 3/7/2022 18:35",
"iconSize" : "lu 3/7/2022 00:37",
diff --git a/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testCorrectIntervalForInstanceVariable.st b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testCorrectIntervalForInstanceVariable.st
new file mode 100644
index 00000000..38ea13ff
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testCorrectIntervalForInstanceVariable.st
@@ -0,0 +1,2 @@
+as yet unclassified
+testCorrectIntervalForInstanceVariable
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesCorrectIntervalForExistingVariableAndPerfectSelection.st b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesCorrectIntervalForExistingVariableAndPerfectSelection.st
new file mode 100644
index 00000000..a3cafbe8
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesCorrectIntervalForExistingVariableAndPerfectSelection.st
@@ -0,0 +1,5 @@
+as yet unclassified
+testDeterminesCorrectIntervalForExistingVariableAndPerfectSelection
+
+ browser selectClassNamed: #BPTestExamplesClass.
+ self assert: (69 to: 71) equals: (browser determineIntervalToAnnotateFor: (BPInstanceVariableProbe new variableName: 'foo') in: (69 to: 71))
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesCorrectIntervalForExistingVariableIgnoresSpaceInSelection.st b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesCorrectIntervalForExistingVariableIgnoresSpaceInSelection.st
new file mode 100644
index 00000000..f243a617
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesCorrectIntervalForExistingVariableIgnoresSpaceInSelection.st
@@ -0,0 +1,5 @@
+as yet unclassified
+testDeterminesCorrectIntervalForExistingVariableIgnoresSpaceInSelection
+
+ browser selectClassNamed: #BPTestExamplesClass.
+ self assert: (69 to: 71) equals: (browser determineIntervalToAnnotateFor: (BPInstanceVariableProbe new variableName: 'foo') in: (68 to: 71))
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesNoIntervalForExistingVariableButWrongSelection.st b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesNoIntervalForExistingVariableButWrongSelection.st
new file mode 100644
index 00000000..3c548959
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testDeterminesNoIntervalForExistingVariableButWrongSelection.st
@@ -0,0 +1,5 @@
+as yet unclassified
+testDeterminesNoIntervalForExistingVariableButWrongSelection
+
+ browser selectClassNamed: #BPTestExamplesClass.
+ self assert: nil equals: (browser determineIntervalToAnnotateFor: (BPInstanceVariableProbe new variableName: 'foo') in: (66 to: 71))
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testExtractsCorrectInstanceVariableProbeInterval.st b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testExtractsCorrectInstanceVariableProbeInterval.st
new file mode 100644
index 00000000..1538476a
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testExtractsCorrectInstanceVariableProbeInterval.st
@@ -0,0 +1,2 @@
+as yet unclassified
+testExtractsCorrectInstanceVariableProbeInterval
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testHasCorrectInstanceVariableProbeInterval.st b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testHasCorrectInstanceVariableProbeInterval.st
new file mode 100644
index 00000000..d797ab65
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPBrowserTest.class/instance/testHasCorrectInstanceVariableProbeInterval.st
@@ -0,0 +1,2 @@
+as yet unclassified
+testHasCorrectInstanceVariableProbeInterval
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPBrowserTest.class/methodProperties.json b/packages/Babylonian-Tests.package/BPBrowserTest.class/methodProperties.json
index 28f6e295..4e50b92e 100644
--- a/packages/Babylonian-Tests.package/BPBrowserTest.class/methodProperties.json
+++ b/packages/Babylonian-Tests.package/BPBrowserTest.class/methodProperties.json
@@ -6,5 +6,11 @@
"setUp" : "jb 12/7/2020 19:05",
"tearDown" : "lu 1/23/2022 21:25",
"testClosesSidePane" : "joabe 5/9/2023 17:06",
+ "testCorrectIntervalForInstanceVariable" : "joabe 10/7/2023 18:44",
"testDeleteMethod" : "jb 12/6/2021 22:32",
+ "testDeterminesCorrectIntervalForExistingVariableAndPerfectSelection" : "joabe 10/7/2023 19:03",
+ "testDeterminesCorrectIntervalForExistingVariableIgnoresSpaceInSelection" : "joabe 10/7/2023 19:03",
+ "testDeterminesNoIntervalForExistingVariableButWrongSelection" : "joabe 10/7/2023 19:04",
+ "testExtractsCorrectInstanceVariableProbeInterval" : "joabe 10/7/2023 18:41",
+ "testHasCorrectInstanceVariableProbeInterval" : "joabe 10/7/2023 18:43",
"testOpensSidePane" : "joabe 5/9/2023 17:07" } }
diff --git a/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testExtractVariableAssignmentIntervals.st b/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testExtractVariableAssignmentIntervals.st
new file mode 100644
index 00000000..b217747f
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testExtractVariableAssignmentIntervals.st
@@ -0,0 +1,5 @@
+tests
+testExtractVariableAssignmentIntervals
+
+ self assert: {76@83 . 139@146}
+ equals: ((BPTestExamplesClass >> #methodSettingInstanceVars) bpExtractVariableAssignmentRangesNamed: 'foo')
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testRewritingLeftHandOfDoubleNestedAssignmentProbe.st b/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testRewritingLeftHandOfDoubleNestedAssignmentProbe.st
new file mode 100644
index 00000000..a5e9c7b0
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testRewritingLeftHandOfDoubleNestedAssignmentProbe.st
@@ -0,0 +1,13 @@
+tests
+testRewritingLeftHandOfDoubleNestedAssignmentProbe
+
+ self
+ assertCompilerRewrites:
+'method
+ | variable |
+ """"variable := 2 raisedTo: 3"""".'
+ to:
+'method
+
+ | variable |
+(self bpTraceAssignmentOf: [(self bpTraceAssignmentOf: [variable := 2 raisedTo: 3] before: {''variable'' . variable} forProbe: 1 inContext: thisContext)] before: {} forProbe: 2 inContext: thisContext).'
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testRewritingLeftHandOfTripleNestedAssignmentProbe.st b/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testRewritingLeftHandOfTripleNestedAssignmentProbe.st
new file mode 100644
index 00000000..cd46ba10
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPCompilerTest.class/instance/testRewritingLeftHandOfTripleNestedAssignmentProbe.st
@@ -0,0 +1,13 @@
+tests
+testRewritingLeftHandOfTripleNestedAssignmentProbe
+
+ self
+ assertCompilerRewrites:
+'method
+ | variable |
+ """"""variable := 2 raisedTo: 3"""""".'
+ to:
+'method
+
+ | variable |
+(self bpTraceAssignmentOf: [(self bpTraceAssignmentOf: [(self bpTraceAssignmentOf: [variable := 2 raisedTo: 3] before: {''variable'' . variable} forProbe: 1 inContext: thisContext)] before: {} forProbe: 2 inContext: thisContext)] before: {} forProbe: 3 inContext: thisContext).'
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPCompilerTest.class/methodProperties.json b/packages/Babylonian-Tests.package/BPCompilerTest.class/methodProperties.json
index 672aa4a7..91cc6c87 100644
--- a/packages/Babylonian-Tests.package/BPCompilerTest.class/methodProperties.json
+++ b/packages/Babylonian-Tests.package/BPCompilerTest.class/methodProperties.json
@@ -7,6 +7,7 @@
"setUp" : "jb 12/7/2020 19:06",
"testCompileSilentlyAddsAnnotationsProperly" : "pre 7/22/2022 22:02",
"testCompilerRecognizesMethodsThatRequireRecompilation" : "jb 12/7/2020 19:06",
+ "testExtractVariableAssignmentIntervals" : "joabe 10/7/2023 18:32",
"testFromFormattedSourceCodeToAnnotatedSourceCode" : "pre 2/22/2021 18:03",
"testRewritingBinaryMessageChainProbe" : "pre 2/22/2021 17:16",
"testRewritingDoesNotAddTwoLayerPragmas" : "pre 7/23/2022 15:51",
@@ -21,6 +22,8 @@
"testRewritingKeywordMessageUnaryReceiverProbe" : "jb 12/7/2020 19:06",
"testRewritingLeftHandOfAssignmentProbe" : "pre 7/23/2022 15:51",
"testRewritingLeftHandOfAssignmentProbeMultipleVariables" : "pre 7/23/2022 15:53",
+ "testRewritingLeftHandOfDoubleNestedAssignmentProbe" : "joabe 10/6/2023 14:27",
+ "testRewritingLeftHandOfTripleNestedAssignmentProbe" : "joabe 10/6/2023 14:27",
"testRewritingNestedBlockAndMethodSlider" : "pre 7/23/2022 15:52",
"testRewritingNestedBlockSlider" : "pre 7/23/2022 15:53",
"testRewritingNestedReplacements" : "jb 12/7/2020 19:07",
diff --git a/packages/Babylonian-Tests.package/BPSmalltalkGrammarTest.class/instance/testNestedAnnotatedAssignments.st b/packages/Babylonian-Tests.package/BPSmalltalkGrammarTest.class/instance/testNestedAnnotatedAssignments.st
new file mode 100644
index 00000000..62adce24
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPSmalltalkGrammarTest.class/instance/testNestedAnnotatedAssignments.st
@@ -0,0 +1,17 @@
+tests
+testNestedAnnotatedAssignments
+
+ startRule := #Statement.
+
+ self
+ shouldParse: '""""variable := 2""""';
+ shouldParse: 'variable := """"2""""'.
+
+ self
+ shouldParse: '""""variable := 2""""'
+ to: #(Statement
+ (AnnotatedStatement
+ (expressionAnnotationStart '""')
+ (Statement
+ (AnnotatedStatement '""variable := 2""'))
+ (expressionAnnotationEnd '""'))).
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPSmalltalkGrammarTest.class/methodProperties.json b/packages/Babylonian-Tests.package/BPSmalltalkGrammarTest.class/methodProperties.json
index d9cc360a..656689ff 100644
--- a/packages/Babylonian-Tests.package/BPSmalltalkGrammarTest.class/methodProperties.json
+++ b/packages/Babylonian-Tests.package/BPSmalltalkGrammarTest.class/methodProperties.json
@@ -21,6 +21,7 @@
"testGrammarParsesVariableNameCorrectly" : "jb 12/7/2020 19:09",
"testMessageSendPartsCanBeAnnotated" : "pre 8/6/2021 18:37",
"testMessageSendsCanBeAnnotated" : "jb 12/7/2020 19:09",
+ "testNestedAnnotatedAssignments" : "joabe 10/6/2023 14:22",
"testNormalExpressionsStillWork" : "pre 5/10/2019 11:27",
"testOtherCommentsAreStillComments" : "jb 12/7/2020 19:09",
"testRegressionAnnotationBlock01" : "pre 9/1/2022 20:39",
diff --git a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo..st b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo..st
new file mode 100644
index 00000000..2ac6c3f4
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo..st
@@ -0,0 +1,3 @@
+accessing
+foo: anObject
+ foo := anObject
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo.st b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo.st
new file mode 100644
index 00000000..116f7e5b
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo.st
@@ -0,0 +1,3 @@
+accessing
+foo
+ ^ foo
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo2..st b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo2..st
new file mode 100644
index 00000000..fdd7f57b
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo2..st
@@ -0,0 +1,3 @@
+accessing
+foo2: anObject
+ foo2 := anObject
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo2.st b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo2.st
new file mode 100644
index 00000000..a69690b1
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/foo2.st
@@ -0,0 +1,3 @@
+accessing
+foo2
+ ^ foo2
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/methodSettingInstanceVars.st b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/methodSettingInstanceVars.st
new file mode 100644
index 00000000..791ffb97
--- /dev/null
+++ b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/instance/methodSettingInstanceVars.st
@@ -0,0 +1,17 @@
+example methods
+methodSettingInstanceVars
+
+ 'hello world'.
+ self foo;
+ foo2.
+ foo2 := 1.
+ foo := 2.
+ self foo2: 3.
+ self foo: 4.
+ [ |var|
+ var := 5.
+ foo := 6.
+ [ |foo foo2|
+ foo := 7.
+ foo2 := 8.]]
+
\ No newline at end of file
diff --git a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/methodProperties.json b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/methodProperties.json
index 69e5da6b..89364519 100644
--- a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/methodProperties.json
+++ b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/methodProperties.json
@@ -9,8 +9,13 @@
"instance" : {
"+" : "pre 7/1/2019 14:23",
"addAndLog:" : "pre 5/3/2021 10:36",
- "binarySearchIn:theElement:" : "ek 9/29/2023 09:13",
+ "binarySearchIn:theElement:" : "pre 8/21/2023 11:38",
+ "foo" : "joabe 10/7/2023 18:19",
+ "foo2" : "joabe 10/7/2023 18:19",
+ "foo2:" : "joabe 10/7/2023 18:19",
+ "foo:" : "joabe 10/7/2023 18:19",
"methodOnlyWithExample" : "pre 11/18/2019 12:07",
+ "methodSettingInstanceVars" : "joabe 10/7/2023 18:21",
"methodWithExampleCallingOnlyProbedMethod" : "jb 7/2/2021 00:56",
"methodWithLiveSpecimen:" : "pre 9/30/2020 09:41",
"methodWithMultipleAssertions" : "pre 7/15/2022 11:11",
diff --git a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/properties.json b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/properties.json
index a659c8c5..dbdb1e6f 100644
--- a/packages/Babylonian-Tests.package/BPTestExamplesClass.class/properties.json
+++ b/packages/Babylonian-Tests.package/BPTestExamplesClass.class/properties.json
@@ -6,7 +6,8 @@
],
"commentStamp" : "",
"instvars" : [
- ],
+ "foo2",
+ "foo" ],
"name" : "BPTestExamplesClass",
"pools" : [
],
diff --git a/packages/Babylonian-UI.package/BPAssertionMorph.class/instance/newValuesMorphTracing..st b/packages/Babylonian-UI.package/BPAssertionMorph.class/instance/newValuesMorphTracing..st
deleted file mode 100644
index b3f74990..00000000
--- a/packages/Babylonian-UI.package/BPAssertionMorph.class/instance/newValuesMorphTracing..st
+++ /dev/null
@@ -1,4 +0,0 @@
-private - ui
-newValuesMorphTracing: aTrace
-
- ^ BPAssertionValuesMorph newIn: self tracing: aTrace
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPAssertionMorph.class/instance/valuesMorphClass.st b/packages/Babylonian-UI.package/BPAssertionMorph.class/instance/valuesMorphClass.st
new file mode 100644
index 00000000..e2dcaddd
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPAssertionMorph.class/instance/valuesMorphClass.st
@@ -0,0 +1,4 @@
+private - ui
+valuesMorphClass
+
+ ^ BPAssertionValuesMorph
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPAssertionMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPAssertionMorph.class/methodProperties.json
index 54cfe3f9..c0f4099e 100644
--- a/packages/Babylonian-UI.package/BPAssertionMorph.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPAssertionMorph.class/methodProperties.json
@@ -7,7 +7,7 @@
"initialize" : "jb 12/7/2020 19:01",
"isAssertion" : "pre 11/18/2019 11:50",
"isProbe" : "pre 11/18/2019 12:31",
- "newValuesMorphTracing:" : "joabe 7/1/2023 17:03",
"relevantTracesOf:do:" : "pre 5/3/2021 10:46",
"updateAssertionFieldsMorph" : "pre 2/22/2021 12:24",
- "updateFrom:" : "joabe 7/1/2023 17:05" } }
+ "updateFrom:" : "joabe 7/1/2023 17:05",
+ "valuesMorphClass" : "joabe 10/6/2023 11:21" } }
diff --git a/packages/Babylonian-UI.package/BPAssignmentProbeMorph.class/instance/valuesMorphClass.st b/packages/Babylonian-UI.package/BPAssignmentProbeMorph.class/instance/valuesMorphClass.st
new file mode 100644
index 00000000..9e59f861
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPAssignmentProbeMorph.class/instance/valuesMorphClass.st
@@ -0,0 +1,4 @@
+private - ui
+valuesMorphClass
+
+ ^ BPAssignmentValuesMorph
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPAssignmentProbeMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPAssignmentProbeMorph.class/methodProperties.json
index f71c1686..80ef954f 100644
--- a/packages/Babylonian-UI.package/BPAssignmentProbeMorph.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPAssignmentProbeMorph.class/methodProperties.json
@@ -2,4 +2,5 @@
"class" : {
},
"instance" : {
- "updateExpressionMorphIfNecessary" : "pre 6/7/2021 16:37" } }
+ "updateExpressionMorphIfNecessary" : "pre 6/7/2021 16:37",
+ "valuesMorphClass" : "joabe 10/6/2023 11:21" } }
diff --git a/packages/Babylonian-UI.package/BPExampleMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPExampleMorph.class/methodProperties.json
index aa903b3b..04db2b0d 100644
--- a/packages/Babylonian-UI.package/BPExampleMorph.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPExampleMorph.class/methodProperties.json
@@ -40,7 +40,7 @@
"openExampleInProbeLog" : "joabe 5/9/2023 17:37",
"openInProbeLogClicked" : "joabe 5/9/2023 17:34",
"removeButtonClicked" : "jb 1/10/2022 19:46",
- "step" : "joabe 8/9/2023 13:56",
+ "step" : "joabe 9/28/2022 22:58",
"textEmphasis" : "pre 9/30/2020 10:35",
"timeoutButtonClicked" : "joabe 9/27/2022 22:35",
"updateAssertResultIcon" : "jb 12/30/2021 22:33",
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/README.md b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/linkedProbes.st b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/linkedProbes.st
new file mode 100644
index 00000000..a12608a7
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/linkedProbes.st
@@ -0,0 +1,4 @@
+accessing
+linkedProbes
+
+ ^ self annotation linkedProbes
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/removeButtonClicked.st b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/removeButtonClicked.st
new file mode 100644
index 00000000..7321b409
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/removeButtonClicked.st
@@ -0,0 +1,11 @@
+actions
+removeButtonClicked
+
+ self annotation deleteLinkedProbes.
+
+ BPClassNameToInstanceProbes value removeProbe: self annotation.
+
+ self containingBrowser removeAnnotations: {self annotation}.
+
+
+
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/updateExpressionMorphIfNecessary.st b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/updateExpressionMorphIfNecessary.st
new file mode 100644
index 00000000..497eeb4d
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/updateExpressionMorphIfNecessary.st
@@ -0,0 +1,4 @@
+private - ui
+updateExpressionMorphIfNecessary
+
+ "Expressions can not be put on instance variable probes currently --jb, pre"
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/valuesMorphClass.st b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/valuesMorphClass.st
new file mode 100644
index 00000000..20f8e652
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/valuesMorphClass.st
@@ -0,0 +1,4 @@
+private - ui
+valuesMorphClass
+
+ ^ BPInstanceVariableValuesMorph
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/wantsMethodReference.st b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/wantsMethodReference.st
new file mode 100644
index 00000000..ce142ede
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/instance/wantsMethodReference.st
@@ -0,0 +1,4 @@
+accessing
+wantsMethodReference
+
+ ^ false
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/methodProperties.json
new file mode 100644
index 00000000..47b7eae5
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/methodProperties.json
@@ -0,0 +1,9 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "linkedProbes" : "joabe 10/6/2023 11:13",
+ "removeButtonClicked" : "joabe 10/4/2023 16:22",
+ "updateExpressionMorphIfNecessary" : "joabe 10/6/2023 10:34",
+ "valuesMorphClass" : "joabe 10/6/2023 11:21",
+ "wantsMethodReference" : "joabe 10/7/2023 20:28" } }
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/properties.json b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/properties.json
new file mode 100644
index 00000000..6dc83484
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableProbeMorph.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Babylonian-UI-Morphs",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "BPInstanceVariableProbeMorph",
+ "pools" : [
+ ],
+ "super" : "BPProbeMorph",
+ "type" : "normal" }
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/README.md b/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/README.md
new file mode 100644
index 00000000..0e10ccce
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/README.md
@@ -0,0 +1 @@
+Collect traces values not for the given probe id, but the linked probe ids in chronological order
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/instance/basicValuesFor..st b/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/instance/basicValuesFor..st
new file mode 100644
index 00000000..87bf8d4e
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/instance/basicValuesFor..st
@@ -0,0 +1,5 @@
+accessing
+basicValuesFor: aTrace
+
+ ^ ((self probeMorph linkedProbes collect: [:aLinkedProbe | aTrace valuesForProbeId: aLinkedProbe id]) flatten)
+ sorted: [:aTraceValue | aTraceValue chronologicalPosition] ascending
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/methodProperties.json
new file mode 100644
index 00000000..ca1a1c38
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "basicValuesFor:" : "joabe 10/6/2023 11:23" } }
diff --git a/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/properties.json b/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/properties.json
new file mode 100644
index 00000000..1c6c80a1
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPInstanceVariableValuesMorph.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Babylonian-UI-Morphs",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "joabe 10/6/2023 11:11",
+ "instvars" : [
+ ],
+ "name" : "BPInstanceVariableValuesMorph",
+ "pools" : [
+ ],
+ "super" : "BPValuesMorph",
+ "type" : "normal" }
diff --git a/packages/Babylonian-UI.package/BPLineChart.class/class/supportedClass.st b/packages/Babylonian-UI.package/BPLineChart.class/class/supportedClass.st
index 90d6cdf8..1b71109f 100644
--- a/packages/Babylonian-UI.package/BPLineChart.class/class/supportedClass.st
+++ b/packages/Babylonian-UI.package/BPLineChart.class/class/supportedClass.st
@@ -1,5 +1,4 @@
support
supportedClass
-
^ Number
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPLineChart.class/instance/visualizationMorph.st b/packages/Babylonian-UI.package/BPLineChart.class/instance/visualizationMorph.st
new file mode 100644
index 00000000..8d82bf52
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPLineChart.class/instance/visualizationMorph.st
@@ -0,0 +1,4 @@
+visualization
+visualizationMorph
+
+ ^ self newVisualizationMorph
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPLineChart.class/methodProperties.json b/packages/Babylonian-UI.package/BPLineChart.class/methodProperties.json
index ff08738b..1117eebb 100644
--- a/packages/Babylonian-UI.package/BPLineChart.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPLineChart.class/methodProperties.json
@@ -1,7 +1,7 @@
{
"class" : {
"newWithValues:forMorph:" : "joabe 7/4/2023 11:37",
- "supportedClass" : "jb 5/4/2021 17:26" },
+ "supportedClass" : "joabe 10/16/2023 15:41" },
"instance" : {
"datapointColorForValue:" : "jb 4/19/2021 23:14",
"datapointDefaultColor" : "joabe 5/31/2023 19:21",
@@ -19,4 +19,5 @@
"scaleLineColor" : "joabe 5/31/2023 19:17",
"scaleLineWidth" : "jb 4/18/2021 03:45",
"scaleYOffset" : "jb 4/19/2021 00:23",
- "spaceBetweenPoints" : "pre 5/27/2021 11:59" } }
+ "spaceBetweenPoints" : "pre 5/27/2021 11:59",
+ "visualizationMorph" : "joabe 10/16/2023 15:54" } }
diff --git a/packages/Babylonian-UI.package/BPProbeMorph.class/instance/newValuesMorphTracing..st b/packages/Babylonian-UI.package/BPProbeMorph.class/instance/newValuesMorphTracing..st
index 0a548403..8fb4369e 100644
--- a/packages/Babylonian-UI.package/BPProbeMorph.class/instance/newValuesMorphTracing..st
+++ b/packages/Babylonian-UI.package/BPProbeMorph.class/instance/newValuesMorphTracing..st
@@ -1,5 +1,4 @@
private - ui
newValuesMorphTracing: aTrace
-
- ^ BPValuesMorph newIn: self tracing: aTrace
\ No newline at end of file
+ ^ self valuesMorphClass newIn: self tracing: aTrace
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPProbeMorph.class/instance/valuesMorphClass.st b/packages/Babylonian-UI.package/BPProbeMorph.class/instance/valuesMorphClass.st
new file mode 100644
index 00000000..9b2ecec8
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPProbeMorph.class/instance/valuesMorphClass.st
@@ -0,0 +1,4 @@
+private - ui
+valuesMorphClass
+
+ ^ BPValuesMorph
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPProbeMorph.class/instance/visualizeButtonClickedFor..st b/packages/Babylonian-UI.package/BPProbeMorph.class/instance/visualizeButtonClickedFor..st
index 66a35dec..9f2ff0c6 100644
--- a/packages/Babylonian-UI.package/BPProbeMorph.class/instance/visualizeButtonClickedFor..st
+++ b/packages/Babylonian-UI.package/BPProbeMorph.class/instance/visualizeButtonClickedFor..st
@@ -5,7 +5,7 @@ visualizeButtonClickedFor: aTrace
lineMorph := self ensureLineMorphFor: aTrace.
scrollPane := (lineMorph submorphNamed: #scrollWrapper) submorphNamed: #scrollPane.
- axisYNotationHolder := lineMorph submorphNamed: #axisYNotationHolder.
+ axisYNotationHolder := lineMorph submorphNamed: #bpLegendWrapper.
axisYNotationMorph := lineMorph valueOfProperty: #bpAxisYNotationMorph.
visualizationMorph := lineMorph valueOfProperty: #bpVisualizationMorph.
valuesMorph := lineMorph valueOfProperty: #bpValuesMorph.
diff --git a/packages/Babylonian-UI.package/BPProbeMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPProbeMorph.class/methodProperties.json
index d872c408..0d6bc62d 100644
--- a/packages/Babylonian-UI.package/BPProbeMorph.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPProbeMorph.class/methodProperties.json
@@ -22,7 +22,7 @@
"newLabelMorph" : "joabe 5/9/2023 17:35",
"newLineMorphFor:" : "joabe 7/2/2023 16:33",
"newScrollPane" : "pre 1/6/2021 10:50",
- "newValuesMorphTracing:" : "joabe 7/1/2023 17:02",
+ "newValuesMorphTracing:" : "joabe 10/6/2023 11:20",
"newVisualizeButtonFor:" : "jb 10/28/2021 18:57",
"noValuesTextFor:" : "joabe 5/31/2023 19:34",
"relevantTracesOf:do:" : "pre 5/3/2021 10:46",
@@ -34,4 +34,5 @@
"updateLabelMorphIfNecessary" : "jb 10/28/2021 18:25",
"updateResultsFrom:" : "joabe 7/1/2023 17:10",
"updateVisualizationMorphInside:over:for:" : "pre 5/26/2021 20:43",
- "visualizeButtonClickedFor:" : "pre 5/27/2021 12:06" } }
+ "valuesMorphClass" : "joabe 10/6/2023 11:19",
+ "visualizeButtonClickedFor:" : "joabe 10/16/2023 15:31" } }
diff --git a/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/instance/newValuesMorphTracing..st b/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/instance/newValuesMorphTracing..st
deleted file mode 100644
index 78c9befe..00000000
--- a/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/instance/newValuesMorphTracing..st
+++ /dev/null
@@ -1,5 +0,0 @@
-private - ui
-newValuesMorphTracing: aTrace
-
-
- ^ BPProfilingValuesMorph newIn: self tracing: aTrace
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/instance/valuesMorphClass.st b/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/instance/valuesMorphClass.st
new file mode 100644
index 00000000..395c1b20
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/instance/valuesMorphClass.st
@@ -0,0 +1,4 @@
+private - ui
+valuesMorphClass
+
+ ^ BPProfilingValuesMorph
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/methodProperties.json
index b5dc3f21..128f6e46 100644
--- a/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPProfilingProbeMorph.class/methodProperties.json
@@ -4,6 +4,6 @@
"instance" : {
"annotationLabel" : "pre 11/29/2022 16:35",
"isProfilingProbe" : "pre 11/29/2022 16:34",
- "newValuesMorphTracing:" : "joabe 7/1/2023 17:03",
"standardDeviation:" : "pre 11/30/2022 10:12",
- "updateFrom:" : "joabe 7/1/2023 17:05" } }
+ "updateFrom:" : "joabe 7/1/2023 17:05",
+ "valuesMorphClass" : "joabe 10/6/2023 11:22" } }
diff --git a/packages/Babylonian-UI.package/BPStyler.class/instance/applyInstanceProbeIn.for..st b/packages/Babylonian-UI.package/BPStyler.class/instance/applyInstanceProbeIn.for..st
new file mode 100644
index 00000000..798a844a
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPStyler.class/instance/applyInstanceProbeIn.for..st
@@ -0,0 +1,13 @@
+private
+applyInstanceProbeIn: aPreformattedText for: anInstanceProbe
+
+ | interval |
+ interval := (aPreformattedText string
+ allRangesOfRegexMatches: '(''| )', anInstanceProbe variableName, '(''| )') first.
+
+ aPreformattedText
+ addAttribute: (BPTextDecoration new
+ anchoredMorph: (self annotationMorphFor: anInstanceProbe);
+ yourself)
+ from: interval start + 1
+ to: interval stop - 1.
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPStyler.class/instance/formatNonMethod..st b/packages/Babylonian-UI.package/BPStyler.class/instance/formatNonMethod..st
new file mode 100644
index 00000000..5872cb36
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPStyler.class/instance/formatNonMethod..st
@@ -0,0 +1,17 @@
+private
+formatNonMethod: aText
+
+ | allRangesSubclassRegex className formattedText |
+ allRangesSubclassRegex := aText string allRangesOfRegexMatches: 'subclass\: #\w+'.
+ allRangesSubclassRegex ifEmpty: [^ super privateFormat: aText].
+ "We are in a class definition and may need to add Text Decorations
+ for Instance Variable Probes."
+ className := aText string atAll: (allRangesSubclassRegex first start + ('subclass: #' size) to:
+ allRangesSubclassRegex first stop ).
+ formattedText := super privateFormat: aText.
+ BPClassNameToInstanceProbes value nameToProbesDict at: className
+ ifPresent: [:probesSet | probesSet do: [:anInstanceProbe |
+ self
+ applyInstanceProbeIn: formattedText
+ for: anInstanceProbe]].
+ ^ formattedText
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPStyler.class/instance/privateFormat..st b/packages/Babylonian-UI.package/BPStyler.class/instance/privateFormat..st
index 4641f827..741a9667 100644
--- a/packages/Babylonian-UI.package/BPStyler.class/instance/privateFormat..st
+++ b/packages/Babylonian-UI.package/BPStyler.class/instance/privateFormat..st
@@ -2,7 +2,7 @@ private
privateFormat: aText
| parseResult |
- self ifNoSelectedMethod: [^ super privateFormat: aText].
+ self ifNoSelectedMethod: [ ^ self formatNonMethod: aText ].
parseResult := PEGParserBPSmalltalk new
match: aText asString
diff --git a/packages/Babylonian-UI.package/BPStyler.class/methodProperties.json b/packages/Babylonian-UI.package/BPStyler.class/methodProperties.json
index c713aa8d..c682ebec 100644
--- a/packages/Babylonian-UI.package/BPStyler.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPStyler.class/methodProperties.json
@@ -10,13 +10,15 @@
"annotationCanBePutInSidebar:" : "pre 12/16/2020 19:02",
"annotationMorphFor:" : "pre 1/6/2021 17:40",
"applyAnnotationsFrom:to:" : "pre 7/20/2022 16:03",
+ "applyInstanceProbeIn:for:" : "joabe 10/7/2023 19:09",
"expressionSourceFor:from:at:" : "pre 7/20/2022 16:58",
"extractIntervals" : "jb 12/3/2020 22:57",
+ "formatNonMethod:" : "joabe 10/7/2023 19:09",
"hasExamplesMorph:" : "pre 7/20/2022 09:31",
"ifNoSelectedMethod:" : "pre 3/19/2020 11:07",
"insertExamplesMorphInto:" : "pre 7/20/2022 10:45",
"isAlreadyAnnotatedExpressionAt:in:" : "pre 8/17/2023 08:38",
- "privateFormat:" : "jb 12/3/2020 23:35",
+ "privateFormat:" : "joabe 9/28/2023 15:22",
"reformat:basedOn:" : "pre 7/20/2022 16:59",
"selectedMethod:" : "ct 8/20/2021 06:24",
"textForAnnotation:from:at:" : "pre 7/20/2022 16:58",
diff --git a/packages/Babylonian-UI.package/BPTextDecoration.class/instance/emphasizeScanner..st b/packages/Babylonian-UI.package/BPTextDecoration.class/instance/emphasizeScanner..st
index 424817cf..9afaa8f6 100644
--- a/packages/Babylonian-UI.package/BPTextDecoration.class/instance/emphasizeScanner..st
+++ b/packages/Babylonian-UI.package/BPTextDecoration.class/instance/emphasizeScanner..st
@@ -2,6 +2,7 @@ accessing
emphasizeScanner: scanner
"Set the emphasis for text scanning"
| emphasis |
+
emphasis := self anchoredMorph textEmphasis ifNil: [
self anchoredMorph visible
ifTrue: [TextEmphasis underlined]
diff --git a/packages/Babylonian-UI.package/BPTextDecoration.class/methodProperties.json b/packages/Babylonian-UI.package/BPTextDecoration.class/methodProperties.json
index bc5dade6..c75102ed 100644
--- a/packages/Babylonian-UI.package/BPTextDecoration.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPTextDecoration.class/methodProperties.json
@@ -3,7 +3,7 @@
"compilerClass" : "pre 11/8/2019 20:33" },
"instance" : {
"emphasisCode" : "pre 11/8/2019 13:33",
- "emphasizeScanner:" : "pre 9/2/2022 15:35",
+ "emphasizeScanner:" : "joabe 9/21/2023 22:56",
"initialize" : "pre 7/19/2022 17:54",
"isBPDecoration" : "pre 8/17/2023 08:37",
"isOblivious" : "pre 7/9/2021 16:59",
diff --git a/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/updateTraces.st b/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/updateTraces.st
index fe2f10e2..abb8355e 100644
--- a/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/updateTraces.st
+++ b/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/updateTraces.st
@@ -2,7 +2,7 @@ stepping and presenter
updateTraces
| newTraces tracesChanged |
- self methodReference ifNil: [^ false].
+ (self methodReference isNil and: [self wantsMethodReference]) ifTrue: [^false].
self resetHeight.
newTraces := self getTraces asIdentitySet.
diff --git a/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/valuesMorphClass.st b/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/valuesMorphClass.st
new file mode 100644
index 00000000..1557d156
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/valuesMorphClass.st
@@ -0,0 +1,4 @@
+private - ui
+valuesMorphClass
+
+ self subclassResponsibility
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/wantsMethodReference.st b/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/wantsMethodReference.st
new file mode 100644
index 00000000..15b8d846
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPTraceBasedMorph.class/instance/wantsMethodReference.st
@@ -0,0 +1,4 @@
+accessing
+wantsMethodReference
+
+ ^ true
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPTraceBasedMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPTraceBasedMorph.class/methodProperties.json
index 811617ec..25c8df6d 100644
--- a/packages/Babylonian-UI.package/BPTraceBasedMorph.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPTraceBasedMorph.class/methodProperties.json
@@ -15,4 +15,6 @@
"update:" : "pre 8/23/2023 10:56",
"update:with:" : "pre 8/23/2023 10:49",
"updateFrom:" : "jb 12/7/2020 19:00",
- "updateTraces" : "pre 8/23/2023 10:53" } }
+ "updateTraces" : "joabe 10/7/2023 20:30",
+ "valuesMorphClass" : "joabe 10/6/2023 11:20",
+ "wantsMethodReference" : "joabe 10/7/2023 20:28" } }
diff --git a/packages/Babylonian-UI.package/BPTypeProbeMorph.class/instance/newValuesMorphTracing..st b/packages/Babylonian-UI.package/BPTypeProbeMorph.class/instance/newValuesMorphTracing..st
deleted file mode 100644
index 5af76578..00000000
--- a/packages/Babylonian-UI.package/BPTypeProbeMorph.class/instance/newValuesMorphTracing..st
+++ /dev/null
@@ -1,5 +0,0 @@
-private - ui
-newValuesMorphTracing: aTrace
-
-
- ^ BPTypeValuesMorph newIn: self tracing: aTrace
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPTypeProbeMorph.class/instance/valuesMorphClass.st b/packages/Babylonian-UI.package/BPTypeProbeMorph.class/instance/valuesMorphClass.st
new file mode 100644
index 00000000..81851d0a
--- /dev/null
+++ b/packages/Babylonian-UI.package/BPTypeProbeMorph.class/instance/valuesMorphClass.st
@@ -0,0 +1,4 @@
+private - ui
+valuesMorphClass
+
+ ^ BPTypeValuesMorph
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/BPTypeProbeMorph.class/methodProperties.json b/packages/Babylonian-UI.package/BPTypeProbeMorph.class/methodProperties.json
index ae69f83f..3f085622 100644
--- a/packages/Babylonian-UI.package/BPTypeProbeMorph.class/methodProperties.json
+++ b/packages/Babylonian-UI.package/BPTypeProbeMorph.class/methodProperties.json
@@ -4,5 +4,5 @@
"instance" : {
"annotationLabel" : "pre 11/30/2022 09:34",
"isTypeProbe" : "pre 11/30/2022 09:36",
- "newValuesMorphTracing:" : "joabe 7/1/2023 17:04",
- "updateFrom:" : "joabe 7/1/2023 17:05" } }
+ "updateFrom:" : "joabe 7/1/2023 17:05",
+ "valuesMorphClass" : "joabe 10/6/2023 11:22" } }
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/addProbeToSelection.st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/addProbeToSelection.st
index e25f3f65..d710ec51 100644
--- a/packages/Babylonian-UI.package/CodeHolder.extension/instance/addProbeToSelection.st
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/addProbeToSelection.st
@@ -1,5 +1,7 @@
*Babylonian-UI-annotations
addProbeToSelection
- self addAnnotationAtSelection: BPProbe new.
+ self editSelection == #editClass
+ ifTrue: [self addAnnotationAtSelection: BPInstanceVariableProbe new]
+ ifFalse: [self addAnnotationAtSelection: BPProbe new]
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/allAndLowestUsefulAncestorFor.canBeAnnotatedTo..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/allAndLowestUsefulAncestorFor.canBeAnnotatedTo..st
new file mode 100644
index 00000000..b042bffd
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/allAndLowestUsefulAncestorFor.canBeAnnotatedTo..st
@@ -0,0 +1,28 @@
+*Babylonian-UI-private
+allAndLowestUsefulAncestorFor: aListOfNodes canBeAnnotatedTo: aListOfKeywords
+
+ "This is necessary as we do only assume that the last node is the lowest one, not that
+ the rest of the nodes is necessarily ordered according to the tree"
+ | ancestors lowestCommonAncestorIndex parents |
+ parents := aListOfNodes collect: [:allNodes | {allNodes last} , allNodes last allParents].
+
+ "This is a naiive approach but is fine as the trees are not that deep."
+ lowestCommonAncestorIndex := parents first findFirst: [:n | parents second includes: n].
+ lowestCommonAncestorIndex = 0 ifTrue: [self error: 'broken tree, no common root found'].
+
+ ancestors := parents first
+ copyFrom: lowestCommonAncestorIndex
+ to: parents first size.
+
+ "This is not enough yet, we have the list of AST nodes covering the selected interval
+ and their full ranges, but these nodes could be nonsensical to annotate."
+ ^ {ancestors. ancestors
+ detect: [:n | aListOfKeywords includes: n ruleName]
+ ifNone: ["This can happen if users selected more than one statement,
+ we now have to search for the first statement below the current index"
+ (parents first first: lowestCommonAncestorIndex) reverse
+ detect: [:n | aListOfKeywords includes: n ruleName]
+ ifNone: ["Try it again for the end of the interval"
+ (parents second copyUpTo: (parents first at: lowestCommonAncestorIndex)) reverse
+ detect: [:n | aListOfKeywords includes: n ruleName]
+ ifNone: [nil "There really is nothing to annotate"]]]}.
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/bpClassDeclarationSourceMap.st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/bpClassDeclarationSourceMap.st
new file mode 100644
index 00000000..d742a5b1
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/bpClassDeclarationSourceMap.st
@@ -0,0 +1,11 @@
+*Babylonian-UI-private
+bpClassDeclarationSourceMap
+
+ | result map |
+ result := BPSmalltalkGrammar
+ match: self contents
+ startingFrom: #KeywordMessageSend.
+ result succeeded ifFalse: [self haltOnce. ^ #()].
+ map := (BPSmalltalkGrammar semanticAction: BPSourceMapping new)
+ createSourceMapFor: result cst.
+ ^ map
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalOfVariableNameIn.having..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalOfVariableNameIn.having..st
new file mode 100644
index 00000000..46f64855
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalOfVariableNameIn.having..st
@@ -0,0 +1,21 @@
+*Babylonian-UI-private
+determineIntervalOfVariableNameIn: anInterval having: aTopologicalCollectionOfAncestors
+
+ | lowestKeywordMessageSegment selectedText |
+
+ lowestKeywordMessageSegment := aTopologicalCollectionOfAncestors
+ detect: [:n | n ruleName = #KeywordMessageSegment]
+ ifNone: [^ nil].
+
+ ((self contents atAll: lowestKeywordMessageSegment children first interval) ~= 'instanceVariableNames:') ifTrue: [^ nil].
+
+ selectedText := (self contents atAll: anInterval) withBlanksTrimmed.
+
+ ^ self selectedClassOrMetaClass instVarNames
+ detect: [:aVariable | aVariable = selectedText]
+ ifFound: [:matchingVariable | | interval |
+ "in case we have variables like 'foo2' and 'foo' we have to consider spaces or '' too"
+ interval := (self contents allRangesOfRegexMatches: '(''| )', matchingVariable, '(''| )') first.
+ ^ Interval from: (interval start + 1) to: (interval stop - 1)]
+
+
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalToAnnotateFor.forNodes..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalToAnnotateFor.forNodes..st
deleted file mode 100644
index 2826f102..00000000
--- a/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalToAnnotateFor.forNodes..st
+++ /dev/null
@@ -1,37 +0,0 @@
-*Babylonian-UI-private
-determineIntervalToAnnotateFor: anInterval forNodes: nodeList
-
- "This determines the interval to annotate for a selected interval.
- The selected interval can also be a 0 width selection.
- If there is not valid interval this method will return nil."
-
- | nodes parents lowestCommonAncestorIndex ancestors lowestUsefulAncestor |
- self bpEnsureContentsAndSelectedMessage.
-
- nodes := currentCompiledMethod bpSourceMap atAll: {anInterval start. anInterval stop}.
- "This is necessary as we do only assume that the last node is the lowest one, not that
- the rest of the nodes is necessarily ordered according to the tree"
- parents := nodes collect: [:allNodes | {allNodes last} , allNodes last allParents].
-
- "This is a naiive approach but is fine as the trees are not that deep."
- lowestCommonAncestorIndex := ""parents first findFirst: [:n | parents second includes: n]"".
- lowestCommonAncestorIndex = 0 ifTrue: [self error: 'broken tree, no common root found'].
-
- ancestors := parents first
- copyFrom: lowestCommonAncestorIndex
- to: parents first size.
-
- "This is not enough yet, we have the list of AST nodes covering the selected interval
- and their full ranges, but these nodes could be nonsensical to annotate."
- lowestUsefulAncestor := ""ancestors""
- detect: [:n | nodeList includes: n ruleName]
- ifNone: ["This can happen if users selected more than one statement,
- we now have to search for the first statement below the current index"
- (parents first first: lowestCommonAncestorIndex) reverse
- detect: [:n | nodeList includes: n ruleName]
- ifNone: ["Try it again for the end of the interval"
- (parents second copyUpTo: (parents first at: lowestCommonAncestorIndex)) reverse
- detect: [:n | nodeList includes: n ruleName]
- ifNone: [^ nil "There really is nothing to annotate"]]].
-
- ^ ""lowestUsefulAncestor"" interval
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalToAnnotateFor.in..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalToAnnotateFor.in..st
new file mode 100644
index 00000000..574784ed
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineIntervalToAnnotateFor.in..st
@@ -0,0 +1,23 @@
+*Babylonian-UI-private
+determineIntervalToAnnotateFor: anAnnotation in: anInterval
+
+ | result sourceMap |
+ "This determines the interval to annotate for a selected interval.
+ The selected interval can also be a 0 width selection.
+ If there is not valid interval this method will return nil."
+
+ self bpEnsureContentsAndSelectedMessage.
+ sourceMap := currentCompiledMethod ifNotNil: [currentCompiledMethod bpSourceMap] ifNil: [self bpClassDeclarationSourceMap].
+ result := self
+ allAndLowestUsefulAncestorFor: (sourceMap atAll: {anInterval start. anInterval stop})
+ canBeAnnotatedTo: anAnnotation canBeAnnotatedTo.
+ result second ifNil: [^ nil].
+
+ anAnnotation isInstanceVariableProbe ifFalse: [^ result second interval].
+
+ (self editSelection == #editClass and: [self metaClassIndicated == anAnnotation wantsMetaClassIndication]) ifFalse: [^ nil].
+
+ ^ self
+ determineIntervalOfVariableNameIn: anInterval
+ having: result first.
+
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineMessageSendNodeIn..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineMessageSendNodeIn..st
index 4308d873..bf83c13b 100644
--- a/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineMessageSendNodeIn..st
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/determineMessageSendNodeIn..st
@@ -3,7 +3,6 @@ determineMessageSendNodeIn: anInterval
| nodes messageSendRuleNames lowestMessageSend |
self bpEnsureContentsAndSelectedMessage.
-
nodes := currentCompiledMethod bpSourceMap at: anInterval start.
messageSendRuleNames := #(ExpressionOperandCascade ExpressionUnaryCascade ExpressionBinaryCascade UnaryMessageSend BinaryMessageSend KeywordMessageSend).
^ lowestMessageSend := nodes reversed
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddAnnotation.in..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddAnnotation.in..st
index 2879bbc4..a7d846b3 100644
--- a/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddAnnotation.in..st
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddAnnotation.in..st
@@ -1,16 +1,11 @@
*Babylonian-UI-private
doAddAnnotation: anAnnotation in: interval
"Separated from addAnotationIn: to allow for multiple annotations to be added without saving first."
- | text actualInterval newMorph |
- actualInterval := self determineIntervalToAnnotateFor: interval forNodes: anAnnotation canBeAnnotatedTo.
+ | actualInterval |
+ actualInterval := self determineIntervalToAnnotateFor: anAnnotation in: interval.
actualInterval ifNil: [self codeTextMorph textMorph flash. ^ self].
- anAnnotation methodReference: self methodReference.
- text := self codeTextMorph text.
- newMorph := anAnnotation asMorph.
- text
- addAttribute: (BPTextDecoration new
- anchoredMorph: newMorph;
- yourself)
- from: actualInterval start
- to: actualInterval stop.
- self codeTextMorph textMorph addMorph: newMorph.
\ No newline at end of file
+
+ anAnnotation isInstanceVariableProbe
+ ifTrue: [self doAddInstanceProbeToRegistry: anAnnotation nameIn: actualInterval.
+ self doAddLinkedAnnotationsFor: anAnnotation]
+ ifFalse: [self doAddAnnotationMorphToMethod: anAnnotation in: actualInterval].
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddAnnotationMorphToMethod.in..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddAnnotationMorphToMethod.in..st
new file mode 100644
index 00000000..d1c2387a
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddAnnotationMorphToMethod.in..st
@@ -0,0 +1,14 @@
+*Babylonian-UI-private
+doAddAnnotationMorphToMethod: anAnnotation in: anInterval
+
+ | text newMorph |
+ anAnnotation methodReference: self methodReference.
+ text := self codeTextMorph text.
+ newMorph := anAnnotation asMorph.
+ text
+ addAttribute: (BPTextDecoration new
+ anchoredMorph: newMorph;
+ yourself)
+ from: anInterval start
+ to: anInterval stop.
+ self codeTextMorph textMorph addMorph: newMorph
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddInstanceProbeToRegistry.nameIn..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddInstanceProbeToRegistry.nameIn..st
new file mode 100644
index 00000000..91449aa3
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddInstanceProbeToRegistry.nameIn..st
@@ -0,0 +1,8 @@
+*Babylonian-UI-private
+doAddInstanceProbeToRegistry: anInstanceVariableProbe nameIn: anInterval
+
+ anInstanceVariableProbe
+ variableName: (self codeTextMorph text atAll: anInterval) asString;
+ assignedClassName: (self selectedClass name).
+ BPClassNameToInstanceProbes value addProbe: anInstanceVariableProbe
+
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddLinkedAnnotationsFor..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddLinkedAnnotationsFor..st
new file mode 100644
index 00000000..cfe49da8
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddLinkedAnnotationsFor..st
@@ -0,0 +1,9 @@
+*Babylonian-UI-private
+doAddLinkedAnnotationsFor: anInstanceVariableProbe
+
+ | allSenderMethods |
+ allSenderMethods := (self systemNavigation
+ allAccessesTo: anInstanceVariableProbe variableName
+ from: (Smalltalk bindingOf: (anInstanceVariableProbe assignedClassName asSymbol)) value).
+
+ allSenderMethods collect: [:aMethodReference | self doAddLinkedAnnotationsFor: anInstanceVariableProbe in: aMethodReference].
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddLinkedAnnotationsFor.in..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddLinkedAnnotationsFor.in..st
new file mode 100644
index 00000000..0465ce44
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/doAddLinkedAnnotationsFor.in..st
@@ -0,0 +1,14 @@
+*Babylonian-UI-private
+doAddLinkedAnnotationsFor: anInstanceVariableProbe in: aMethodReference
+
+ | allRanges styledText |
+ allRanges := aMethodReference compiledMethod bpExtractVariableAssignmentRangesNamed: anInstanceVariableProbe variableName.
+ styledText := aMethodReference sourceCode.
+
+ allRanges do: [:aRange | anInstanceVariableProbe linkedProbes add:
+ (self styleText: styledText in: aRange referencing: aMethodReference)].
+
+ allRanges ifNotEmpty: [SystemChangeNotifier uniqueInstance doSilently:
+ [aMethodReference actualClass
+ compile: (BPStyler new unstyledTextFrom: styledText)
+ classified: aMethodReference category]].
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/saveMethodWithExamples.st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/saveMethodWithExamples.st
index ae4de306..f831c874 100644
--- a/packages/Babylonian-UI.package/CodeHolder.extension/instance/saveMethodWithExamples.st
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/saveMethodWithExamples.st
@@ -1,6 +1,6 @@
*Babylonian-UI-private
saveMethodWithExamples
-
+
self codeTextMorph
hasUnacceptedEdits: true;
accept.
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/instance/styleText.in.referencing..st b/packages/Babylonian-UI.package/CodeHolder.extension/instance/styleText.in.referencing..st
new file mode 100644
index 00000000..b62f06a7
--- /dev/null
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/instance/styleText.in.referencing..st
@@ -0,0 +1,13 @@
+*Babylonian-UI-private
+styleText: aText in: aRange referencing: aMethodReference
+
+ | linkedProbe |
+ self flag: #todo. "If assignment already has an annotation, re-use that one"
+ linkedProbe := BPProbe new methodReference: aMethodReference.
+ aText addAttribute: (
+ BPTextDecoration new
+ anchoredMorph: linkedProbe asMorph;
+ yourself)
+ from: aRange x
+ to: aRange y.
+ ^ linkedProbe
\ No newline at end of file
diff --git a/packages/Babylonian-UI.package/CodeHolder.extension/methodProperties.json b/packages/Babylonian-UI.package/CodeHolder.extension/methodProperties.json
index 70532448..c07f70f3 100644
--- a/packages/Babylonian-UI.package/CodeHolder.extension/methodProperties.json
+++ b/packages/Babylonian-UI.package/CodeHolder.extension/methodProperties.json
@@ -5,23 +5,30 @@
"addAnnotation:in:" : "pre 8/17/2023 11:49",
"addAnnotationAtSelection:" : "pre 7/23/2022 20:17",
"addAssertionToSelection" : "pre 11/13/2019 17:37",
- "addProbeToSelection" : "pre 8/6/2019 16:11",
+ "addProbeToSelection" : "joabe 9/21/2023 21:38",
"addProfilingProbeToSelection" : "pre 11/29/2022 16:32",
"addReplacementToSelection" : "pre 11/14/2019 15:50",
"addSliderToSelection" : "pre 9/22/2020 18:27",
"addTypeProbeToSelection" : "pre 11/30/2022 09:40",
+ "allAndLowestUsefulAncestorFor:canBeAnnotatedTo:" : "joabe 9/21/2023 20:26",
"annotationsInSelection" : "pre 11/8/2019 12:05",
"bindingOf:" : "pre 5/3/2021 14:26",
+ "bpClassDeclarationSourceMap" : "joabe 9/21/2023 17:59",
"bpEnsureContentsAndSelectedMessage" : "pre 9/1/2022 22:03",
"browseActualImplementers" : "pre 9/2/2022 15:27",
"codePaneMenuAnnotationItems:" : "pre 11/30/2022 09:40",
"codePaneMenuBPTracingItems:" : "pre 9/2/2022 15:06",
"compiledMethod" : "ct 3/30/2022 16:48",
"determineIntervalOfReceiver:" : "pre 9/2/2022 14:29",
- "determineIntervalToAnnotateFor:forNodes:" : "pre 9/1/2022 22:03",
- "determineMessageSendNodeIn:" : "pre 9/2/2022 14:06",
+ "determineIntervalOfVariableNameIn:having:" : "joabe 10/7/2023 19:17",
+ "determineIntervalToAnnotateFor:in:" : "joabe 9/26/2023 13:52",
+ "determineMessageSendNodeIn:" : "joabe 10/2/2023 13:26",
"determineSelectorOfMessageSend:" : "pre 9/2/2022 14:49",
- "doAddAnnotation:in:" : "pre 9/28/2023 13:58",
+ "doAddAnnotation:in:" : "joabe 10/4/2023 16:16",
+ "doAddAnnotationMorphToMethod:in:" : "joabe 10/7/2023 20:20",
+ "doAddInstanceProbeToRegistry:nameIn:" : "joabe 10/2/2023 16:07",
+ "doAddLinkedAnnotationsFor:" : "joabe 10/4/2023 16:18",
+ "doAddLinkedAnnotationsFor:in:" : "joabe 10/5/2023 12:25",
"doBrowseActualImplementersFromProbe:andSelector:" : "pre 9/2/2022 15:54",
"doItReceiver" : "ct 3/30/2022 16:48",
"exampleForEvaluation" : "ct 8/18/2021 23:15",
@@ -35,5 +42,6 @@
"removeReplacementFromSelection" : "pre 4/29/2020 19:07",
"removeSelectedAnnotationsSatisfying:" : "pre 9/2/2022 14:42",
"removeTypeProbeFromSelection" : "pre 11/30/2022 09:40",
- "saveMethodWithExamples" : "jb 3/5/2022 15:02",
- "saveMethodWithExamplesWith:" : "pre 8/6/2019 13:57" } }
+ "saveMethodWithExamples" : "joabe 9/22/2023 22:57",
+ "saveMethodWithExamplesWith:" : "pre 8/6/2019 13:57",
+ "styleText:in:referencing:" : "joabe 10/5/2023 12:24" } }
diff --git a/packages/BaselineOfBabylonianProgramming.package/BaselineOfBabylonianProgramming.class/instance/baseline..st b/packages/BaselineOfBabylonianProgramming.package/BaselineOfBabylonianProgramming.class/instance/baseline..st
index e97d0c88..7da6dd96 100644
--- a/packages/BaselineOfBabylonianProgramming.package/BaselineOfBabylonianProgramming.class/instance/baseline..st
+++ b/packages/BaselineOfBabylonianProgramming.package/BaselineOfBabylonianProgramming.class/instance/baseline..st
@@ -10,11 +10,17 @@ baseline: spec
[ spec repository: 'github://hpi-swa/Ohm-S:master/packages' ];
baseline: 'PEG' with:
[ spec repository: 'github://codeZeilen/peg_parser/packages' ];
+ project: 'Refactoring-Core' with:
+ [ spec
+ className: 'ConfigurationOfRefactoringBrowser';
+ repository: 'http://www.squeaksource.com/MetacelloRepository';
+ loads: #('Core');
+ version: '3.0'];
package: 'IconsBase' with: [
spec repository: 'http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/SwaUtilities'];
package: 'ContextS2-Core' with:
[ spec repository: 'http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/ContextSTrunk' ];
- package: 'Babylonian-Core' with: [spec requires: #('Babylonian-Compiler' 'ContextS2-Core')];
+ package: 'Babylonian-Core' with: [spec requires: #('Babylonian-Compiler' 'ContextS2-Core' 'Refactoring-Core')];
package: 'Babylonian-ProbeLog' with: [spec requires: #('Babylonian-Core' 'Babylonian-UI')];
package: 'Babylonian-ExampleMining' with: [spec requires: #('Babylonian-Core' 'Babylonian-UI')];
package: 'Babylonian-Compiler' with: [
diff --git a/packages/BaselineOfBabylonianProgramming.package/BaselineOfBabylonianProgramming.class/methodProperties.json b/packages/BaselineOfBabylonianProgramming.package/BaselineOfBabylonianProgramming.class/methodProperties.json
index c916fd04..b3e06d89 100644
--- a/packages/BaselineOfBabylonianProgramming.package/BaselineOfBabylonianProgramming.class/methodProperties.json
+++ b/packages/BaselineOfBabylonianProgramming.package/BaselineOfBabylonianProgramming.class/methodProperties.json
@@ -2,7 +2,7 @@
"class" : {
},
"instance" : {
- "baseline:" : "joabe 7/11/2023 16:00",
+ "baseline:" : "joabe 10/23/2023 13:07",
"postLoadCompiler" : "pre 2/22/2021 10:51",
"postLoadTests" : "pre 7/7/2021 15:01",
"postLoadUI" : "joabe 5/30/2023 16:58" } }