Fixes and improvements for Java/Groovy completion (part 1)
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 15 May 2014 14:41:52 +0100
changeset 212 a2caebc602a7
parent 210 1922d415c704
child 213 360f02a38ae9
child 214 f7bb8f2dd505
Fixes and improvements for Java/Groovy completion (part 1) * Better presentation of constructors. * Better alignment of completion window when completing packages / full class names.
Make.proto
Make.spec
SmallSense__AbstractJavaCompletionEngine.st
SmallSense__AbstractJavaCompletionSimple.st
SmallSense__ClassPO.st
SmallSense__CompletionController.st
SmallSense__CompletionEngine.st
SmallSense__JavaConstructorPO.st
SmallSense__MethodPO.st
SmallSense__SmalltalkCompletionEngine.st
SmallSense__SmalltalkLintHighlighter.st
abbrev.stc
bc.mak
jv_smallsense.st
libInit.cc
smallsense.rc
--- a/Make.proto	Thu May 15 10:40:02 2014 +0100
+++ b/Make.proto	Thu May 15 14:41:52 2014 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint -I$(INCLUDE_TOP)/stx/goodies/regex -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libhtml -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/helpers -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/lint -I$(INCLUDE_TOP)/stx/goodies/regex -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libhtml -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
 
 
 # if you need any additional defines for embedded C code,
@@ -138,7 +138,6 @@
 	cd $(TOP)/libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/goodies/refactoryBrowser/browser && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd $(TOP)/goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libwidg && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/goodies/refactoryBrowser/lint && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd $(TOP)/libhtml && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
@@ -220,6 +219,7 @@
 $(OUTDIR)SmallSense__AbstractJavaCompletionSimple.$(O) SmallSense__AbstractJavaCompletionSimple.$(H): SmallSense__AbstractJavaCompletionSimple.st $(INCLUDE_TOP)/jv/smallsense/SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GroovyEditSupport.$(O) SmallSense__GroovyEditSupport.$(H): SmallSense__GroovyEditSupport.st $(INCLUDE_TOP)/jv/smallsense/SmallSense__EditSupport.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__JavaEditSupport.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaCompletionEngine.$(O) SmallSense__JavaCompletionEngine.$(H): SmallSense__JavaCompletionEngine.st $(INCLUDE_TOP)/jv/smallsense/SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__JavaConstructorPO.$(O) SmallSense__JavaConstructorPO.$(H): SmallSense__JavaConstructorPO.st $(INCLUDE_TOP)/jv/smallsense/SmallSense__MethodPO.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodKeywordRestPO.$(O) SmallSense__MethodKeywordRestPO.$(H): SmallSense__MethodKeywordRestPO.st $(INCLUDE_TOP)/jv/smallsense/SmallSense__MethodPO.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__PO.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaCompletionEngineSimple.$(O) SmallSense__JavaCompletionEngineSimple.$(H): SmallSense__JavaCompletionEngineSimple.st $(INCLUDE_TOP)/jv/smallsense/SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__AbstractJavaCompletionSimple.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GroovyCompletionEngineSimple.$(O) SmallSense__GroovyCompletionEngineSimple.$(H): SmallSense__GroovyCompletionEngineSimple.st $(INCLUDE_TOP)/jv/smallsense/SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__AbstractJavaCompletionSimple.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)/jv/smallsense/SmallSense__JavaCompletionEngineSimple.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/Make.spec	Thu May 15 10:40:02 2014 +0100
+++ b/Make.spec	Thu May 15 14:41:52 2014 +0100
@@ -107,6 +107,7 @@
 	SmallSense::AbstractJavaCompletionSimple \
 	SmallSense::GroovyEditSupport \
 	SmallSense::JavaCompletionEngine \
+	SmallSense::JavaConstructorPO \
 	SmallSense::MethodKeywordRestPO \
 	SmallSense::JavaCompletionEngineSimple \
 	SmallSense::GroovyCompletionEngineSimple \
@@ -172,6 +173,7 @@
     $(OUTDIR_SLASH)SmallSense__AbstractJavaCompletionSimple.$(O) \
     $(OUTDIR_SLASH)SmallSense__GroovyEditSupport.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaCompletionEngine.$(O) \
+    $(OUTDIR_SLASH)SmallSense__JavaConstructorPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__MethodKeywordRestPO.$(O) \
     $(OUTDIR_SLASH)SmallSense__JavaCompletionEngineSimple.$(O) \
     $(OUTDIR_SLASH)SmallSense__GroovyCompletionEngineSimple.$(O) \
--- a/SmallSense__AbstractJavaCompletionEngine.st	Thu May 15 10:40:02 2014 +0100
+++ b/SmallSense__AbstractJavaCompletionEngine.st	Thu May 15 14:41:52 2014 +0100
@@ -60,6 +60,16 @@
     "Created: / 15-05-2014 / 07:24:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+addConstructorsForClass: aJavaClass fullName: showFullName
+    aJavaClass selectorsAndMethodsDo:[:selector :method |
+        (selector first == $< and:[ selector startsWith: '<init>' ]) ifTrue:[ 
+            result add: ((JavaConstructorPO name: selector class: aJavaClass) showPrefix: showFullName)
+        ].
+    ].
+
+    "Created: / 15-05-2014 / 12:05:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 addImportsStartingWith: prefix
     | packages |
 
--- a/SmallSense__AbstractJavaCompletionSimple.st	Thu May 15 10:40:02 2014 +0100
+++ b/SmallSense__AbstractJavaCompletionSimple.st	Thu May 15 14:41:52 2014 +0100
@@ -123,16 +123,31 @@
     anyMatched ifFalse:[ 
         stream position: 0.
         tokens := stream contents.
-        (tokens size > 2 and:[tokens last type == $. or:[tokens last type == #Identifier and:[ (tokens at: tokens size - 1) type == $. ]]]) ifTrue:[
+        tokens isEmptyOrNil ifTrue:[ ^ result ].
+
+        tokens last type == #Identifier ifTrue:[ 
+            tokens size == 1 ifTrue:[ 
+                "/ Only one token on line, complete local variable or receiver's field.
+                self completeLocalOrField: tokens.
+            ] ifFalse:[ 
+                "/ If preceeding token is dot, complete method or field of the receiver.
+                (tokens at: tokens size - 1) type == $. ifTrue:[ 
+                    self completeMethodOrField: tokens.
+                ] ifFalse:[ 
+                    "/ Else try to complete field.
+                    self completeLocalOrField: tokens.                    
+                ].
+            ].
+        ] ifFalse:[
+        "/ Else if last token in dot, complete method or field of the receiver
+        tokens last type == $. ifTrue:[ 
             self completeMethodOrField: tokens.
-        ].                
+        ]].
     ].
-
-
     ^ result
 
     "Created: / 02-10-2013 / 13:55:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified (format): / 15-05-2014 / 07:52:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-05-2014 / 14:02:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 completeImport: match
@@ -147,6 +162,12 @@
     "Created: / 15-05-2014 / 06:57:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+completeLocalOrField: tokens
+    ^ self shouldImplement
+
+    "Created: / 15-05-2014 / 14:01:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 completeMethodOrField: tokens
     | type dotIndex |
 
@@ -172,18 +193,41 @@
 !
 
 completeNew: match
-    | prefix |
+    | prefix classes full |
 
-    prefix := nil.
+    match size < 2 ifTrue:[ 
+        ^ self.
+    ].
+
     match size > 2 ifTrue:[ 
         prefix := String streamContents:[:s | 2 to: match size do:[:i | s nextPutAll: (match at: i) value asString] ].
-        self addClassesStartingWith: prefix fullName: true.
+        full := true.
     ] ifFalse:[ 
         prefix := (match at: 2) value.
-        self addClassesStartingWith: prefix
+        full := false.
+    ].
+    prefix replaceAll: $. with: $/.
+    classes := Set new.
+    context environment allClassesDo:[:cls |
+        (cls isJavaClass and:[cls isPublic]) ifTrue:[ 
+            full ifTrue:[ 
+                (cls binaryName startsWith: prefix) ifTrue:[ 
+                    classes add: cls.
+                ].
+            ] ifFalse:[ 
+                (cls lastName startsWith: prefix) ifTrue:[ 
+                    classes add: cls.
+                ].
+            ].
+        ].
+    ].
+
+    classes do:[:cls | 
+        self addConstructorsForClass: cls fullName: full.
     ].
 
     "Created: / 15-05-2014 / 07:16:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-05-2014 / 13:13:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !AbstractJavaCompletionSimple methodsFor:'guesswork'!
@@ -239,10 +283,13 @@
         ].
     ].
 
-    ^ Type withClass: (context environment classNamed:#'JAVA::java::lang::Object')
+    ^ Type unknown    
+"/    ^ Type withClass: 
+"/        (context environment classNamed:#'JAVA::java::lang::Object')
+"/            ? (context environment classNamed:#'java/lang/Object')
 
     "Created: / 15-05-2014 / 08:09:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 15-05-2014 / 09:42:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-05-2014 / 13:04:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 guessTypeOfMethod: name of: type numArgs: nargs
--- a/SmallSense__ClassPO.st	Thu May 15 10:40:02 2014 +0100
+++ b/SmallSense__ClassPO.st	Thu May 15 14:41:52 2014 +0100
@@ -60,8 +60,8 @@
     ^ showPrefix
 !
 
-showPrefix:something
-    showPrefix := something.
+showPrefix:aBoolean
+    showPrefix := aBoolean.
 !
 
 stringAlreadyWritten
--- a/SmallSense__CompletionController.st	Thu May 15 10:40:02 2014 +0100
+++ b/SmallSense__CompletionController.st	Thu May 15 14:41:52 2014 +0100
@@ -329,7 +329,7 @@
     list = #( 'Busy...' ) ifTrue:[ ^ self ].  
 
     x := (editView xOfCol:editView cursorCol  inVisibleLine:editView cursorLine)
-            - 16"icon" - (editView widthOfString:  support wordBeforeCursor) - 5"magic constant".
+            - 16"icon" - (editView widthOfString:  "support wordBeforeCursor"list first stringAlreadyWritten) - 5"magic constant".
     y := editView yOfCursor + editView font maxHeight + 3.
     movePos := (editView originRelativeTo: nil) + (x @ y).
 
@@ -362,7 +362,7 @@
     ].
 
     "Created: / 27-09-2013 / 14:01:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 27-02-2014 / 10:13:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-05-2014 / 11:30:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 updateCompletions: completionResult sequence: sequence
--- a/SmallSense__CompletionEngine.st	Thu May 15 10:40:02 2014 +0100
+++ b/SmallSense__CompletionEngine.st	Thu May 15 14:41:52 2014 +0100
@@ -92,6 +92,25 @@
 
 !CompletionEngine methodsFor:'completion-individual'!
 
+addClassesInJavaPackage: prefix
+    prefix isEmptyOrNil ifTrue:[
+        context environment allClassesDo: [:cls |
+            cls isJavaClass ifTrue:[
+                result add: (ClassPO new klass: cls; showPrefix: true; yourself)
+            ].
+        ].
+    ] ifFalse:[
+        context environment allClassesDo: [:cls |
+            (cls isJavaClass and:[cls binaryName startsWith: prefix]) ifTrue:[
+                result add: (ClassPO new klass: cls; showPrefix: true; yourself)
+            ].
+        ].
+
+    ].
+
+    "Created: / 15-05-2014 / 11:43:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 addMethodsForType: type 
     | classes seen |
 
@@ -118,7 +137,7 @@
                     package := node selector , '/' , package.
                     node := node receiver.
                 ].
-                self addJavaClassesInPackage: package.
+                self addClassesInJavaPackage: package.
                 ^ self.
             ]
         ]
@@ -142,7 +161,8 @@
                 ].
             ] ifFalse:[
                 class selectorsAndMethodsDo: [:selector :met | 
-                    met isSynthetic ifFalse:[
+                    "/ Do not offer synthetic methods and Java ctors
+                    (met isSynthetic or:[met isJavaMethod and:[met selector startsWith: '<init>']]) ifFalse:[
                         result add: (MethodPO 
                                     name: selector
                                     class: met mclass).
@@ -154,7 +174,7 @@
     ].
 
     "Created: / 26-11-2011 / 17:03:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 22-01-2014 / 19:48:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-05-2014 / 11:43:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 addMethodsForType: type prefix: prefix stripOff: stripprefix
@@ -204,7 +224,7 @@
                     package := node selector , '/' , package.
                     node := node receiver.
                 ].
-                self addJavaClassesInPackage: package.
+                self addClassesInJavaPackage: package.
                 ^ self.
             ]
         ]
@@ -243,6 +263,7 @@
     ].
 
     "Created: / 08-04-2014 / 21:23:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-05-2014 / 11:43:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 addMethodsStartingWith: prefix
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__JavaConstructorPO.st	Thu May 15 14:41:52 2014 +0100
@@ -0,0 +1,57 @@
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+MethodPO subclass:#JavaConstructorPO
+	instanceVariableNames:'showPrefix'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SmallSense-Java-Interface-PO'
+!
+
+!JavaConstructorPO methodsFor:'accessing'!
+
+label
+    label isNil ifTrue:[
+        label := (class compiledMethodAt: name) printStringForBrowserWithSelector: name.
+        showPrefix ifTrue:[ 
+            label := class javaPackage , '.' , label
+        ].
+    ].
+    ^ label
+
+    "Created: / 15-05-2014 / 12:04:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+showPrefix: aBoolean
+    showPrefix := aBoolean
+
+    "Created: / 15-05-2014 / 12:01:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+stringAlreadyWritten
+    "Answers a string already written in the textview"    
+
+    ^ showPrefix ifTrue:[
+        context wordBeforeCursorConsisitingOfCharactersMatching:[:c | c isAlphaNumeric or:['$_.' includes: c] ]          
+    ] ifFalse:[ 
+        super stringAlreadyWritten
+    ].
+
+    "Created: / 15-05-2014 / 12:06:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+stringToCompleteForLanguage: aProgrammingLanguage
+    "Answers a string to complete"
+
+    | string |
+
+    string := super stringToCompleteForLanguage: aProgrammingLanguage.
+    showPrefix ifTrue:[ 
+        string := class javaPackage , '.' , string   
+    ].
+    ^ string
+
+    "Created: / 15-05-2014 / 12:07:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/SmallSense__MethodPO.st	Thu May 15 10:40:02 2014 +0100
+++ b/SmallSense__MethodPO.st	Thu May 15 14:41:52 2014 +0100
@@ -96,7 +96,14 @@
             ^  method selector upTo: $(
         ].
         ((language askFor: #isJava) or:[language askFor: #isGroovy]) ifTrue:[
-            ^ (method selector upTo: $() , (method numArgs == 0 ifTrue:['()'] ifFalse:['(  )']).
+            | selector |
+
+            selector := (method selector upTo: $().
+            selector = '<init>' ifTrue:[ 
+                selector := someClass lastName.
+            ].
+            selector := selector , (method numArgs == 0 ifTrue:['()'] ifFalse:['(  )']).
+            ^ selector
         ].
     ].
     ^ String 
@@ -104,7 +111,7 @@
         separatedBy: ':  '.
 
     "Created: / 02-10-2013 / 02:33:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 31-03-2014 / 23:08:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-05-2014 / 13:02:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !MethodPO methodsFor:'displaying'!
--- a/SmallSense__SmalltalkCompletionEngine.st	Thu May 15 10:40:02 2014 +0100
+++ b/SmallSense__SmalltalkCompletionEngine.st	Thu May 15 14:41:52 2014 +0100
@@ -131,26 +131,6 @@
     "Modified: / 13-05-2014 / 12:09:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-addJavaClassesInPackage: prefix
-    prefix isEmptyOrNil ifTrue:[
-        context environment allClassesDo: [:cls |
-            cls isJavaClass ifTrue:[
-                result add: (ClassPO new klass: cls; showPrefix: true; yourself)
-            ].
-        ].
-    ] ifFalse:[
-        context environment allClassesDo: [:cls |
-            (cls isJavaClass and:[cls binaryName startsWith: prefix]) ifTrue:[
-                result add: (ClassPO new klass: cls; showPrefix: true; yourself)
-            ].
-        ].
-
-    ].
-
-    "Created: / 04-10-2013 / 13:09:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 14-05-2014 / 12:48:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
 addPools
     | class |
 
--- a/SmallSense__SmalltalkLintHighlighter.st	Thu May 15 10:40:02 2014 +0100
+++ b/SmallSense__SmalltalkLintHighlighter.st	Thu May 15 14:41:52 2014 +0100
@@ -254,3 +254,10 @@
     "Modified: / 17-09-2013 / 15:24:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!SmalltalkLintHighlighter class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/abbrev.stc	Thu May 15 10:40:02 2014 +0100
+++ b/abbrev.stc	Thu May 15 14:41:52 2014 +0100
@@ -30,7 +30,6 @@
 SmallSense::SmalltalkSyntaxHighlighter SmallSense__SmalltalkSyntaxHighlighter jv:smallsense 'SmallSense-Smalltalk' 3
 SmallSense::SmalltalkUnacceptedMethodEnvironment SmallSense__SmalltalkUnacceptedMethodEnvironment jv:smallsense 'SmallSense-Smalltalk-Lint' 0
 SmallSense::TokenPatternMatcher SmallSense__TokenPatternMatcher jv:smallsense 'SmallSense-Utils-Matcher' 0
-SmallSense::TokenPatternMatcherTests SmallSense__TokenPatternMatcherTests jv:smallsense 'SmallSense-Tests' 1
 SmallSense::TokenPatternParser SmallSense__TokenPatternParser jv:smallsense 'SmallSense-Utils-Matcher' 0
 SmallSense::TokenPatternToken SmallSense__TokenPatternToken jv:smallsense 'SmallSense-Utils-Matcher' 0
 SmallSense::TokenPatternTokenSet SmallSense__TokenPatternTokenSet jv:smallsense 'SmallSense-Utils-Matcher' 0
@@ -56,14 +55,16 @@
 SmallSense::UnionType SmallSense__UnionType jv:smallsense 'SmallSense-Smalltalk-Types' 0
 SmallSense::UnknownType SmallSense__UnknownType jv:smallsense 'SmallSense-Smalltalk-Types' 1
 SmallSense::VariablePO SmallSense__VariablePO jv:smallsense 'SmallSense-Core-Interface-PO' 0
-SmallSense::AbstractJavaCompletionSimple SmallSense__AbstractJavaCompletionSimple jv:smallsense 'SmallSense-Java-Abstract' 1
+SmallSense::AbstractJavaCompletionSimple SmallSense__AbstractJavaCompletionSimple jv:smallsense 'SmallSense-Java-Abstract' 2
 SmallSense::GroovyEditSupport SmallSense__GroovyEditSupport jv:smallsense 'SmallSense-Groovy' 0
 SmallSense::JavaCompletionEngine SmallSense__JavaCompletionEngine jv:smallsense 'SmallSense-Java' 0
+SmallSense::JavaConstructorPO SmallSense__JavaConstructorPO jv:smallsense 'SmallSense-Java-Interface-PO' 0
 SmallSense::MethodKeywordRestPO SmallSense__MethodKeywordRestPO jv:smallsense 'SmallSense-Core-Interface-PO' 0
-SmallSense::JavaCompletionEngineSimple SmallSense__JavaCompletionEngineSimple jv:smallsense 'SmallSense-Java' 1
-SmallSense::GroovyCompletionEngineSimple SmallSense__GroovyCompletionEngineSimple jv:smallsense 'SmallSense-Groovy' 1
+SmallSense::JavaCompletionEngineSimple SmallSense__JavaCompletionEngineSimple jv:smallsense 'SmallSense-Java' 2
+SmallSense::GroovyCompletionEngineSimple SmallSense__GroovyCompletionEngineSimple jv:smallsense 'SmallSense-Groovy' 2
 SmallSense::BaseTestClass SmallSense__BaseTestClass jv:smallsense 'SmallSense-Tests' 1
 SmallSense::FinderTests SmallSense__FinderTests jv:smallsense 'SmallSense-Tests' 1
 SmallSense::RecognizerTests SmallSense__RecognizerTests jv:smallsense 'SmallSense-Tests' 1
 SmallSense::SmalltalkParserTests SmallSense__SmalltalkParserTests jv:smallsense 'SmallSense-Tests' 1
 SmallSense::TestCase SmallSense__TestCase jv:smallsense 'SmallSense-Tests' 1
+SmallSense::TokenPatternMatcherTests SmallSense__TokenPatternMatcherTests jv:smallsense 'SmallSense-Tests' 1
--- a/bc.mak	Thu May 15 10:40:02 2014 +0100
+++ b/bc.mak	Thu May 15 14:41:52 2014 +0100
@@ -34,7 +34,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint -I$(INCLUDE_TOP)\stx\goodies\regex -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libhtml -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\helpers -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\lint -I$(INCLUDE_TOP)\stx\goodies\regex -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libhtml -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -61,7 +61,6 @@
 	pushd ..\..\stx\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\goodies\refactoryBrowser\browser & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\stx\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libwidg & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\goodies\refactoryBrowser\lint & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\stx\libhtml & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
@@ -144,6 +143,7 @@
 $(OUTDIR)SmallSense__AbstractJavaCompletionSimple.$(O) SmallSense__AbstractJavaCompletionSimple.$(H): SmallSense__AbstractJavaCompletionSimple.st $(INCLUDE_TOP)\jv\smallsense\SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GroovyEditSupport.$(O) SmallSense__GroovyEditSupport.$(H): SmallSense__GroovyEditSupport.st $(INCLUDE_TOP)\jv\smallsense\SmallSense__EditSupport.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__JavaEditSupport.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaCompletionEngine.$(O) SmallSense__JavaCompletionEngine.$(H): SmallSense__JavaCompletionEngine.st $(INCLUDE_TOP)\jv\smallsense\SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SmallSense__JavaConstructorPO.$(O) SmallSense__JavaConstructorPO.$(H): SmallSense__JavaConstructorPO.st $(INCLUDE_TOP)\jv\smallsense\SmallSense__MethodPO.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__MethodKeywordRestPO.$(O) SmallSense__MethodKeywordRestPO.$(H): SmallSense__MethodKeywordRestPO.st $(INCLUDE_TOP)\jv\smallsense\SmallSense__MethodPO.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__PO.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__JavaCompletionEngineSimple.$(O) SmallSense__JavaCompletionEngineSimple.$(H): SmallSense__JavaCompletionEngineSimple.st $(INCLUDE_TOP)\jv\smallsense\SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__AbstractJavaCompletionSimple.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SmallSense__GroovyCompletionEngineSimple.$(O) SmallSense__GroovyCompletionEngineSimple.$(H): SmallSense__GroovyCompletionEngineSimple.st $(INCLUDE_TOP)\jv\smallsense\SmallSense__AbstractJavaCompletionEngine.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__AbstractJavaCompletionSimple.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__CompletionEngine.$(H) $(INCLUDE_TOP)\jv\smallsense\SmallSense__JavaCompletionEngineSimple.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/jv_smallsense.st	Thu May 15 10:40:02 2014 +0100
+++ b/jv_smallsense.st	Thu May 15 14:41:52 2014 +0100
@@ -47,7 +47,6 @@
         #'stx:goodies/refactoryBrowser/helpers'    "BrowserEnvironment - superclass of SmallSense::SmalltalkUnacceptedMethodEnvironment "
         #'stx:goodies/refactoryBrowser/lint'    "RBLintRule - extended "
         #'stx:goodies/regex'    "Regex::RxCharSetParser - superclass of SmallSense::TokenPatternParser::TokenSpecParser "
-        #'stx:goodies/sunit'    "TestAsserter - superclass of SmallSense::TokenPatternMatcherTests "
         #'stx:libbasic'    "Autoload - superclass of SmallSense::BaseTestClass "
         #'stx:libcomp'    "AbstractSyntaxHighlighter - superclass of SmallSense::SmalltalkParser "
         #'stx:libhtml'    "HTMLDocumentFrame - extended "
@@ -191,7 +190,6 @@
         #'SmallSense::SmalltalkSyntaxHighlighter'
         #'SmallSense::SmalltalkUnacceptedMethodEnvironment'
         #'SmallSense::TokenPatternMatcher'
-        (#'SmallSense::TokenPatternMatcherTests' autoload)
         #'SmallSense::TokenPatternParser'
         #'SmallSense::TokenPatternToken'
         #'SmallSense::TokenPatternTokenSet'
@@ -220,6 +218,7 @@
         #'SmallSense::AbstractJavaCompletionSimple'
         #'SmallSense::GroovyEditSupport'
         #'SmallSense::JavaCompletionEngine'
+        #'SmallSense::JavaConstructorPO'
         #'SmallSense::MethodKeywordRestPO'
         #'SmallSense::JavaCompletionEngineSimple'
         #'SmallSense::GroovyCompletionEngineSimple'
@@ -228,6 +227,7 @@
         (#'SmallSense::RecognizerTests' autoload)
         (#'SmallSense::SmalltalkParserTests' autoload)
         (#'SmallSense::TestCase' autoload)
+        (#'SmallSense::TokenPatternMatcherTests' autoload)
     )
 !
 
--- a/libInit.cc	Thu May 15 10:40:02 2014 +0100
+++ b/libInit.cc	Thu May 15 14:41:52 2014 +0100
@@ -84,6 +84,7 @@
 _SmallSense__AbstractJavaCompletionSimple_Init(pass,__pRT__,snd);
 _SmallSense__GroovyEditSupport_Init(pass,__pRT__,snd);
 _SmallSense__JavaCompletionEngine_Init(pass,__pRT__,snd);
+_SmallSense__JavaConstructorPO_Init(pass,__pRT__,snd);
 _SmallSense__MethodKeywordRestPO_Init(pass,__pRT__,snd);
 _SmallSense__JavaCompletionEngineSimple_Init(pass,__pRT__,snd);
 _SmallSense__GroovyCompletionEngineSimple_Init(pass,__pRT__,snd);
--- a/smallsense.rc	Thu May 15 10:40:02 2014 +0100
+++ b/smallsense.rc	Thu May 15 14:41:52 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.3.0\0"
-      VALUE "ProductDate", "Wed, 14 May 2014 14:21:36 GMT\0"
+      VALUE "ProductDate", "Thu, 15 May 2014 13:41:10 GMT\0"
     END
 
   END