SmallSense__SmalltalkInferencer.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 18 Jul 2014 07:01:21 +0100
changeset 252 feba6ee5c814
parent 249 8bc64027b189
child 254 3542abc630fa
permissions -rw-r--r--
Added copyright notice and license information (LGPL2)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     1
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     2
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     3
Copyright (C) 2013-2014 Jan Vrany
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     4
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     5
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     7
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     8
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     9
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    10
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    13
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    14
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    16
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    18
"
249
8bc64027b189 Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
    19
"{ Package: 'stx:goodies/smallsense' }"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: SmallSense }"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    23
Object subclass:#SmalltalkInferencer
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
    24
	instanceVariableNames:'type class classInfo source parser parserClass tree environment'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	classVariableNames:''
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:''
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    27
	category:'SmallSense-Smalltalk-Types-Inference'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
101
a300290bf8fc Classes renamed to better express theit purpose.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
    30
SmalltalkParseNodeVisitor subclass:#Phase1
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
	instanceVariableNames:'classInfo sends types'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	classVariableNames:''
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    33
	poolDictionaries:'SmallSense::SmalltalkInferencerParameters'
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    34
	privateIn:SmalltalkInferencer
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
101
a300290bf8fc Classes renamed to better express theit purpose.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
    37
SmalltalkParseNodeVisitor subclass:#Phase2
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
	instanceVariableNames:'classInfo'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
	classVariableNames:''
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
	poolDictionaries:''
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    41
	privateIn:SmalltalkInferencer
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    44
!SmalltalkInferencer class methodsFor:'documentation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    46
copyright
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    47
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    48
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    49
Copyright (C) 2013-2014 Jan Vrany
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    50
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    51
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    52
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    53
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    54
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    55
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    56
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    57
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    58
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    59
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    60
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    61
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    62
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    63
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    64
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    65
!
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    66
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
documentation
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    A heart of SmallSense - a type inferencer. For given class
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    and method source, instance of inferences walks the parse tree
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    and annotate each node with inferred type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    [author:]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
        Jan Vrany <jan.vrany@fit.cvut.cz>
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    [instance variables:]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    [class variables:]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    [see also:]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    86
!SmalltalkInferencer class methodsFor:'instance creation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
forClass: class methodSource: source
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    ^self new class: class source: source
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    "Created: / 26-11-2011 / 12:45:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
forClass: class selector: selector
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    ^self new class: class selector: selector.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    "Created: / 26-11-2011 / 12:44:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   102
forExpression: source
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   103
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   104
    ^self new expression: source.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   105
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   106
    "Created: / 04-10-2013 / 08:12:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   107
!
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   108
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
forMethod: method
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    ^self new method: method.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    "Created: / 26-11-2011 / 12:45:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   116
!SmalltalkInferencer methodsFor:'accessing'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   118
environment
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   119
    ^ environment
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   120
!
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   121
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   122
environment:something
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   123
    environment := something.
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   124
!
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   125
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
klass
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    ^ class
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    "Created: / 26-11-2011 / 17:30:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
manager
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
    ^Manager instance
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    "Created: / 27-11-2011 / 16:16:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
parser
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    ^ parser
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
parserClass
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
    ^ parserClass
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
parserClass:aClass
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    parserClass := aClass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
source
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    ^ source
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
tree
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
    ^ tree
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   159
!SmalltalkInferencer methodsFor:'initialization'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
class: cls selector: sel
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    | m |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    m := cls >> sel.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
    m isNil ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
        self error: 'No method found'.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
    self method: m.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    "Created: / 26-11-2011 / 12:47:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
class: cls source: src
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
121
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   175
    type isNil ifTrue:[ 
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   176
        "/ Guess...
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   177
        type := cls notNil ifTrue:[ #method ] ifFalse:[ #expression ]
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   178
    ].
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   179
    class := cls ? UndefinedObject.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    classInfo := self manager infoForClass: class.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    source := src.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
    "Created: / 26-11-2011 / 14:46:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
121
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   184
    "Modified: / 04-10-2013 / 08:31:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   185
!
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   186
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   187
expression: expression
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   188
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   189
    type := #expression.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   190
    self class: nil source: expression.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   191
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   192
    "Created: / 04-10-2013 / 08:14:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
method: method
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   197
    type := #method.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
    self class: method mclass source: method source.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
    "Created: / 26-11-2011 / 12:48:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   201
    "Modified: / 04-10-2013 / 08:13:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   204
!SmalltalkInferencer methodsFor:'private'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
infer
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
    Phase1 process: tree in: class.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    "
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    (SmallSenseParseNodeInspector new node: tree source: source) open
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    "
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
    "Created: / 26-11-2011 / 12:51:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
parse
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    parserClass isNil ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
        parserClass := class parserClass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
    ].
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   223
    type == #method ifTrue:[
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   224
        parser := parserClass 
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   225
                    parseMethod: source in: class
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   226
                    ignoreErrors:true 
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   227
                    ignoreWarnings:true.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   228
        tree := parser tree.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   229
    ] ifFalse:[
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   230
        type == #expression ifTrue:[
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   231
            parser := parserClass for: source.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   232
            tree := parser
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   233
                        parseExpressionWithSelf:nil 
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   234
                        notifying:nil 
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   235
                        ignoreErrors:false 
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   236
                        ignoreWarnings:false 
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   237
                        inNameSpace:nil.   
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   238
            parser tree: tree.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   239
        ].
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   240
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
    "Created: / 26-11-2011 / 12:51:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   243
    "Modified: / 04-10-2013 / 08:15:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   246
!SmalltalkInferencer methodsFor:'processing'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
process
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
    "Actually infer types. Returns an annotated method tree.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
     The tree is also stored in an instance variable, so it
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
     may be obtained form receiver any time by asking for #tree."
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
182
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   254
    [
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   255
        self parse. 
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   256
    ] on: Error do:[:ex|
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   257
        Transcript showCR: ex description.  
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   258
        ^ self.
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   259
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
    tree notNil ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
        self infer.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
    ^tree
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
    "Created: / 26-11-2011 / 12:50:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
182
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   266
    "Modified: / 21-03-2014 / 19:00:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   269
!SmalltalkInferencer::Phase1 methodsFor:'initialization'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
initialize
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
    "Invoked when a new instance is created."
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
    "/ please change as required (and remove this comment)
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
    sends := Dictionary new.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
    types := Dictionary new.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
    "/ super initialize.   -- commented since inherited method does nothing
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
    "Modified: / 26-11-2011 / 19:31:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   283
!SmalltalkInferencer::Phase1 methodsFor:'private'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
rootsUnderstanding: selectors
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
    "When the set of selectors is not empty, answer a set of the highest possible classes in the system that implement all the selectors.
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   287
     When the set of selectors is empty, return the empty set."
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
    | initialClasses nextClasses traverseStack next |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
    selectors isEmpty ifTrue: [^OrderedCollection new].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
    nextClasses := OrderedCollection with: Object.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
    traverseStack := OrderedCollection new: 1000.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
        
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
    selectors
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
        do:
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
            [:selector | 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
            initialClasses := nextClasses.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
            nextClasses := OrderedCollection new.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
            initialClasses
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
                do:
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
                    [:initialClass | 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
                    "inline canUnderstand: for performance"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
                    |cl|
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
                    cl := initialClass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
                    [(cl == nil) or: [(cl methodDictionary includesKey: selector)]] whileFalse: [cl := cl superclass].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
                    (cl == nil)
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
                        ifFalse: [nextClasses addLast: initialClass]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
                        ifTrue:
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
                            [|size|
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
                            traverseStack reset.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
                            traverseStack addLast: initialClass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
                            size := 1.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
                            "(traverseStack isEmpty) removed for performance"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
                            [size = 0]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
                                whileFalse:
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
                                    [
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
                                    "(traverseStack removeFirst) removed for performance"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
                                    next := traverseStack removeFirst.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
                                    size := size -1.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
                                    next
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
                                        subclassesDo:
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
                                            [:subcl |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
                                            "(subcl includesSelector: selector) removed for performance"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
                                            (subcl methodDictionary includesKey: selector)
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
                                                ifTrue: [nextClasses addLast: subcl]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
                                                ifFalse: [traverseStack addLast: subcl. size := size + 1]]]]]].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
    ^nextClasses
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
    "Modified: / 24-11-2010 / 14:39:35 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
    "Modified: / 26-11-2011 / 14:01:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   331
    "Modified (comment): / 18-09-2013 / 01:22:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   334
!SmalltalkInferencer::Phase1 methodsFor:'processing'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
process: tree in: cls
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
    self process: tree in: cls info: (Manager instance infoForClass: cls)
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
    "Created: / 26-11-2011 / 13:48:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   341
!
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   342
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   343
process: tree in: cls info: clsInfo
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   344
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   345
     | i c def prereqs |
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   346
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   347
    class := cls.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   348
    classInfo := clsInfo.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   349
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   350
    "Fill types with cached data..."
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   351
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   352
    c := class.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   353
    i := classInfo.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   354
    [ c notNil and:[i notNil] ] whileTrue:[
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   355
        c instVarNames do:[:nm|
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   356
            types at: nm put: (i infoForInstvar: nm)
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   357
        ].
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   358
        c := c superclass.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   359
        i := i superclassInfo.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   360
    ].
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   361
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   362
    self visit:tree.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   363
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   364
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   365
    prereqs := nil.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   366
    def := ProjectDefinition definitionClassForPackage: class package createIfAbsent: false.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   367
    def notNil ifTrue:[ 
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   368
        prereqs := def effectivePreRequisites.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   369
    ].
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   370
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   371
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   372
    "Now, infer variable types based on collected sends"
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   373
    sends keysAndValuesDo:[:varName :sentSelectors|
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   374
        (types includesKey: varName) ifTrue:[      
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   375
            | classes union |
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   376
            classes := (self rootsUnderstanding: sentSelectors) collect:[:each |  ClassType new klass: each ].
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   377
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   378
            prereqs notNil ifTrue:[
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   379
                "/ Make classes in packages on which method's package does **NOT** depend
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   380
                "/ less likely to be correct (by lowering their trustfullness)
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   381
                classes do:[:each |  
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   382
                    (prereqs includes: each klass package) ifTrue:[ 
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   383
                        each trustfullnessAdd: -20
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   384
                    ].
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   385
                ]
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   386
            ].
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   387
            union := UnionType new.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   388
            union addType: (types at: varName) type.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   389
            union addTypes: classes.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   390
            (types at: varName) type: union     
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   391
        ].
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   392
    ].
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   393
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   394
    "Created: / 27-11-2011 / 16:22:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   395
    "Modified (format): / 01-03-2014 / 23:19:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   396
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   397
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   398
!SmalltalkInferencer::Phase1 methodsFor:'visiting'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   399
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   400
visitAssignmentNode:anObject
95
78bcbdfd9361 Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   401
    | type |
78bcbdfd9361 Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   402
    
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
    self visit: anObject variable.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
    self visit: anObject expression.
95
78bcbdfd9361 Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   405
    type := anObject expression inferedType type.
78bcbdfd9361 Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   406
    type isUnknownType ifFalse:[
78bcbdfd9361 Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   407
         anObject variable inferedType union: type
78bcbdfd9361 Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   408
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
    "Created: / 26-11-2011 / 13:53:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
95
78bcbdfd9361 Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   411
    "Modified: / 18-09-2013 / 02:31:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
visitBlockNode:anObject
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   415
    | type |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   417
    super visitBlockNode:anObject.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   418
    type := (Type withClass: BlockClosure).
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
    type trustfullness: 100.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
    anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   421
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   422
    "Created: / 26-11-2011 / 14:46:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   425
visitConstantNode:anObject
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
    "Type of a constant is trivially its value class"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   428
    | type |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   430
    super visitConstantNode: anObject.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
    type := (Type withClass: anObject value class).
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
    type trustfullness: 100.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
    anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   435
    "Created: / 26-11-2011 / 13:55:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   436
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   437
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   438
visitMessageNode:anObject 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   439
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   440
    | rec |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   441
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
    super visitMessageNode: anObject.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   443
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   444
    (rec := anObject receiver) isVariableNode ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   445
        "We don't have to infer types for global/class variables"
119
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   446
        (rec isGlobalVariable or:[rec isClassVariable]) ifTrue:[
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   447
            "/ Check for pattern: `Smalltalk at: #ClassName`    
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   448
            (rec name = 'Smalltalk' and:[anObject arguments conform:[:node | node isConstant ] ]) ifTrue:[
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   449
                | result |    
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   450
125
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   451
                "Here, evaluate the node, but only for certain known selectors!!
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   452
                 (think of selector #exit :-) - you'll laugh, but it hit me back hard
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   453
                 couple times...
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   454
                "
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   455
                (#(	at: 
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   456
                	classNamed: 
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   457
                	"/ add more...
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   458
                ) includes:anObject selector) ifTrue:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   459
                	[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   460
		                result := anObject evaluate.
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   461
	                	result notNil ifTrue:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   462
		                    anObject inferedType: ((Type withClass: result class) trustfullness: 100)
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   463
		                ]
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   464
	                ] on: Error do:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   465
	                	"/pass
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   466
	                ]
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   467
	            ]
119
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   468
            ].
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   469
        ] ifFalse:[
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   470
            (sends at: rec name ifAbsentPut:[Set new]) add: anObject selector.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   471
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   473
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   474
    "Created: / 26-11-2011 / 13:02:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
119
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   475
    "Modified: / 04-10-2013 / 07:56:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   476
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   477
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   478
visitSelfNode:anObject
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   479
    | type |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
    super visitSelfNode:anObject.
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   482
    type := Type withClass: class.
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   483
    type trustfullness: 100.
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   484
    anObject inferedType:type
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   486
    "Created: / 26-11-2011 / 14:43:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   487
    "Modified: / 18-09-2013 / 01:25:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   488
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
visitSuperNode:anObject
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   491
    | type |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
    super visitSuperNode:anObject.
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   494
    type := Type withClass: class superclass.
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   495
    type trustfullness: 100.
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   496
    anObject inferedType:type
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
    "Created: / 26-11-2011 / 14:44:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   499
    "Modified: / 18-09-2013 / 01:26:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
visitUnaryNode:anObject 
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   504
    | type sel rec classes |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
    super visitUnaryNode:anObject.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
    sel := anObject selector.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
    sel == #class ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   511
        type := anObject receiver inferedType classSide.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
        anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
        ^self.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   514
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
    (sel == #new or:[sel == #basicNew]) ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
        rec := anObject receiver.                        
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
        (rec isSelf and:[class isMetaclass]) ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
            type := Type withClass: class theNonMetaclass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
            type trustfullnessAdd: 50.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
            anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
            ^self.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
        type := anObject receiver inferedType instanceSide.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   525
        anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
        ^self.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   529
    rec := anObject receiver.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   530
    classes := rec inferedType classes.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   531
    classes size == 1 ifTrue:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   532
        "/ Special hack for Java, when code is like
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   533
        "/ `JAVA java lang reflect` 
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   534
        classes anElement == JavaPackage class ifTrue:[
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   535
            (JAVA notNil and:[anObject selector first isUppercase]) ifTrue:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   536
                | jclass |
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   537
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   538
                "/ fetch an accessor...
125
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   539
                [
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   540
                    jclass := anObject evaluate. 
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   541
                    "/ fetch the class...
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   542
                    jclass := JavaVM classNamed: jclass fullName definedBy: JavaVM systemClassLoader.
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   543
                    jclass notNil ifTrue:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   544
                        anObject inferedType: (Type withClass: jclass class).
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   545
                    ] ifFalse:[
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   546
                        anObject inferedType: (Type withClass: JavaClass class).
125
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   547
                    ].
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   548
                ] on: Error do:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   549
                    "/ ignore...
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   550
                ]
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   551
            ] ifFalse:[
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   552
                anObject inferedType: (Type withClass: JavaPackage class).
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   553
            ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   554
        ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   555
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   556
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
    "Created: / 27-11-2011 / 15:49:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   558
    "Modified: / 08-10-2013 / 11:07:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
145
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   559
!
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   560
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   561
visitVariableNode:anObject
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   562
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   563
    | t |
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   564
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   565
    "Following code ensures, that all variable nodes refering same
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   566
     variable shares the inferred type"
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   567
    t := types at: anObject name ifAbsentPut:[Type unknown].
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   568
    anObject inferedType: t.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   569
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   570
    anObject isGlobalVariable ifTrue:[
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   571
        | global class |
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   572
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   573
        global := Smalltalk at: anObject name asSymbol.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   574
        "/ Special hack for JAVA - its actually a JavaPackage...
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   575
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   576
        global == (Smalltalk at: #JAVA) ifTrue:[
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   577
            global := JavaPackage
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   578
        ].
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   579
        class := global class.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   580
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   581
        global notNil ifTrue:[
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   582
            t addClass:  class.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   583
            t trustfullness: 100.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   584
        ].
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   585
        ^self.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   586
    ].
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   587
    anObject isClassVariable ifTrue:[
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   588
        t addClass: (class theNonMetaclass classVarAt: anObject name asSymbol) class.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   589
        t trustfullness: 100.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   590
        ^self.
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   591
    ].
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   592
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   593
    "Created: / 26-11-2011 / 13:31:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
94e4ee54e364 Oops, added lost method (#visitVariableNode:)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   594
    "Modified: / 26-10-2013 / 10:08:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   596
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   597
!SmalltalkInferencer::Phase2 methodsFor:'processing'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
process: tree in: cls
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
    self process: tree in: cls info: (Manager instance infoForClass: cls)
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
    "Created: / 26-11-2011 / 13:48:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
process: tree in: cls info: clsInfo
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   608
    class := cls.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   609
    classInfo := clsInfo.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   610
    self visit: tree.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   611
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   612
    "Created: / 27-11-2011 / 16:22:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   613
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   614
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   615
!SmalltalkInferencer class methodsFor:'documentation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   616
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   617
version_HG
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   618
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   619
    ^ '$Changeset: <not expanded> $'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   620
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   621
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   622
version_SVN
174
3e08d765d86f sync from current CVS head; fixed comment highlighting for STXEOLRule
Claus Gittinger
parents: 145
diff changeset
   623
    ^ '$Id: SmallSense__SmalltalkInferencer.st,v 1.2 2014/02/12 14:49:29 sr Exp $'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   624
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   625