rsense-core 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +1 -0
  5. data/README.md +35 -0
  6. data/Rakefile +84 -0
  7. data/TypeAnnotation.tokens +41 -0
  8. data/build.xml +84 -0
  9. data/build_lib/antlr-3.2.jar +0 -0
  10. data/lib/jars/ant-1.7.0.jar +0 -0
  11. data/lib/jars/ant-launcher-1.7.0.jar +0 -0
  12. data/lib/jars/antlr-runtime-3.2.jar +0 -0
  13. data/lib/jars/bsf-2.3.0.jar +0 -0
  14. data/lib/rsense-core.rb +28 -0
  15. data/lib/rsense.jar +0 -0
  16. data/lib/rsense/core.rb +5 -0
  17. data/lib/rsense/core/version.rb +5 -0
  18. data/lib/rsense/parser.rb +6 -0
  19. data/lib/rsense/ruby.rb +19 -0
  20. data/lib/rsense/typing.rb +13 -0
  21. data/lib/rsense/typing/annotation.rb +20 -0
  22. data/lib/rsense/typing/runtime.rb +23 -0
  23. data/lib/rsense/typing/vertex.rb +15 -0
  24. data/lib/rsense/util.rb +9 -0
  25. data/rsense-core.gemspec +30 -0
  26. data/src/org/cx4a/rsense/CodeAssist.java +744 -0
  27. data/src/org/cx4a/rsense/CodeAssistError.java +31 -0
  28. data/src/org/cx4a/rsense/CodeAssistResult.java +42 -0
  29. data/src/org/cx4a/rsense/CodeCompletionResult.java +65 -0
  30. data/src/org/cx4a/rsense/FindDefinitionResult.java +24 -0
  31. data/src/org/cx4a/rsense/LoadResult.java +19 -0
  32. data/src/org/cx4a/rsense/Main.java +916 -0
  33. data/src/org/cx4a/rsense/Options.java +353 -0
  34. data/src/org/cx4a/rsense/Project.java +103 -0
  35. data/src/org/cx4a/rsense/TypeInferenceResult.java +25 -0
  36. data/src/org/cx4a/rsense/WhereResult.java +19 -0
  37. data/src/org/cx4a/rsense/parser/TypeAnnotation.g +221 -0
  38. data/src/org/cx4a/rsense/parser/TypeAnnotationLexer.java +1759 -0
  39. data/src/org/cx4a/rsense/parser/TypeAnnotationParser.java +2025 -0
  40. data/src/org/cx4a/rsense/ruby/Block.java +10 -0
  41. data/src/org/cx4a/rsense/ruby/Context.java +75 -0
  42. data/src/org/cx4a/rsense/ruby/DynamicMethod.java +10 -0
  43. data/src/org/cx4a/rsense/ruby/DynamicScope.java +51 -0
  44. data/src/org/cx4a/rsense/ruby/Frame.java +95 -0
  45. data/src/org/cx4a/rsense/ruby/IRubyObject.java +17 -0
  46. data/src/org/cx4a/rsense/ruby/LocalScope.java +43 -0
  47. data/src/org/cx4a/rsense/ruby/MetaClass.java +50 -0
  48. data/src/org/cx4a/rsense/ruby/Ruby.java +242 -0
  49. data/src/org/cx4a/rsense/ruby/RubyClass.java +146 -0
  50. data/src/org/cx4a/rsense/ruby/RubyModule.java +255 -0
  51. data/src/org/cx4a/rsense/ruby/RubyObject.java +94 -0
  52. data/src/org/cx4a/rsense/ruby/Scope.java +7 -0
  53. data/src/org/cx4a/rsense/ruby/SpecialObject.java +15 -0
  54. data/src/org/cx4a/rsense/ruby/Visibility.java +17 -0
  55. data/src/org/cx4a/rsense/typing/Graph.java +1690 -0
  56. data/src/org/cx4a/rsense/typing/Propagation.java +73 -0
  57. data/src/org/cx4a/rsense/typing/Template.java +84 -0
  58. data/src/org/cx4a/rsense/typing/TemplateAttribute.java +158 -0
  59. data/src/org/cx4a/rsense/typing/TypeSet.java +48 -0
  60. data/src/org/cx4a/rsense/typing/annotation/ClassType.java +57 -0
  61. data/src/org/cx4a/rsense/typing/annotation/MethodType.java +79 -0
  62. data/src/org/cx4a/rsense/typing/annotation/TypeAnnotation.java +4 -0
  63. data/src/org/cx4a/rsense/typing/annotation/TypeAny.java +7 -0
  64. data/src/org/cx4a/rsense/typing/annotation/TypeApplication.java +37 -0
  65. data/src/org/cx4a/rsense/typing/annotation/TypeConstraint.java +29 -0
  66. data/src/org/cx4a/rsense/typing/annotation/TypeExpression.java +11 -0
  67. data/src/org/cx4a/rsense/typing/annotation/TypeIdentity.java +59 -0
  68. data/src/org/cx4a/rsense/typing/annotation/TypeOptional.java +22 -0
  69. data/src/org/cx4a/rsense/typing/annotation/TypePragma.java +22 -0
  70. data/src/org/cx4a/rsense/typing/annotation/TypeSplat.java +22 -0
  71. data/src/org/cx4a/rsense/typing/annotation/TypeTuple.java +35 -0
  72. data/src/org/cx4a/rsense/typing/annotation/TypeUnion.java +23 -0
  73. data/src/org/cx4a/rsense/typing/annotation/TypeVariable.java +44 -0
  74. data/src/org/cx4a/rsense/typing/runtime/AliasMethod.java +94 -0
  75. data/src/org/cx4a/rsense/typing/runtime/AnnotationHelper.java +69 -0
  76. data/src/org/cx4a/rsense/typing/runtime/AnnotationResolver.java +523 -0
  77. data/src/org/cx4a/rsense/typing/runtime/Array.java +84 -0
  78. data/src/org/cx4a/rsense/typing/runtime/ClassTag.java +27 -0
  79. data/src/org/cx4a/rsense/typing/runtime/DefaultMethod.java +115 -0
  80. data/src/org/cx4a/rsense/typing/runtime/Hash.java +131 -0
  81. data/src/org/cx4a/rsense/typing/runtime/LoopTag.java +21 -0
  82. data/src/org/cx4a/rsense/typing/runtime/Method.java +32 -0
  83. data/src/org/cx4a/rsense/typing/runtime/MonomorphicObject.java +77 -0
  84. data/src/org/cx4a/rsense/typing/runtime/ObjectAllocator.java +40 -0
  85. data/src/org/cx4a/rsense/typing/runtime/PolymorphicObject.java +90 -0
  86. data/src/org/cx4a/rsense/typing/runtime/Proc.java +100 -0
  87. data/src/org/cx4a/rsense/typing/runtime/RuntimeHelper.java +1339 -0
  88. data/src/org/cx4a/rsense/typing/runtime/SpecialMethod.java +119 -0
  89. data/src/org/cx4a/rsense/typing/runtime/TypeVarMap.java +112 -0
  90. data/src/org/cx4a/rsense/typing/runtime/VertexHolder.java +48 -0
  91. data/src/org/cx4a/rsense/typing/vertex/CallVertex.java +122 -0
  92. data/src/org/cx4a/rsense/typing/vertex/MultipleAsgnVertex.java +23 -0
  93. data/src/org/cx4a/rsense/typing/vertex/PassThroughVertex.java +20 -0
  94. data/src/org/cx4a/rsense/typing/vertex/SValueVertex.java +24 -0
  95. data/src/org/cx4a/rsense/typing/vertex/SplatVertex.java +24 -0
  96. data/src/org/cx4a/rsense/typing/vertex/ToAryVertex.java +24 -0
  97. data/src/org/cx4a/rsense/typing/vertex/TypeVarVertex.java +22 -0
  98. data/src/org/cx4a/rsense/typing/vertex/Vertex.java +221 -0
  99. data/src/org/cx4a/rsense/typing/vertex/YieldVertex.java +70 -0
  100. data/src/org/cx4a/rsense/util/HereDocReader.java +48 -0
  101. data/src/org/cx4a/rsense/util/Logger.java +111 -0
  102. data/src/org/cx4a/rsense/util/NodeUtil.java +198 -0
  103. data/src/org/cx4a/rsense/util/SourceLocation.java +70 -0
  104. data/src/org/cx4a/rsense/util/StringUtil.java +63 -0
  105. data/src/resources/org/cx4a/rsense/rsense.properties +1 -0
  106. data/stubs/1.8/_builtin.rb +3006 -0
  107. data/stubs/1.8/bigdecimal.rb +131 -0
  108. data/stubs/1.8/cgi.rb +257 -0
  109. data/stubs/1.8/date.rb +147 -0
  110. data/stubs/1.8/optparse.rb +113 -0
  111. data/stubs/1.8/rational.rb +47 -0
  112. data/stubs/1.8/set.rb +94 -0
  113. data/stubs/1.8/socket.rb +461 -0
  114. data/stubs/1.8/stringio.rb +129 -0
  115. data/test/data/a file.rb +1 -0
  116. data/test/data/benchmark.rb +12 -0
  117. data/test/data/crlf.rb +5 -0
  118. data/test/data/test.rb +19 -0
  119. data/test/script/all.rsense +2 -0
  120. data/test/script/array_dynamic.rsense +25 -0
  121. data/test/script/block_nested.rsense +7 -0
  122. data/test/script/builtin.rsense +785 -0
  123. data/test/script/class_method_partial_update.rsense +52 -0
  124. data/test/script/class_partial_update.rsense +17 -0
  125. data/test/script/find-definition.rsense +72 -0
  126. data/test/script/method_arg_onearg.rsense +6 -0
  127. data/test/script/method_arg_optional.rsense +7 -0
  128. data/test/script/method_partial_update.rsense +14 -0
  129. data/test/script/method_yield_arrayarg.rsense +8 -0
  130. data/test/script/method_yield_arrayarg_expand.rsense +8 -0
  131. data/test/script/method_yield_arrayarg_splat.rsense +17 -0
  132. data/test/script/misc.rsense +2 -0
  133. data/test/script/proc_higher_order.rsense +22 -0
  134. data/test/script/regression.rsense +95 -0
  135. data/test/script/stdlib.rsense +66 -0
  136. data/test/script/where.rsense +41 -0
  137. metadata +315 -0
@@ -0,0 +1,73 @@
1
+ package org.cx4a.rsense.typing;
2
+
3
+ import java.util.Set;
4
+ import java.util.HashSet;
5
+
6
+ import org.cx4a.rsense.typing.vertex.Vertex;
7
+
8
+ public class Propagation {
9
+ public final static int MAX_DEPTH = 10;
10
+
11
+ private Graph graph;
12
+ private Set<Object> visited;
13
+ private int depth;
14
+ private int refCount;
15
+
16
+ public Propagation(Graph graph) {
17
+ this.graph = graph;
18
+ this.depth = 0;
19
+ this.refCount = 0;
20
+ }
21
+
22
+ public Graph getGraph() {
23
+ return graph;
24
+ }
25
+
26
+ public boolean isVisited(Vertex vertex) {
27
+ return visited != null ? visited.contains(getVisitTag(vertex)) : false;
28
+ }
29
+
30
+ public void addVisited(Vertex vertex) {
31
+ if (visited == null) {
32
+ // lazy allocation
33
+ visited = new HashSet<Object>();
34
+ }
35
+ visited.add(getVisitTag(vertex));
36
+ }
37
+
38
+ public boolean checkVisited(Vertex vertex) {
39
+ if (isVisited(vertex)) {
40
+ return true;
41
+ } else {
42
+ addVisited(vertex);
43
+ return false;
44
+ }
45
+ }
46
+
47
+ public boolean visit(Vertex vertex, Vertex src) {
48
+ // Cut out deper branches.
49
+ // This makes results inprecise but also performace improved.
50
+ if (depth >= MAX_DEPTH) {
51
+ return false;
52
+ }
53
+
54
+ try {
55
+ depth++;
56
+ return vertex.accept(this, src);
57
+ } finally {
58
+ depth--;
59
+ }
60
+ }
61
+
62
+ public void retain() {
63
+ refCount++;
64
+ }
65
+
66
+ public boolean release() {
67
+ return --refCount == 0;
68
+ }
69
+
70
+ private Object getVisitTag(Vertex vertex) {
71
+ return vertex.getNode() != null ? vertex.getNode() : vertex;
72
+ }
73
+ }
@@ -0,0 +1,84 @@
1
+ package org.cx4a.rsense.typing;
2
+
3
+ import java.util.ArrayList;
4
+ import java.util.Map;
5
+
6
+ import org.cx4a.rsense.ruby.Frame;
7
+ import org.cx4a.rsense.ruby.Scope;
8
+ import org.cx4a.rsense.ruby.IRubyObject;
9
+ import org.cx4a.rsense.ruby.Block;
10
+ import org.cx4a.rsense.typing.runtime.Method;
11
+ import org.cx4a.rsense.typing.runtime.RuntimeHelper;
12
+ import org.cx4a.rsense.typing.runtime.MonomorphicObject;
13
+ import org.cx4a.rsense.typing.runtime.Proc;
14
+ import org.cx4a.rsense.typing.vertex.Vertex;
15
+ import org.cx4a.rsense.typing.vertex.YieldVertex;
16
+ import org.cx4a.rsense.typing.annotation.TypeVariable;
17
+
18
+ public class Template {
19
+ private Method method;
20
+ private TemplateAttribute attr;
21
+ private Vertex returnVertex;
22
+ private Frame frame;
23
+ private Scope scope;
24
+
25
+ public Template(Method method, Frame frame, Scope scope, TemplateAttribute attr) {
26
+ this.method = method;
27
+ this.attr = attr;
28
+ this.frame = frame;
29
+ this.scope = scope;
30
+ this.returnVertex = new Vertex();
31
+ }
32
+
33
+ public Method getMethod() {
34
+ return method;
35
+ }
36
+
37
+ public TemplateAttribute getAttribute() {
38
+ return attr;
39
+ }
40
+
41
+ public Vertex getReturnVertex() {
42
+ return returnVertex;
43
+ }
44
+
45
+ public Frame getFrame() {
46
+ return frame;
47
+ }
48
+
49
+ public Scope getScope() {
50
+ return scope;
51
+ }
52
+
53
+ public void reproduceSideEffect(Graph graph, IRubyObject receiver, IRubyObject[] args, Block block) {
54
+ reproduceSideEffect(graph, attr.getMutableReceiver(false), receiver);
55
+ for (int i = 0; i < attr.getArgs().length && i < args.length; i++) {
56
+ reproduceSideEffect(graph, attr.getMutableArg(i, false), args[i]);
57
+ }
58
+ reproduceYield(graph, receiver, args, block);
59
+ }
60
+
61
+ private void reproduceSideEffect(Graph graph, IRubyObject from, IRubyObject to) {
62
+ if (from instanceof MonomorphicObject && to instanceof MonomorphicObject) {
63
+ MonomorphicObject a = (MonomorphicObject) from;
64
+ MonomorphicObject b = (MonomorphicObject) to;
65
+ for (Map.Entry<TypeVariable, Vertex> entry : a.getTypeVarMap().entrySet()) {
66
+ Vertex src = entry.getValue();
67
+ Vertex dest = b.getTypeVarMap().get(entry.getKey());
68
+ if (dest != null) {
69
+ graph.propagateEdge(src, dest);
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ private void reproduceYield(Graph graph, IRubyObject receiver, IRubyObject[] args, Block block) {
76
+ Proc templateProc = (Proc) attr.getBlock();
77
+ if (templateProc != null && block != null) {
78
+ // Yield records may change during loop
79
+ for (YieldVertex vertex : new ArrayList<YieldVertex>(templateProc.getYields())) {
80
+ RuntimeHelper.yield(graph, new YieldVertex(vertex.getNode(), this, block, vertex.getArgsVertex(), vertex.getExpandArguments()));
81
+ }
82
+ }
83
+ }
84
+ }
@@ -0,0 +1,158 @@
1
+ package org.cx4a.rsense.typing;
2
+
3
+ import java.util.Arrays;
4
+
5
+ import org.cx4a.rsense.ruby.Block;
6
+ import org.cx4a.rsense.ruby.IRubyObject;
7
+ import org.cx4a.rsense.typing.runtime.PolymorphicObject;
8
+
9
+ public class TemplateAttribute {
10
+ private IRubyObject receiver;
11
+ private IRubyObject[] args;
12
+ private Block block;
13
+ private int hashCode = 0;
14
+
15
+ // For to keep original state of receiver and args
16
+ // See AnnotationResolver
17
+ private IRubyObject mutableReceiver;
18
+ private IRubyObject[] mutableArgs;
19
+
20
+ public TemplateAttribute(IRubyObject[] args) {
21
+ this.args = args;
22
+ }
23
+
24
+ public IRubyObject getReceiver() {
25
+ return receiver;
26
+ }
27
+
28
+ public void setReceiver(IRubyObject receiver) {
29
+ this.receiver = receiver;
30
+ }
31
+
32
+ public IRubyObject getArg(int i) {
33
+ return args[i];
34
+ }
35
+
36
+ public void setArg(int i, IRubyObject arg) {
37
+ args[i] = arg;
38
+ }
39
+
40
+ public IRubyObject[] getArgs() {
41
+ return args;
42
+ }
43
+
44
+ public Block getBlock() {
45
+ return block;
46
+ }
47
+
48
+ public void setBlock(Block block) {
49
+ this.block = block;
50
+ }
51
+
52
+ public IRubyObject getMutableReceiver() {
53
+ return getMutableReceiver(true);
54
+ }
55
+
56
+ public IRubyObject getMutableReceiver(boolean create) {
57
+ if (mutableReceiver == null && create) {
58
+ mutableReceiver = cloneObject(receiver);
59
+ }
60
+ return mutableReceiver;
61
+ }
62
+
63
+ public IRubyObject[] getMutableArgs() {
64
+ return getMutableArgs(true);
65
+ }
66
+
67
+ public IRubyObject[] getMutableArgs(boolean create) {
68
+ if (mutableArgs == null && create) {
69
+ mutableArgs = new IRubyObject[args.length];
70
+ for (int i = 0; i < args.length; i++) {
71
+ mutableArgs[i] = cloneObject(args[i]);
72
+ }
73
+ }
74
+ return mutableArgs;
75
+ }
76
+
77
+ public IRubyObject getMutableArg(int i) {
78
+ return getMutableArg(i, true);
79
+ }
80
+
81
+ public IRubyObject getMutableArg(int i, boolean create) {
82
+ IRubyObject[] args = getMutableArgs(create);
83
+ return args != null ? args[i] : null;
84
+ }
85
+
86
+ public TemplateAttribute clone() {
87
+ IRubyObject[] newargs = new IRubyObject[args.length];
88
+ System.arraycopy(args, 0, newargs, 0, args.length);
89
+ TemplateAttribute clone = new TemplateAttribute(newargs);
90
+ clone.receiver = receiver;
91
+ clone.block = block;
92
+ return clone;
93
+ }
94
+
95
+ private IRubyObject cloneObject(IRubyObject object) {
96
+ if (object instanceof PolymorphicObject) {
97
+ return ((PolymorphicObject) object).clone();
98
+ } else {
99
+ // immutable
100
+ return object;
101
+ }
102
+ }
103
+
104
+ @Override
105
+ public int hashCode() {
106
+ if (hashCode != 0)
107
+ return hashCode;
108
+
109
+ if (receiver != null)
110
+ hashCode = (hashCode ^ receiver.hashCode()) * 13;
111
+ for (IRubyObject arg : args) {
112
+ if (arg != null)
113
+ hashCode = (hashCode ^ arg.hashCode()) * 13;
114
+ }
115
+ if (block != null)
116
+ hashCode ^= (hashCode ^ block.hashCode()) * 13;
117
+ return hashCode;
118
+ }
119
+
120
+ @Override
121
+ public boolean equals(Object other) {
122
+ if (other == this) {
123
+ return true;
124
+ }
125
+
126
+ if (!(other instanceof TemplateAttribute)) {
127
+ return false;
128
+ }
129
+
130
+ TemplateAttribute o = (TemplateAttribute) other;
131
+
132
+ if (hashCode() != other.hashCode()
133
+ || ((receiver == null) ^ (o.receiver == null))
134
+ || (receiver != null && !receiver.equals(o.receiver))
135
+ || args.length != o.args.length
136
+ || (block != null
137
+ ? !block.equals(o.block)
138
+ : o.block != null
139
+ ? !o.block.equals(block)
140
+ : false)) {
141
+ return false;
142
+ }
143
+
144
+ for (int i = 0; i < args.length; i++) {
145
+ if (((args[i] == null) ^ (o.args[i] == null))
146
+ || (args[i] != null && !args[i].equals(o.args[i]))) {
147
+ return false;
148
+ }
149
+ }
150
+
151
+ return true;
152
+ }
153
+
154
+ @Override
155
+ public String toString() {
156
+ return "<TemplAttr " + receiver.toString() + " " + Arrays.asList(args).toString() + (block != null ? (" " + block.toString() + ">") : ">");
157
+ }
158
+ }
@@ -0,0 +1,48 @@
1
+ package org.cx4a.rsense.typing;
2
+
3
+ import java.util.Collection;
4
+ import java.util.HashSet;
5
+
6
+ import org.cx4a.rsense.ruby.IRubyObject;
7
+
8
+ public class TypeSet extends HashSet<IRubyObject> {
9
+ private static final long serialVersionUID = 0L;
10
+
11
+ public static final TypeSet EMPTY = new TypeSet() {
12
+ private static final long serialVersionUID = 0L;
13
+ @Override
14
+ public boolean add(IRubyObject type) {
15
+ throw new UnsupportedOperationException();
16
+ }
17
+ @Override
18
+ public boolean addAll(Collection<? extends IRubyObject> types) {
19
+ throw new UnsupportedOperationException();
20
+ }
21
+ };
22
+
23
+ public TypeSet() {
24
+ super();
25
+ }
26
+
27
+ public TypeSet(TypeSet other) {
28
+ super(other);
29
+ }
30
+
31
+ public TypeSet(int capacity) {
32
+ super(capacity);
33
+ }
34
+
35
+ @Override
36
+ public int hashCode() {
37
+ return hashCode(1);
38
+ }
39
+
40
+ public int hashCode(int depth) {
41
+ int code = 0;
42
+ for (IRubyObject type : this) {
43
+ code ^= type.hashCode(depth);
44
+ code *= 13;
45
+ }
46
+ return code;
47
+ }
48
+ }
@@ -0,0 +1,57 @@
1
+ package org.cx4a.rsense.typing.annotation;
2
+
3
+ import java.util.List;
4
+
5
+ public class ClassType implements TypeAnnotation {
6
+ private String name;
7
+ private List<TypeVariable> types;
8
+ private List<TypeConstraint> constraints;
9
+ private List<TypePragma> pragmas;
10
+
11
+ public ClassType(String name, List<TypeVariable> types, List<TypeConstraint> constraints, List<TypePragma> pragmas) {
12
+ this.name = name;
13
+ this.types = types;
14
+ this.constraints = constraints;
15
+ this.pragmas = pragmas;
16
+ }
17
+
18
+ public String getName() {
19
+ return name;
20
+ }
21
+
22
+ public List<TypeVariable> getTypes() {
23
+ return types;
24
+ }
25
+
26
+ public List<TypeConstraint> getConstraints() {
27
+ return constraints;
28
+ }
29
+
30
+ public List<TypePragma> getPragmas() {
31
+ return pragmas;
32
+ }
33
+
34
+ public boolean containsType(TypeVariable type) {
35
+ return types != null && types.indexOf(type) != -1;
36
+ }
37
+
38
+ public boolean isNoBody() {
39
+ if (pragmas != null) {
40
+ for (TypePragma pragma : pragmas) {
41
+ if (pragma.getType() == TypeExpression.Type.NOBODY_PRAGMA) {
42
+ return true;
43
+ }
44
+ }
45
+ }
46
+ return false;
47
+ }
48
+
49
+ public boolean isPolymorphic() {
50
+ return types != null;
51
+ }
52
+
53
+ @Override
54
+ public String toString() {
55
+ return "<ClassType " + name + " " + types + " " + constraints + " " + pragmas + ">";
56
+ }
57
+ }
@@ -0,0 +1,79 @@
1
+ package org.cx4a.rsense.typing.annotation;
2
+
3
+ import java.util.List;
4
+
5
+ public class MethodType implements TypeAnnotation {
6
+ private String name;
7
+ private List<TypeVariable> types;
8
+ private List<TypeConstraint> consList;
9
+ private Signature sig;
10
+
11
+ public MethodType(String name, List<TypeVariable> types, List<TypeConstraint> consList, Signature sig) {
12
+ this.name = name;
13
+ this.types = types;
14
+ this.consList = consList;
15
+ this.sig = sig;
16
+ }
17
+
18
+ public String getName() {
19
+ return name;
20
+ }
21
+
22
+ public List<TypeVariable> getTypes() {
23
+ return types;
24
+ }
25
+
26
+ public List<TypeConstraint> getConstraints() {
27
+ return consList;
28
+ }
29
+
30
+ public Signature getSignature() {
31
+ return sig;
32
+ }
33
+
34
+ public static class Block {
35
+ private Signature sig;
36
+
37
+ public Block(Signature sig) {
38
+ this.sig = sig;
39
+ }
40
+
41
+ public Signature getSignature() {
42
+ return sig;
43
+ }
44
+ }
45
+
46
+ public static class Signature {
47
+ private TypeExpression argType;
48
+ private Block block;
49
+ private TypeExpression returnType;
50
+
51
+ public Signature(TypeExpression argType, Block block, TypeExpression returnType) {
52
+ this.argType = argType;
53
+ this.block = block;
54
+ this.returnType = returnType;
55
+ }
56
+
57
+ public TypeExpression getArgType() {
58
+ return argType;
59
+ }
60
+
61
+ public Block getBlock() {
62
+ return block;
63
+ }
64
+
65
+ public TypeExpression getReturnType() {
66
+ return returnType;
67
+ }
68
+
69
+ @Override
70
+ public String toString() {
71
+ return "<Signature " + argType + " " + block + " " + returnType + ">";
72
+ }
73
+ }
74
+
75
+ @Override
76
+ public String toString() {
77
+ return "<MethodType " + name + " " + sig + ">";
78
+ }
79
+ }