--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stx_goodies_smallsense.st Wed Jul 09 12:06:40 2014 +0100
@@ -0,0 +1,417 @@
+"{ Package: 'stx:goodies/smallsense' }"
+
+LibraryDefinition subclass:#stx_goodies_smallsense
+ instanceVariableNames:''
+ classVariableNames:'Swizzled'
+ poolDictionaries:''
+ category:'* Projects & Packages *'
+!
+
+
+!stx_goodies_smallsense class methodsFor:'initialization'!
+
+initialize
+
+ "This should be logically done in postload, but postload
+ is not called when classlibrary is built-in (i.e., not loaded
+ by Smalltalk loadPackage: ...). This is indeed a bug. "
+
+ Swizzled := false.
+ self hasAllExtensionsLoaded ifTrue:[
+ self swizzle
+ ].
+
+ "Created: / 19-08-2013 / 15:24:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-09-2013 / 12:29:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!stx_goodies_smallsense class methodsFor:'accessing - tests'!
+
+excludedFromTestSuite
+ "List of testcases and/or tests excluded from testsuite.
+ Entries maybe ClassName or #(ClassName testName)
+ "
+ ^ #(
+ #'SmallSense::BaseTestClass'
+ #'SmallSense::TestCase'
+ #'SmallSense::FinderTests'
+ #'SmallSense::RecognizerTests'
+ #'SmallSense::SmalltalkParserTests'
+ )
+
+ "Created: / 23-05-2014 / 12:49:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!stx_goodies_smallsense class methodsFor:'description'!
+
+excludedFromPreRequisites
+ "list all packages which should be ignored in the automatic
+ preRequisites scan. See #preRequisites for more."
+
+ ^ #(
+ )
+!
+
+mandatoryPreRequisites
+ "list packages which are mandatory as a prerequisite.
+ This are packages containing superclasses of my classes and classes which
+ are extended by myself.
+ They are mandatory, beacuse we need these packages as a prerequisite for loading and compiling.
+ This method is generated automatically,
+ by searching along the inheritance chain of all of my classes."
+
+ ^ #(
+ #'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::AbstractJavaCompletionEngineTests "
+ #'stx:libbasic' "Collection - extended "
+ #'stx:libcomp' "AbstractSyntaxHighlighter - superclass of SmallSense::SmalltalkParser "
+ #'stx:libhtml' "HTMLDocumentFrame - extended "
+ #'stx:libtool' "AbstractSettingsApplication - superclass of SmallSense::SettingsAppl "
+ #'stx:libview' "DeviceGraphicsContext - extended "
+ #'stx:libview2' "ApplicationModel - extended "
+ #'stx:libwidg' "EditTextView - extended "
+ #'stx:libwidg2' "DoWhatIMeanSupport - extended "
+ )
+!
+
+referencedPreRequisites
+ "list packages which are a prerequisite, because they contain
+ classes which are referenced by my classes.
+ We do not need these packages as a prerequisite for loading or compiling.
+ This method is generated automatically,
+ by searching all classes (and their packages) which are referenced by my classes."
+
+ ^ #(
+ #'stx:goodies/refactoryBrowser/parser' "RBFormatter - referenced by SmallSense::SmalltalkEditSupport>>electricInsertSnippetAfterDoubleColon "
+ #'stx:libbasic2' "BackgroundQueueProcessingJob - referenced by SmallSense::Manager>>initialize "
+ #'stx:libbasic3' "ChangeSet - referenced by RBTransformationRule>>fixes: "
+ #'stx:libjava' "Java - referenced by SmallSense::JavaCompletionEngineEnvironmentResource>>tearDown "
+ #'stx:libjava/tools' "GroovyScanner - referenced by SmallSense::GroovyCompletionEngineSimple>>scannerClass "
+ )
+!
+
+subProjects
+ "list packages which are known as subprojects.
+ The generated makefile will enter those and make there as well.
+ However: they are not forced to be loaded when a package is loaded;
+ for those, redefine requiredPrerequisites"
+
+ ^ #(
+ )
+! !
+
+!stx_goodies_smallsense class methodsFor:'description - actions'!
+
+postLoadAction
+
+ "/ Setup SmallSense completion
+ UserPreferences current at: #searchCompletionBlock put: #SmallSense.
+
+ "/ Swizzle methods. Note, that if they are already swizzled,
+ "/ self swizzle is noop.
+ self swizzle.
+
+ "Created: / 02-09-2013 / 12:30:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (comment): / 25-11-2013 / 12:31:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!stx_goodies_smallsense class methodsFor:'description - compilation'!
+
+additionalRules_bc_dot_mak
+ "obsolete - kept for compatibility with old project files"
+
+ ^ '
+# HACK to make it compilable under CVS stx:libtool
+$(INCLUDE_TOP)\stx\libtool\Tools__NavigationState.$(H): $(INCLUDE_TOP)\stx\libtool\Tools_NavigationState.$(H)
+ copy $(INCLUDE_TOP)\stx\libtool\Tools_NavigationState.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NavigationState.$(H)
+'
+
+ "Created: / 04-09-2013 / 08:28:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+additionalRules_make_dot_proto
+ "allows for additional rules to be added to the make.proto file."
+
+ ^ '
+# HACK to make it compilable under CVS stx:libtool
+$(INCLUDE_TOP)/stx/libtool/Tools__NavigationState.$(H): $(INCLUDE_TOP)/stx/libtool/Tools_NavigationState.$(H)
+ ln -s $(INCLUDE_TOP)/stx/libtool/Tools_NavigationState.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NavigationState.$(H)
+'
+
+ "Created: / 04-09-2013 / 08:02:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!stx_goodies_smallsense class methodsFor:'description - contents'!
+
+classNamesAndAttributes
+ "lists the classes which are to be included in the project.
+ Each entry in the list may be: a single class-name (symbol),
+ or an array-literal consisting of class name and attributes.
+ Attributes are: #autoload or #<os> where os is one of win32, unix,..."
+
+ ^ #(
+ "<className> or (<className> attributes...) in load order"
+ (#'SmallSense::BaseTestClass' autoload)
+ #'SmallSense::CodeHighlightingService'
+ #'SmallSense::CodeNavigationService'
+ #'SmallSense::CompletionContext'
+ #'SmallSense::CompletionController'
+ #'SmallSense::CompletionEngine'
+ (#'SmallSense::CompletionEngineTests' autoload)
+ #'SmallSense::CompletionResult'
+ #'SmallSense::CompletionView'
+ #'SmallSense::CriticsWindow'
+ #'SmallSense::EditService'
+ #'SmallSense::EditSupport'
+ #'SmallSense::Info'
+ (#'SmallSense::JavaCompletionEngineEnvironmentResource' autoload)
+ #'SmallSense::Manager'
+ #'SmallSense::PO'
+ #'SmallSense::ParseTreeIndex'
+ #'SmallSense::ParseTreeIndexEntry'
+ #'SmallSense::ParseTreeInspector'
+ #'SmallSense::SelectorNode'
+ #'SmallSense::SettingsAppl'
+ #'SmallSense::SmalltalkChecker'
+ #'SmallSense::SmalltalkInferencerParameters'
+ #'SmallSense::SmalltalkLintAnnotation'
+ #'SmallSense::SmalltalkLintHighlighter'
+ #'SmallSense::SmalltalkLintService'
+ #'SmallSense::SmalltalkParseNodeVisitor'
+ #'SmallSense::SmalltalkParser'
+ #'SmallSense::SmalltalkQuickFixer'
+ #'SmallSense::SmalltalkSyntaxHighlighter'
+ #'SmallSense::SmalltalkUnacceptedMethodEnvironment'
+ (#'SmallSense::TestCase' autoload)
+ #'SmallSense::TokenPatternMatcher'
+ (#'SmallSense::TokenPatternMatcherTests' autoload)
+ #'SmallSense::TokenPatternParser'
+ #'SmallSense::TokenPatternToken'
+ #'SmallSense::TokenPatternTokenSet'
+ #'SmallSense::TokenStream'
+ #'SmallSense::Type'
+ #'SmallSense::TypeHolder'
+ #'stx_goodies_smallsense'
+ #'SmallSense::AbstractJavaCompletionEngine'
+ (#'SmallSense::AbstractJavaCompletionEngineTests' autoload)
+ #'SmallSense::ClassInfo'
+ #'SmallSense::ClassPO'
+ #'SmallSense::ClassType'
+ #'SmallSense::ConstantPO'
+ (#'SmallSense::FinderTests' autoload)
+ #'SmallSense::GenericEditSupport'
+ #'SmallSense::JavaEditSupport'
+ #'SmallSense::JavaImportPO'
+ #'SmallSense::MethodInfo'
+ #'SmallSense::MethodPO'
+ (#'SmallSense::RecognizerTests' autoload)
+ #'SmallSense::SmalltalkCompletionEngine'
+ #'SmallSense::SmalltalkEditSupport'
+ #'SmallSense::SmalltalkInferencer'
+ #'SmallSense::SmalltalkParseNodeFinder'
+ (#'SmallSense::SmalltalkParserTests' autoload)
+ #'SmallSense::SnippetPO'
+ #'SmallSense::UnionType'
+ #'SmallSense::UnknownType'
+ #'SmallSense::VariablePO'
+ #'SmallSense::AbstractJavaCompletionEngineSimple'
+ (#'SmallSense::GroovyCompletionEngineSimpleTests' autoload)
+ #'SmallSense::GroovyEditSupport'
+ #'SmallSense::JavaCompletionEngine'
+ #'SmallSense::JavaConstructorPO'
+ #'SmallSense::MethodKeywordRestPO'
+ #'SmallSense::JavaCompletionEngineSimple'
+ #'SmallSense::GroovyCompletionEngineSimple'
+ )
+!
+
+extensionMethodNames
+ "list class/selector pairs of extensions.
+ A correponding method with real names must be present in my concrete subclasses"
+
+ ^ #(
+ ParseNode isSelector
+ AssignmentNode childNamesAndValuesDo:
+ AssignmentNode inferedType
+ AssignmentNode inferedType:
+ MessageNode childNamesAndValuesDo:
+ ParseErrorNode childNamesAndValuesDo:
+ ParseNode childNamesAndValuesDo:
+ ParseNode inferedType
+ ParseNode inferedType:
+ PrimaryNode childNamesAndValuesDo:
+ StatementNode childNamesAndValuesDo:
+ StatementNode inferedType
+ StatementNode inferedType:
+ UserPreferences smallSenseEnabled
+ UserPreferences smallSenseEnabled:
+ VariableNode isGlobalOrPrivateClass
+ 'ConfigurableFeatures class' hasSmallSenseEnabled
+ UserPreferences smallSenseBackgroundLintEnabled
+ UserPreferences smallSenseBackgroundLintEnabled:
+ RBLintRule fixes:
+ RBTransformationRule fixes:
+ UserPreferences smallSenseBackgroundTypingEnabled
+ UserPreferences smallSenseBackgroundTypingEnabled:
+ HTMLDocumentView doQuickFix:
+ 'Tools::CodeHighlightingService class' new
+ DoWhatIMeanSupport smallSenseCodeCompletionForClass:context:codeView:
+ #'Tools::NavigationState' smallSenseSelectedClasses
+ 'Tools::CodeCompletionService class' smallSenseIsUsefulFor:
+ BlockNode childNamesAndValuesDo:
+ 'Tools::CodeNavigationService class' new
+ 'Workspace class' smallSenseCodeCompletionServiceClass
+ ParseNode navigateToUsing:
+ MessageNode navigateToUsing:
+ VariableNode navigateToUsing:
+ EditTextView autoIndent
+ #'Tools::NewSystemBrowser' #'searchCompletionBlock_SmallSense'
+ #'Tools::NewSystemBrowser' smallSenseSearchCompletion:
+ #'Tools::NewSystemBrowser' smallSenseSearchCompletionBlock
+ #'Tools::NewSystemBrowser' smallSenseSearchCompletionEntryForClass:showPrefix:
+ #'Tools::NewSystemBrowser' smallSenseSearchCompletionNewForClass:
+ PrimitiveNode inferedType
+ UserPreferences smallSenseCompleteIfUnambiguous
+ UserPreferences smallSenseCompleteIfUnambiguous:
+ UserPreferences smallSenseCompletionEnabled
+ UserPreferences smallSenseCompletionEnabled:
+ Method inspector2TabParseTreeInspector
+ Method inspector2Tabs
+ ReturnNode childNamesAndValuesDo:
+ )
+! !
+
+!stx_goodies_smallsense class methodsFor:'description - project information'!
+
+applicationIconFileName
+ "Return the name (without suffix) of an icon-file (the app's icon); will be included in the rc-resource file"
+
+ ^ nil
+ "/ ^ self applicationName
+!
+
+companyName
+ "Return a companyname which will appear in <lib>.rc"
+
+ ^ 'eXept Software AG'
+!
+
+description
+ "Return a description string which will appear in vc.def / bc.def"
+
+ ^ 'Smalltalk/X Class library'
+!
+
+legalCopyright
+ "Return a copyright string which will appear in <lib>.rc"
+
+ ^ 'Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011'
+!
+
+productName
+ "Return a product name which will appear in <lib>.rc"
+
+ ^ 'Smalltalk/X'
+! !
+
+!stx_goodies_smallsense class methodsFor:'description - svn'!
+
+svnRepositoryUrlString
+ "Return a SVN repository URL of myself.
+ (Generated since 2011-04-08)
+ "
+
+ ^ '$URL: https://vranyj1@swing.fit.cvut.cz/svn/stx/libtool/branches/jv/smallsense/stx_goodies_smallsense.st $'
+!
+
+svnRevisionNr
+ "Return a SVN revision number of myself.
+ This number is updated after a commit"
+
+ ^ "$SVN-Revision:"'7962 '"$"
+! !
+
+!stx_goodies_smallsense class methodsFor:'swizzling'!
+
+swizzle
+ "Swizzle all methods annotated as <swizzle:>"
+
+ Swizzled ifTrue:[ ^ self ].
+ [
+ self extensionMethods do:[:m|self swizzle: m].
+ Swizzled := true.
+ ] on: Error do:[:ex |
+ Logger log: ('Cannot swizzle: %1' bindWith: ex description) severity: #error
+ ].
+
+
+ "
+ stx_goodies_smallsense swizzle
+ "
+
+ "Created: / 19-08-2013 / 14:54:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-09-2013 / 12:30:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+swizzle: method
+ "Swizzle the method if it is annotated by <swizzle:> annotation"
+
+ | annotation |
+
+ [
+ annotation := method annotationAt: #swizzle:.
+ annotation notNil ifTrue:[
+ self swizzle: method as: (annotation argumentAt: 1).
+ ]
+ ] on: Error do:[:ex|
+ Logger log: ('Cannot swizzle %1: %2' bindWith: method with: ex description) severity: #error
+ ]
+
+ "Created: / 19-08-2013 / 14:53:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+swizzle: originalMethod as: selector
+ "Given an extension method, swizzle it into method's class
+ under given selector."
+
+ | cls overwrittenMethod swizzledMethod |
+
+ cls := originalMethod mclass.
+ overwrittenMethod := cls compiledMethodAt: selector.
+ overwrittenMethod isNil ifTrue:[
+ "/ Oops, method gone?
+ self breakPoint: #jv.
+ ^ self.
+ ].
+
+ self assert: originalMethod numArgs == overwrittenMethod numArgs.
+
+ swizzledMethod := originalMethod copy.
+ "/ Now, fake the package and source of swizzled method
+ "/ so on fileout, original code gets filed out.
+ swizzledMethod setPackage: overwrittenMethod package.
+ swizzledMethod setCategory: overwrittenMethod category.
+ swizzledMethod source: overwrittenMethod source.
+
+ "/ Install the swizzled method
+ cls methodDictionary at: selector put: swizzledMethod
+
+ "Created: / 19-08-2013 / 14:01:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 19-08-2013 / 15:03:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!stx_goodies_smallsense class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+!
+
+version_SVN
+ ^ '$Id: stx_goodies_smallsense.st,v 1.2 2014/02/12 14:49:29 sr Exp $'
+! !
+
+
+stx_goodies_smallsense initialize!