Local/inner types

This commit is contained in:
Andrey Breslav
2010-12-10 17:20:10 +03:00
parent 8c650f7f00
commit f9eb67c0a1
8 changed files with 53 additions and 4 deletions
+3
View File
@@ -3,6 +3,9 @@
<component name="DependencyValidationManager"> <component name="DependencyValidationManager">
<option name="SKIP_IMPORT_STATEMENTS" value="false" /> <option name="SKIP_IMPORT_STATEMENTS" value="false" />
</component> </component>
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="JavadocGenerationManager"> <component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" /> <option name="OUTPUT_DIRECTORY" />
<option name="OPTION_SCOPE" value="protected" /> <option name="OPTION_SCOPE" value="protected" />
+3
View File
@@ -11,6 +11,7 @@
<option name="SMART_TABS" value="false" /> <option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" /> <option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" /> <option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS> </ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="java"> <ADDITIONAL_INDENT_OPTIONS fileType="java">
<option name="INDENT_SIZE" value="4" /> <option name="INDENT_SIZE" value="4" />
@@ -20,6 +21,7 @@
<option name="SMART_TABS" value="false" /> <option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" /> <option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" /> <option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS> </ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="xml"> <ADDITIONAL_INDENT_OPTIONS fileType="xml">
<option name="INDENT_SIZE" value="4" /> <option name="INDENT_SIZE" value="4" />
@@ -29,6 +31,7 @@
<option name="SMART_TABS" value="false" /> <option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" /> <option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" /> <option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS> </ADDITIONAL_INDENT_OPTIONS>
</value> </value>
</option> </option>
+1 -1
View File
@@ -5,7 +5,7 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content> </content>
<orderEntry type="jdk" jdkName="1.6" jdkType="JavaSDK" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>
+31
View File
@@ -0,0 +1,31 @@
virtual class Builder<E, R> {
[operator] fun plusAssign(item : E)
fun result() : R
}
virtual class Buildable {
fun newBuilder<E, R>() : Builder<E, R>
}
class List<T> {
class object Buildable {
override fun newBuilder<E, R>() : Builder<E, R>
}
}
extension Map<E> for T
where
T : Iterable<E>,
class object T : Buildable<E, T> {
fun map<R>(f : {(E) : R}) : T<R> = {
val builder = T.newBuilder()
for (e in this) {
builder += f(e)
}
builder.result()
}
}
+2
View File
@@ -37,6 +37,8 @@ memberDeclaration
: function : function
: property : property
: class : class
: extension
: typedef
; ;
classObject classObject
+3
View File
@@ -33,6 +33,9 @@ literalConstant
declaration declaration
: function : function
: property : property
: extension
: class
: typedef
; ;
expressionWithPrecedences // See the precedence table, everything associates to the left expressionWithPrecedences // See the precedence table, everything associates to the left
+1 -2
View File
@@ -43,5 +43,4 @@ parameterKind
: "lazy" : "lazy"
: "out" : "out"
: "ref" : "ref"
; ;
+9 -1
View File
@@ -17,7 +17,15 @@ type
; ;
userType userType
: SimpleName{"."} ("<" (modifiers type){","} ">")? : (SimpleName ".")* simpleUserType{"."}
;
simpleUserType
: SimpleName ("<" (optionalProjection type){","} ">")?
;
optionalProjection
: modifiers
; ;
functionType functionType