Java/Groovy simple completion: better behaviour for completing local variable declaration
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 19 May 2014 12:49:07 +0100
changeset 225 67c827ba6b28
parent 224 fe96a1c8b469
child 226 ef4a53a77c35
Java/Groovy simple completion: better behaviour for completing local variable declaration Inhibit completion of locals/fields.
SmallSense__AbstractJavaCompletionEngine.st
SmallSense__AbstractJavaCompletionEngineSimple.st
SmallSense__GroovyCompletionEngineSimple.st
abbrev.stc
jv_smallsense.st
smallsense.rc
--- a/SmallSense__AbstractJavaCompletionEngine.st	Mon May 19 11:25:44 2014 +0100
+++ b/SmallSense__AbstractJavaCompletionEngine.st	Mon May 19 12:49:07 2014 +0100
@@ -6,7 +6,7 @@
 	instanceVariableNames:'class method'
 	classVariableNames:''
 	poolDictionaries:''
-	category:'SmallSense-Java-Abstract'
+	category:'SmallSense-Java'
 !
 
 !AbstractJavaCompletionEngine class methodsFor:'queries'!
--- a/SmallSense__AbstractJavaCompletionEngineSimple.st	Mon May 19 11:25:44 2014 +0100
+++ b/SmallSense__AbstractJavaCompletionEngineSimple.st	Mon May 19 12:49:07 2014 +0100
@@ -4,12 +4,12 @@
 
 AbstractJavaCompletionEngine subclass:#AbstractJavaCompletionEngineSimple
 	instanceVariableNames:''
-	classVariableNames:''
+	classVariableNames:'PatternPrimitiveType PatternReferenceType'
 	poolDictionaries:''
-	category:'SmallSense-Java-Abstract'
+	category:'SmallSense-Java'
 !
 
-AbstractJavaCompletionEngineSimple class instanceVariableNames:'CompletionPatterns AnalysisPatterns'
+AbstractJavaCompletionEngineSimple class instanceVariableNames:'PatternsForCompletion PatternsForAnalysis'
 
 "
  No other class instance variables are inherited by this class.
@@ -19,37 +19,75 @@
 
 !AbstractJavaCompletionEngineSimple class methodsFor:'initialization'!
 
-initializeCompletionPatterns
-    CompletionPatterns := Dictionary new.
-
-    #(
-        '[[:import:]] ( [[:Identifier:]](\.[[:Identifier:]])*\.? )? [[:CARET:]]'              #completeImport:
-        '[[:new:]] ( [[:Identifier:]](\.[[:Identifier:]])*\.?)? [[:CARET:]]'                  #completeNew:
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
 
-    ) pairWiseDo:[:pattern :action |
-        CompletionPatterns at: (TokenPatternParser parse: pattern) put: action
-    ].
-    "
-    self allSubclassesDo:[ :cls| 
-        cls initializeCompletionPatterns.
-    ].
+    PatternPrimitiveType := '( [[:byte:]] | [[:short:]] | [[:int:]] | [[:long:]] | [[:float:]] | [[:double:]] | [[:char:]] | [[:boolean:]] )'.
+    PatternReferenceType := '( [[:Identifier:]]( \. [[:Identifier:]] )* )'
 
-    Expecco::SmallSenseBridgedGroovyCompletionEngine  initializeCompletionPatterns; completionPatterns
-    "
-
-    "Created: / 14-05-2014 / 16:51:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 18-05-2014 / 20:54:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 19-05-2014 / 12:31:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !AbstractJavaCompletionEngineSimple class methodsFor:'accessing'!
 
-completionPatterns
-    CompletionPatterns isNil ifTrue:[ 
-        self initializeCompletionPatterns.
+patternsForAnalysis
+    PatternsForAnalysis isNil ifTrue:[
+        PatternsForAnalysis := self patternsFrom: self patternDefinitionsForAnalysis
     ].
-    ^ CompletionPatterns
+    ^ PatternsForAnalysis
+
+    "Created: / 19-05-2014 / 11:56:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+patternsForCompletion
+    PatternsForCompletion isNil ifTrue:[
+        PatternsForCompletion := self patternsFrom: self patternDefinitionsForCompletion.  
+    ].
+    ^ PatternsForCompletion
 
     "Created: / 14-05-2014 / 16:55:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 19-05-2014 / 11:56:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+patternsFrom: anArray
+    | patterns |
+
+    patterns := Dictionary new.
+    anArray pairWiseDo:[:key :def |
+        patterns at: key put: (TokenPatternParser parse: def)             
+    ].
+    ^ patterns
+
+    "Created: / 19-05-2014 / 11:55:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!AbstractJavaCompletionEngineSimple class methodsFor:'accessing-definitions'!
+
+patternDefinitionsForAnalysis
+    ^ #( 
+"/        #completeImport:        '[[:import:]] ( [[:Identifier:]](\.[[:Identifier:]])*\.? )? [[:CARET:]]'
+"/        #completeNew:           '[[:new:]] ( [[:Identifier:]](\.[[:Identifier:]])*\.?)? [[:CARET:]]'                 
+    )
+
+    "
+    self flush
+    "
+
+    "Created: / 19-05-2014 / 11:56:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+patternDefinitionsForCompletion
+    ^ { 
+        #completeImport:                . '[[:import:]] ( [[:Identifier:]](\.[[:Identifier:]])*\.? )? [[:CARET:]]' .
+        #completeNew:                   . '[[:new:]] ( [[:Identifier:]](\.[[:Identifier:]])*\.?)? [[:CARET:]]' .
+        #completeLocalDef:              . '( ', PatternPrimitiveType , ' | ' , PatternReferenceType , ') [[:Identifier:]] [[:CARET:]]' .
+    }
+
+    "
+    self flush
+    "
+
+    "Created: / 19-05-2014 / 11:51:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !AbstractJavaCompletionEngineSimple class methodsFor:'queries'!
@@ -64,10 +102,19 @@
     "Modified: / 19-05-2014 / 11:23:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!AbstractJavaCompletionEngineSimple class methodsFor:'utilities'!
+
+flush
+    PatternsForAnalysis := PatternsForCompletion := nil.
+    self subclassesDo:[:each | each flush ].
+
+    "Created: / 19-05-2014 / 11:57:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !AbstractJavaCompletionEngineSimple methodsFor:'accessing'!
 
-completionPatterns
-    ^ self class completionPatterns
+patternsForCompletion
+    ^ self class patternsForCompletion
 
     "Created: / 14-05-2014 / 17:02:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
@@ -112,7 +159,7 @@
 
     stream := TokenStream on: (self scannerClass for: line string) cursor: col - 1.
     anyMatched := false.
-    self completionPatterns keysAndValuesDo:[ :pattern :action |
+    self patternsForCompletion keysAndValuesDo:[ :action :pattern |
         | matcher |
 
         stream position: 0. "/ Reset the position
@@ -160,7 +207,7 @@
     ^ result
 
     "Created: / 02-10-2013 / 13:55:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 18-05-2014 / 10:53:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 19-05-2014 / 11:46:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 completeImport: match
@@ -176,6 +223,12 @@
     "Modified: / 18-05-2014 / 21:39:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+completeLocalDef: match
+    "Nothing to so here. Mainly to inhibit local variable/field completion here"
+
+    "Created: / 19-05-2014 / 12:34:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 completeLocalOrFieldIn: tokens before: caretTokenIndex
     self addVariables
 
@@ -377,3 +430,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+AbstractJavaCompletionEngineSimple initialize!
--- a/SmallSense__GroovyCompletionEngineSimple.st	Mon May 19 11:25:44 2014 +0100
+++ b/SmallSense__GroovyCompletionEngineSimple.st	Mon May 19 12:49:07 2014 +0100
@@ -10,6 +10,22 @@
 !
 
 
+!GroovyCompletionEngineSimple class methodsFor:'accessing-definitions'!
+
+patternDefinitionsForCompletion
+    
+    ^super patternDefinitionsForCompletion , { 
+        #completeLocalDef:              . '( ', PatternPrimitiveType , ' | ' , PatternReferenceType , ' | [[:def:]] ) [[:Identifier:]] [[:CARET:]]' .
+    }
+
+    "
+    self flush.
+    self patternsForCompletion
+    "
+
+    "Created: / 19-05-2014 / 12:32:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GroovyCompletionEngineSimple methodsFor:'accessing-class'!
 
 scannerClass
--- a/abbrev.stc	Mon May 19 11:25:44 2014 +0100
+++ b/abbrev.stc	Mon May 19 12:49:07 2014 +0100
@@ -37,7 +37,7 @@
 SmallSense::Type SmallSense__Type jv:smallsense 'SmallSense-Smalltalk-Types' 0
 SmallSense::TypeHolder SmallSense__TypeHolder jv:smallsense 'SmallSense-Smalltalk-Types' 0
 jv_smallsense jv_smallsense jv:smallsense '* Projects & Packages *' 3
-SmallSense::AbstractJavaCompletionEngine SmallSense__AbstractJavaCompletionEngine jv:smallsense 'SmallSense-Java-Abstract' 0
+SmallSense::AbstractJavaCompletionEngine SmallSense__AbstractJavaCompletionEngine jv:smallsense 'SmallSense-Java' 0
 SmallSense::ClassInfo SmallSense__ClassInfo jv:smallsense 'SmallSense-Smalltalk-Types-Info' 0
 SmallSense::ClassPO SmallSense__ClassPO jv:smallsense 'SmallSense-Core-Interface-PO' 0
 SmallSense::ClassType SmallSense__ClassType jv:smallsense 'SmallSense-Smalltalk-Types' 0
@@ -55,16 +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::AbstractJavaCompletionEngineSimple SmallSense__AbstractJavaCompletionEngineSimple jv:smallsense 'SmallSense-Java-Abstract' 2
+SmallSense::AbstractJavaCompletionEngineSimple SmallSense__AbstractJavaCompletionEngineSimple jv:smallsense 'SmallSense-Java' 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' 2
 SmallSense::GroovyCompletionEngineSimple SmallSense__GroovyCompletionEngineSimple jv:smallsense 'SmallSense-Groovy' 2
+SmallSense::TestCase SmallSense__TestCase jv:smallsense 'SmallSense-Tests' 1
 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/jv_smallsense.st	Mon May 19 11:25:44 2014 +0100
+++ b/jv_smallsense.st	Mon May 19 12:49:07 2014 +0100
@@ -196,13 +196,15 @@
         #'SmallSense::MethodKeywordRestPO'
         #'SmallSense::JavaCompletionEngineSimple'
         #'SmallSense::GroovyCompletionEngineSimple'
+        (#'SmallSense::TestCase' autoload)
         (#'SmallSense::BaseTestClass' autoload)
         (#'SmallSense::FinderTests' autoload)
         (#'SmallSense::RecognizerTests' autoload)
         (#'SmallSense::SmalltalkParserTests' autoload)
-        (#'SmallSense::TestCase' autoload)
         (#'SmallSense::TokenPatternMatcherTests' autoload)
     )
+
+    "Modified: / 19-05-2014 / 12:44:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 extensionMethodNames
--- a/smallsense.rc	Mon May 19 11:25:44 2014 +0100
+++ b/smallsense.rc	Mon May 19 12:49:07 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", "Mon, 19 May 2014 10:24:19 GMT\0"
+      VALUE "ProductDate", "Mon, 19 May 2014 11:45:35 GMT\0"
     END
 
   END