提交 16dcbd41 编写于 作者: A Andrey Breslav

"trait" instead of "trait class"

 virtual -> open
 "final" introduced
 "wraps" dropped
上级 704a8765
......@@ -127,7 +127,7 @@ public interface JetTokens {
JetKeywordToken GET_KEYWORD = JetKeywordToken.softKeyword("get");
JetKeywordToken SET_KEYWORD = JetKeywordToken.softKeyword("set");
JetKeywordToken ABSTRACT_KEYWORD = JetKeywordToken.softKeyword("abstract");
JetKeywordToken VIRTUAL_KEYWORD = JetKeywordToken.softKeyword("virtual");
JetKeywordToken VIRTUAL_KEYWORD = JetKeywordToken.softKeyword("open");
JetKeywordToken ENUM_KEYWORD = JetKeywordToken.softKeyword("enum");
JetKeywordToken OPEN_KEYWORD = JetKeywordToken.softKeyword("open");
JetKeywordToken ATTRIBUTE_KEYWORD = JetKeywordToken.softKeyword("attribute");
......
......@@ -21,7 +21,7 @@ fun countOnes(x : INumber) = if (x == 0) 0 else mostSignificantBit(x) + countOne
fun Int.matchMask(mask : Int) = this and mask == mask
virtual class INumber<T : this> : IComparable<T> {
open class INumber<T : this> : IComparable<T> {
val bits : Int
[operator] fun plus(other : T) : T
[operator] fun shl(bits : Int) : T
......
virtual class IPushPop<T> {
open class IPushPop<T> {
val isEmpty : Boolean
fun push(item : T)
fun pop() : T
......
virtual class Builder<E, R> {
open class Builder<E, R> {
[operator] fun plusAssign(item : E)
fun result() : R
}
virtual class Buildable {
open class Buildable {
fun newBuilder<E, R>() : Builder<E, R>
}
......
......@@ -2,11 +2,11 @@
These declarations are "shallow" in the sense that they are not really compiled, only the type-checker uses them
*/
virtual class ReadOnlyArray<out T> : ISized {
open class ReadOnlyArray<out T> : ISized {
[operator] fun get(index : Int) : T
}
virtual class WriteOnlyArray<in T> : ISized { // This is needed to keep IIterator's <T> covariant
open class WriteOnlyArray<in T> : ISized { // This is needed to keep IIterator's <T> covariant
[operator] fun set(index : Int, value : T)
}
......
virtual class IEquality {
open class IEquality {
fun equals(other : Any) : Boolean
= (this as java.lang.Object).equals(other as java.lang.Object)
}
virtual class IHashable : IEquality {
open class IHashable : IEquality {
val hashCode : Integer
get() = (this as java.lang.Object).hashCode()
}
virtual class IMap<K, V> {
open class IMap<K, V> {
fun get(key : K) : V
fun set(key : K, value : V) : V
fun remove(key : K) : V
......@@ -21,7 +21,7 @@ class HashableWrapper wraps (val obj : Any) : IHashable
[inline] fun Any.hashable() : HashableWrapper = new HashableWrapper(this)
virtual class IHashingStrategy<K> {
open class IHashingStrategy<K> {
fun equals(a : K, b : K) : Boolean
fun hashCode(a : K) : Integer
}
......
virtual class IIterable<out T> {
open class IIterable<out T> {
fun iterator() : IIterator<T>
}
virtual class IIterator<out T> {
open class IIterator<out T> {
fun next() : T
val hasNext : Boolean
......
virtual class IList<out T> : IIterable<T>, ISized {
open class IList<out T> : IIterable<T>, ISized {
[operator] fun get(index : Int) : T
val isEmpty : Boolean
}
\ No newline at end of file
virtual class IMutableIterable<out T> : IIterable<T> {
open class IMutableIterable<out T> : IIterable<T> {
fun mutableIterator() : IMutableIterator<T>
}
\ No newline at end of file
virtual class IMutableIterator<out T> : IIterator<T> {
open class IMutableIterator<out T> : IIterator<T> {
fun remove() : T
/*
......
virtual class IMutableList<T> : IList<T>, IMutableIterable<T> {
open class IMutableList<T> : IList<T>, IMutableIterable<T> {
fun set(index : Int, value : T) : T
fun add(index : Int, value : T)
fun remove(index : Int) : T
......
virtual class IMutableSet<T> : ISet<T>, IMutableIterable<T> {
open class IMutableSet<T> : ISet<T>, IMutableIterable<T> {
fun add(item : T) : Boolean
fun remove(item : T) : Boolean
}
\ No newline at end of file
virtual class ISet<T> : IIterable<T>, ISized {
open class ISet<T> : IIterable<T>, ISized {
fun contains(item : T) : Boolean
}
virtual class ISized {
open class ISized {
val size : Int
}
\ No newline at end of file
virtual class IAdder<in T> {
open class IAdder<in T> {
fun add(item : T) : Boolean
}
virtual class ICloseable {
open class ICloseable {
fun close()
}
......
virtual class IMap<in K, out V> {
open class IMap<in K, out V> {
}
\ No newline at end of file
virtual class IPriorityQueue<T> {
open class IPriorityQueue<T> {
fun extract() : T
fun add(item : T)
val isEmpty : Boolean
......
virtual class IComparable<in T> {
open class IComparable<in T> {
fun compareTo(other : T) : Int
}
\ No newline at end of file
......@@ -17,9 +17,9 @@ internal class Example<X, T : Comparable<X>>(protected val x : Foo<X, T>, y : So
*/
class
: modifiers "class" SimpleName
: modifiers ("class" | "trait") SimpleName
typeParameters?
("wraps" valueParameters? | modifiers valueParameters?)?
modifiers ("(" primaryConstructorParameter{","} ")")?
(":" annotations delegationSpecifier{","})?
typeConstraints
(classBody? | enumClassBody)
......
......@@ -115,17 +115,15 @@ ref
try
Soft:
wraps -- in a class header
where -- in class, function and type headers
by -- in a class header (Delegation specifier)
lazy -- in a property/parameter declaration
get, set -- in a property definition
import
final
abstract
virtual
enum
open
attribute
annotation
override
private
public
......
......@@ -17,7 +17,7 @@ modifier
classModifier
: "abstract"
: "virtual"
: "final"
: "enum"
: "open"
: "attribute"
......@@ -25,7 +25,8 @@ classModifier
memberModifier
: "override"
: "virtual"
: "open"
: "final"
: "abstract"
;
......
......@@ -40,12 +40,12 @@ fun Any?.equals(other : Any?) : Boolean// = this === other
// Returns "null" for null
fun Any?.toString() : String// = this === other
trait class Iterator<out T> {
trait Iterator<out T> {
fun next() : T
abstract fun hasNext() : Boolean
}
trait class Iterable<out T> {
trait Iterable<out T> {
fun iterator() : Iterator<T>
}
......@@ -56,11 +56,11 @@ class Array<T>(val size : Int) {
fun iterator() : Iterator<T>
}
trait class Comparable<in T> {
trait Comparable<in T> {
fun compareTo(other : T) : Int
}
trait class Hashable {
trait Hashable {
fun hashCode() : Int
fun equals(other : Any?) : Boolean
}
......@@ -92,7 +92,7 @@ class String() : Comparable<String> {
fun trim(): String
}
trait class Range<in T : Comparable<T>> {
trait Range<in T : Comparable<T>> {
fun contains(item : T) : Boolean
}
......
......@@ -34,9 +34,9 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
private final ClassKind kind;
private JetType superclassType;
public MutableClassDescriptor(@NotNull BindingTrace trace, @NotNull DeclarationDescriptor containingDeclaration, @NotNull JetScope outerScope) {
this(trace, containingDeclaration, outerScope, ClassKind.CLASS);
}
// public MutableClassDescriptor(@NotNull BindingTrace trace, @NotNull DeclarationDescriptor containingDeclaration, @NotNull JetScope outerScope) {
// this(trace, containingDeclaration, outerScope, ClassKind.CLASS);
// }
public MutableClassDescriptor(@NotNull BindingTrace trace, @NotNull DeclarationDescriptor containingDeclaration, @NotNull JetScope outerScope, ClassKind kind) {
super(containingDeclaration);
......
......@@ -20,7 +20,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
private static final TokenSet TYPE_ARGUMENT_LIST_STOPPERS = TokenSet.create(
INTEGER_LITERAL, FLOAT_LITERAL, CHARACTER_LITERAL, OPEN_QUOTE, RAW_STRING_LITERAL,
NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD,
NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, TRAIT_KEYWORD, CLASS_KEYWORD, THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD,
FUN_KEYWORD, FOR_KEYWORD, NULL_KEYWORD,
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD,
CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD, TRY_KEYWORD, ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD,
......@@ -79,6 +79,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
LBRACKET, // attribute
FUN_KEYWORD,
VAL_KEYWORD, VAR_KEYWORD,
TRAIT_KEYWORD,
CLASS_KEYWORD,
TYPE_KEYWORD
),
......@@ -1236,7 +1237,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
private JetNodeType parseLocalDeclarationRest(boolean isEnum) {
IElementType keywordToken = tt();
JetNodeType declType = null;
if (keywordToken == CLASS_KEYWORD) {
if (keywordToken == CLASS_KEYWORD || keywordToken == TRAIT_KEYWORD) {
declType = myJetParsing.parseClass(isEnum);
}
else if (keywordToken == FUN_KEYWORD) {
......
......@@ -28,13 +28,13 @@ public class JetParsing extends AbstractJetParsing {
}
}
private static final TokenSet TOPLEVEL_OBJECT_FIRST = TokenSet.create(TYPE_KEYWORD, CLASS_KEYWORD,
private static final TokenSet TOPLEVEL_OBJECT_FIRST = TokenSet.create(TYPE_KEYWORD, TRAIT_KEYWORD, CLASS_KEYWORD,
FUN_KEYWORD, VAL_KEYWORD, NAMESPACE_KEYWORD);
private static final TokenSet ENUM_MEMBER_FIRST = TokenSet.create(TYPE_KEYWORD, CLASS_KEYWORD,
private static final TokenSet ENUM_MEMBER_FIRST = TokenSet.create(TYPE_KEYWORD, TRAIT_KEYWORD, CLASS_KEYWORD,
FUN_KEYWORD, VAL_KEYWORD, IDENTIFIER);
private static final TokenSet CLASS_NAME_RECOVERY_SET = TokenSet.orSet(TokenSet.create(LT, WRAPS_KEYWORD, LPAR, COLON, LBRACE), TOPLEVEL_OBJECT_FIRST);
private static final TokenSet TYPE_PARAMETER_GT_RECOVERY_SET = TokenSet.create(WHERE_KEYWORD, WRAPS_KEYWORD, LPAR, COLON, LBRACE, GT);
private static final TokenSet CLASS_NAME_RECOVERY_SET = TokenSet.orSet(TokenSet.create(LT, LPAR, COLON, LBRACE), TOPLEVEL_OBJECT_FIRST);
private static final TokenSet TYPE_PARAMETER_GT_RECOVERY_SET = TokenSet.create(WHERE_KEYWORD, LPAR, COLON, LBRACE, GT);
private static final TokenSet PARAMETER_NAME_RECOVERY_SET = TokenSet.create(COLON, EQ, COMMA, RPAR);
private static final TokenSet NAMESPACE_NAME_RECOVERY_SET = TokenSet.create(DOT, EOL_OR_SEMICOLON);
/*package*/ static final TokenSet TYPE_REF_FIRST = TokenSet.create(LBRACKET, IDENTIFIER, FUN_KEYWORD, LPAR, CAPITALIZED_THIS_KEYWORD);
......@@ -227,7 +227,7 @@ public class JetParsing extends AbstractJetParsing {
if (keywordToken == NAMESPACE_KEYWORD) {
declType = parseNamespaceBlock();
}
else if (keywordToken == CLASS_KEYWORD) {
else if (keywordToken == CLASS_KEYWORD || keywordToken == TRAIT_KEYWORD) {
declType = parseClass(detector.isDetected());
}
else if (keywordToken == FUN_KEYWORD) {
......@@ -404,36 +404,28 @@ public class JetParsing extends AbstractJetParsing {
/*
* class
* : modifiers "class" SimpleName
* : modifiers ("class" | "trait") SimpleName
* typeParameters?
* (
* ("wraps" "(" primaryConstructorParameter{","} ")") |
* (modifiers "(" primaryConstructorParameter{","} ")"))?
* modifiers ("(" primaryConstructorParameter{","} ")")?
* (":" attributes delegationSpecifier{","})?
* typeConstraints
* (classBody? | enumClassBody)
* ;
*/
public JetNodeType parseClass(boolean enumClass) {
assert _at(CLASS_KEYWORD);
advance(); // CLASS_KEYWORD
assert _atSet(CLASS_KEYWORD, TRAIT_KEYWORD);
advance(); // CLASS_KEYWORD or TRAIT_KEYWORD
expect(IDENTIFIER, "Class name expected", CLASS_NAME_RECOVERY_SET);
boolean typeParametersDeclared = parseTypeParameterList(TYPE_PARAMETER_GT_RECOVERY_SET);
if (at(WRAPS_KEYWORD)) {
advance(); // WRAPS_KEYWORD
if (parseModifierList(PRIMARY_CONSTRUCTOR_MODIFIER_LIST, false)) {
parseValueParameterList(false, TokenSet.create(COLON, LBRACE));
}
else {
if (parseModifierList(PRIMARY_CONSTRUCTOR_MODIFIER_LIST, false)) {
if (at(LPAR)) {
parseValueParameterList(false, TokenSet.create(COLON, LBRACE));
}
else {
if (at(LPAR)) {
parseValueParameterList(false, TokenSet.create(COLON, LBRACE));
}
}
}
if (at(COLON)) {
......@@ -601,8 +593,11 @@ public class JetParsing extends AbstractJetParsing {
declType = parseClass(isEnum);
}
}
else if (keywordToken == TRAIT_KEYWORD) {
declType = parseClass(isEnum);
}
else if (keywordToken == FUN_KEYWORD) {
declType = parseFunction();
declType = parseFunction();
}
else if (keywordToken == VAL_KEYWORD || keywordToken == VAR_KEYWORD) {
declType = parseProperty();
......
......@@ -5,6 +5,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.Collections;
import java.util.List;
......@@ -114,4 +115,8 @@ public class JetClass extends JetTypeParameterListOwner implements JetClassOrObj
}
return getName();
}
public boolean isTrait() {
return findChildByType(JetTokens.TRAIT_KEYWORD) != null;
}
}
......@@ -694,7 +694,7 @@ public class ClassDescriptorResolver {
);
trace.record(BindingContext.CONSTRUCTOR, declarationToTrace, constructorDescriptor);
if (modifierList != null) {
modifierList.checkNotContains(trace, JetTokens.ABSTRACT_KEYWORD, JetTokens.VIRTUAL_KEYWORD, JetTokens.OVERRIDE_KEYWORD);
modifierList.checkNotContains(trace, JetTokens.ABSTRACT_KEYWORD, JetTokens.OPEN_KEYWORD, JetTokens.OVERRIDE_KEYWORD, JetTokens.FINAL_KEYWORD);
}
return constructorDescriptor.initialize(
typeParameters,
......
......@@ -167,7 +167,7 @@ public class TopDownAnalyzer {
@Override
public void visitClass(JetClass klass) {
MutableClassDescriptor mutableClassDescriptor = new MutableClassDescriptor(trace, owner, outerScope);
MutableClassDescriptor mutableClassDescriptor = new MutableClassDescriptor(trace, owner, outerScope, getClassKind(klass));
if (klass.hasModifier(JetTokens.ENUM_KEYWORD)) {
MutableClassDescriptor classObjectDescriptor = new MutableClassDescriptor(trace, mutableClassDescriptor, outerScope, ClassKind.OBJECT);
......@@ -201,7 +201,7 @@ public class TopDownAnalyzer {
classes.put(enumEntry, classDescriptor);
}
else {
MutableClassDescriptor mutableClassDescriptor = new MutableClassDescriptor(trace, classObjectDescriptor, outerScope);
MutableClassDescriptor mutableClassDescriptor = new MutableClassDescriptor(trace, classObjectDescriptor, outerScope, ClassKind.CLASS); // TODO : Special kind for enum entry classes?
visitClassOrObject(
enumEntry,
(Map) classes,
......@@ -267,6 +267,14 @@ public class TopDownAnalyzer {
}
}
@NotNull
private ClassKind getClassKind(@NotNull JetClass jetClass) {
if (jetClass.isTrait()) return ClassKind.TRAIT;
if (jetClass.hasModifier(JetTokens.ANNOTATION_KEYWORD)) return ClassKind.ANNOTATION_CLASS;
if (jetClass.hasModifier(JetTokens.ENUM_KEYWORD)) return ClassKind.ENUM_CLASS;
return ClassKind.CLASS;
}
private void processImports(@NotNull JetNamespace namespace, @NotNull WriteThroughScope namespaceScope, @NotNull JetScope outerScope) {
List<JetImportDirective> importDirectives = namespace.getImportDirectives();
for (JetImportDirective importDirective : importDirectives) {
......
......@@ -164,6 +164,7 @@ LONG_TEMPLATE_ENTRY_END=\}
"while" { return JetTokens.WHILE_KEYWORD ;}
"break" { return JetTokens.BREAK_KEYWORD ;}
"class" { return JetTokens.CLASS_KEYWORD ;}
"trait" { return JetTokens.TRAIT_KEYWORD ;}
"throw" { return JetTokens.THROW_KEYWORD ;}
"false" { return JetTokens.FALSE_KEYWORD ;}
"when" { return JetTokens.WHEN_KEYWORD ;}
......
......@@ -119,17 +119,15 @@ public interface JetTokens {
JetToken COMMA = new JetToken("COMMA");
JetToken EOL_OR_SEMICOLON = new JetToken("EOL_OR_SEMICOLON");
JetKeywordToken WRAPS_KEYWORD = JetKeywordToken.softKeyword("wraps");
JetKeywordToken IMPORT_KEYWORD = JetKeywordToken.softKeyword("import");
JetKeywordToken WHERE_KEYWORD = JetKeywordToken.softKeyword("where");
JetKeywordToken BY_KEYWORD = JetKeywordToken.softKeyword("by");
JetKeywordToken GET_KEYWORD = JetKeywordToken.softKeyword("get");
JetKeywordToken SET_KEYWORD = JetKeywordToken.softKeyword("set");
JetKeywordToken ABSTRACT_KEYWORD = JetKeywordToken.softKeyword("abstract");
JetKeywordToken VIRTUAL_KEYWORD = JetKeywordToken.softKeyword("virtual");
JetKeywordToken ENUM_KEYWORD = JetKeywordToken.softKeyword("enum");
JetKeywordToken OPEN_KEYWORD = JetKeywordToken.softKeyword("open");
JetKeywordToken ATTRIBUTE_KEYWORD = JetKeywordToken.softKeyword("attribute");
JetKeywordToken ANNOTATION_KEYWORD = JetKeywordToken.softKeyword("annotation");
JetKeywordToken OVERRIDE_KEYWORD = JetKeywordToken.softKeyword("override");
JetKeywordToken PRIVATE_KEYWORD = JetKeywordToken.softKeyword("private");
JetKeywordToken PUBLIC_KEYWORD = JetKeywordToken.softKeyword("public");
......@@ -144,23 +142,23 @@ public interface JetTokens {
// TODO: support this as an annotation on arguments. Then, they it probably can not be a soft keyword
JetKeywordToken REF_KEYWORD = JetKeywordToken.softKeyword("ref");
TokenSet KEYWORDS = TokenSet.create(NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD,
TokenSet KEYWORDS = TokenSet.create(NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, TRAIT_KEYWORD,
THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
NULL_KEYWORD,
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD, AS_SAFE, TRAIT_KEYWORD
NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD, AS_SAFE
);
TokenSet SOFT_KEYWORDS = TokenSet.create(WRAPS_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
SET_KEYWORD, ABSTRACT_KEYWORD, VIRTUAL_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, ATTRIBUTE_KEYWORD,
TokenSet SOFT_KEYWORDS = TokenSet.create(IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, ANNOTATION_KEYWORD,
OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
CATCH_KEYWORD, FINALLY_KEYWORD, REF_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD
);
TokenSet MODIFIER_KEYWORDS = TokenSet.create(ABSTRACT_KEYWORD, VIRTUAL_KEYWORD, ENUM_KEYWORD,
OPEN_KEYWORD, ATTRIBUTE_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
TokenSet MODIFIER_KEYWORDS = TokenSet.create(ABSTRACT_KEYWORD, ENUM_KEYWORD,
OPEN_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
PROTECTED_KEYWORD, REF_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD
);
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT);
......
......@@ -54,12 +54,10 @@ public class JetPsiChecker implements Annotator {
if (reference instanceof MultiRangeReference) {
MultiRangeReference mrr = (MultiRangeReference) reference;
for (TextRange range : mrr.getRanges()) {
System.out.println("Unresolved1");
holder.createErrorAnnotation(range.shiftRight(referenceExpression.getTextOffset()), "Unresolved").setHighlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL);
}
}
else {
System.out.println("Unresolved2");
holder.createErrorAnnotation(referenceExpression, "Unresolved").setHighlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL);
}
}
......@@ -80,8 +78,9 @@ public class JetPsiChecker implements Annotator {
PsiElement declarationPsiElement = bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, redeclaration);
if (declarationPsiElement instanceof JetNamedDeclaration) {
PsiElement nameIdentifier = ((JetNamedDeclaration) declarationPsiElement).getNameIdentifier();
assert nameIdentifier != null : declarationPsiElement.getText() + " has nameIdentifier 'null'";
holder.createErrorAnnotation(nameIdentifier, "Redeclaration");
if (nameIdentifier != null) {
holder.createErrorAnnotation(nameIdentifier, "Redeclaration");
}
}
else if (declarationPsiElement != null) {
holder.createErrorAnnotation(declarationPsiElement, "Redeclaration");
......@@ -100,8 +99,6 @@ public class JetPsiChecker implements Annotator {
};
if (errorReportingEnabled) {
System.out.println("Checked: " + bindingContext.getDiagnostics().size());
System.out.println(Thread.currentThread().getId());
AnalyzingUtils.applyHandler(errorHandler, bindingContext);
}
......
......@@ -251,7 +251,7 @@ public class DescriptorRenderer {
@Override
public Void visitClassDescriptor(ClassDescriptor descriptor, StringBuilder builder) {
String keyword = descriptor.getKind() == ClassKind.TRAIT ? "trait class" : "class";
String keyword = descriptor.getKind() == ClassKind.TRAIT ? "trait" : "class";
renderClassDescriptor(descriptor, builder, keyword);
return super.visitClassDescriptor(descriptor, builder);
}
......
......@@ -14,7 +14,7 @@ abstract class MyAbstractClass() {
<error>abstract</error> fun j() {}
}
trait class MyTrait {
trait MyTrait {
fun f()
fun g() {}
<warning>abstract</warning> fun h()
......
......@@ -4,7 +4,7 @@ open class A() {
fun foo() : Int = 1
}
trait class B {
trait B {
fun bar() : Double = 1.0;
}
......
namespace toplevelObjectDeclarations {
open class Foo(y : Int) {
virtual fun foo() : Int = 1
open fun foo() : Int = 1
}
class T : <error>Foo</error> {}
......
......@@ -17,25 +17,25 @@ open class C2 {}
open class C3 {}
trait class T1 {}
trait T1 {}
trait class T2<T> {}
trait T2<T> {}
trait class Test<error>()</error> {
trait Test<error>()</error> {
<error>this</error>(x : Int) {}
}
trait class Test1 : C2<error>()</error> {}
trait Test1 : C2<error>()</error> {}
trait class Test2 : C2 {}
trait Test2 : C2 {}
trait class Test3 : C2, <error>C3</error> {}
trait Test3 : C2, <error>C3</error> {}
trait class Test4 : T1 {}
trait Test4 : T1 {}
trait class Test5 : T1, <error>T1</error> {}
trait Test5 : T1, <error>T1</error> {}
trait class Test6 : <error>C1</error> {}
trait Test6 : <error>C1</error> {}
class CTest1() : OC1() {}
......
open class bar()
trait open class Foo<error>()</error> : bar<error>()</error>, <error>bar</error>, <error>bar</error> {
trait Foo<error>()</error> : bar<error>()</error>, <error>bar</error>, <error>bar</error> {
<error>this</error>(x : Int) {}
}
trait open class Foo2 : bar, Foo {
trait Foo2 : bar, Foo {
}
open class Foo1() : bar(), <error>bar</error>, Foo, <error>Foo</error><error>()</error> {}
......
......@@ -4,7 +4,7 @@ fun box() {
}
open class A {
virtual fun foo() {}
open fun foo() {}
}
open class B : A {
......
import java.lang.Integer
open class C {
virtual fun f(): Any = "C f"
open fun f(): Any = "C f"
}
class D() : C {
......
......@@ -5,7 +5,7 @@ open class Base() {
}
open class Left() : Base() {}
trait class Right : Base {}
trait Right : Base {}
class D() : Left(), Right
......
......@@ -2,7 +2,7 @@ open class Base() {
fun n(n : Int) : Int = n + 1
}
trait class Abstract {}
trait Abstract {}
class Derived1() : Base(), Abstract {}
class Derived2() : Abstract, Base() {}
......
// Changed when traits were introduced. May not make sense any more
open class X(val x : Int) {}
trait class Y {
trait Y {
abstract val y : Int
}
......@@ -11,7 +11,7 @@ class Point(x : Int, yy : Int) : X(x) , Y {
override val y : Int = yy
}
trait class Abstract {}
trait Abstract {}
class P1(x : Int, yy : Y) : Abstract, X(x), Y by yy {}
class P2(x : Int, yy : Y) : X(x), Abstract, Y by yy {}
......
......@@ -10,7 +10,7 @@ open class Base() {
}
}
trait class Abstract {}
trait Abstract {}
class Derived1() : Base(), Abstract {}
class Derived2() : Abstract, Base() {}
......
// Changed when traits were introduced. May not make sense any more
trait class Left {}
trait Left {}
open class Right() {
virtual fun f() = 42
open fun f() = 42
}
class D() : Left, Right() {
......
namespace foo.bar.goo
abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
private
protected
......@@ -19,15 +19,15 @@ in
out
ref
class Bar<abstract
virtual
open
[sdfsdf(1+1) a]
[sdfsdf(1+1)]
[a() sdfsdf(1+1)]
enum
open
attribute
annotation
override
virtual
open
abstract
[sdfsd sdfsd a.b.f.c]
private
......
......@@ -13,17 +13,17 @@ JetFile: Attributes.jet
MODIFIER_LIST
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(enum)('enum')
PsiWhiteSpace('\n')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n')
PsiElement(override)('override')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
......@@ -163,7 +163,7 @@ JetFile: Attributes.jet
MODIFIER_LIST
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
ANNOTATION
PsiElement(LBRACKET)('[')
......@@ -249,11 +249,11 @@ JetFile: Attributes.jet
PsiWhiteSpace('\n')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n')
PsiElement(override)('override')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
......
namespace foo.bar.goo
abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
[]
private
......@@ -21,12 +21,12 @@ in
out
ref
class Bar<abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
[sdfsd sdfsd a.b.f.c]
private
......
......@@ -13,17 +13,17 @@ JetFile: Attributes_ERR.jet
MODIFIER_LIST
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(enum)('enum')
PsiWhiteSpace('\n')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n')
PsiElement(override)('override')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
......@@ -199,17 +199,17 @@ JetFile: Attributes_ERR.jet
MODIFIER_LIST
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(enum)('enum')
PsiWhiteSpace('\n')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n')
PsiElement(override)('override')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
......
namespace foo.bar.goo
abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
private
protected
......@@ -16,12 +16,12 @@ in
out
ref
class Bar<abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
private
protected
......@@ -31,12 +31,12 @@ ref
out
ref T> {
val abstract
val virtual
val open
val enum
val open
val attribute
val annotation
val override
val virtual
val open
val abstract
val private
val protected
......
......@@ -13,17 +13,17 @@ JetFile: SimpleModifiers.jet
MODIFIER_LIST
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(enum)('enum')
PsiWhiteSpace('\n')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n')
PsiElement(override)('override')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
......@@ -50,17 +50,17 @@ JetFile: SimpleModifiers.jet
MODIFIER_LIST
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n ')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(enum)('enum')
PsiWhiteSpace('\n ')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n ')
PsiElement(override)('override')
PsiWhiteSpace('\n ')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n ')
......@@ -92,7 +92,7 @@ JetFile: SimpleModifiers.jet
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
......@@ -107,7 +107,7 @@ JetFile: SimpleModifiers.jet
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('attribute')
PsiElement(IDENTIFIER)('annotation')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
......@@ -117,7 +117,7 @@ JetFile: SimpleModifiers.jet
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
......
......@@ -4,12 +4,12 @@ import foo
public protected private internal
abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
private
protected
......@@ -18,27 +18,27 @@ internal
in
out
ref
class Bar<abstract, abstract enum : T, out virtual,
class Bar<abstract, abstract enum : T, out open,
public protected private internal abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
private
protected
public
internal open
> wraps (a : B) : A by b {
> (a : B) : A by b {
public protected private internal val abstract
val virtual
val open
val enum
val open
val attribute
val annotation
val override
val virtual
val open
val abstract
val private
val protected
......@@ -61,12 +61,12 @@ ref
public protected private internal
fun abstract () : abstract
fun virtual () : virtual
fun open () : open
fun enum () : enum
fun open () : open
fun attribute () : attribute
fun annotation () : annotation
fun override () : override
fun virtual () : virtual
fun open () : open
fun abstract () : abstract
fun private () : private
fun protected () : protected
......@@ -86,12 +86,12 @@ ref
fun test(
abstract : t,
virtual : t,
open : t,
enum : t,
open : t,
attribute : t,
annotation : t,
override : t,
virtual : t,
open : t,
abstract : t,
private : t,
protected : t,
......@@ -109,12 +109,12 @@ ref
protected : t,
internal : t,
public protected private internal abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
private
protected
......@@ -128,12 +128,12 @@ ref
class F(val foo : bar,
abstract : t,
virtual : t,
open : t,
enum : t,
open : t,
attribute : t,
annotation : t,
override : t,
virtual : t,
open : t,
abstract : t,
private : t,
protected : t,
......@@ -151,12 +151,12 @@ class F(val foo : bar,
protected : t,
internal : t,
public protected private internal abstract
virtual
open
enum
open
attribute
annotation
override
virtual
open
abstract
private
protected
......
......@@ -27,17 +27,17 @@ JetFile: SoftKeywords.jet
PsiWhiteSpace('\n')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(enum)('enum')
PsiWhiteSpace('\n')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n')
PsiElement(override)('override')
PsiWhiteSpace('\n')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n')
......@@ -82,7 +82,7 @@ JetFile: SoftKeywords.jet
MODIFIER_LIST
PsiElement(out)('out')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
TYPE_PARAMETER
......@@ -97,17 +97,17 @@ JetFile: SoftKeywords.jet
PsiWhiteSpace(' ')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n ')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(enum)('enum')
PsiWhiteSpace('\n ')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n ')
PsiElement(override)('override')
PsiWhiteSpace('\n ')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n ')
......@@ -123,8 +123,6 @@ JetFile: SoftKeywords.jet
PsiWhiteSpace('\n ')
PsiElement(GT)('>')
PsiWhiteSpace(' ')
PsiElement(wraps)('wraps')
PsiWhiteSpace(' ')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
......@@ -172,7 +170,7 @@ JetFile: SoftKeywords.jet
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
......@@ -187,7 +185,7 @@ JetFile: SoftKeywords.jet
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('attribute')
PsiElement(IDENTIFIER)('annotation')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
......@@ -197,7 +195,7 @@ JetFile: SoftKeywords.jet
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
......@@ -336,7 +334,7 @@ JetFile: SoftKeywords.jet
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace(' ')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
......@@ -347,7 +345,7 @@ JetFile: SoftKeywords.jet
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace('\n ')
FUN
PsiElement(fun)('fun')
......@@ -384,7 +382,7 @@ JetFile: SoftKeywords.jet
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('attribute')
PsiElement(IDENTIFIER)('annotation')
PsiWhiteSpace(' ')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
......@@ -395,7 +393,7 @@ JetFile: SoftKeywords.jet
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('attribute')
PsiElement(IDENTIFIER)('annotation')
PsiWhiteSpace('\n ')
FUN
PsiElement(fun)('fun')
......@@ -416,7 +414,7 @@ JetFile: SoftKeywords.jet
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace(' ')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
......@@ -427,7 +425,7 @@ JetFile: SoftKeywords.jet
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace('\n ')
FUN
PsiElement(fun)('fun')
......@@ -704,7 +702,7 @@ JetFile: SoftKeywords.jet
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
......@@ -737,7 +735,7 @@ JetFile: SoftKeywords.jet
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('attribute')
PsiElement(IDENTIFIER)('annotation')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
......@@ -759,7 +757,7 @@ JetFile: SoftKeywords.jet
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
......@@ -957,17 +955,17 @@ JetFile: SoftKeywords.jet
PsiWhiteSpace(' ')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n ')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(enum)('enum')
PsiWhiteSpace('\n ')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n ')
PsiElement(override)('override')
PsiWhiteSpace('\n ')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n ')
......@@ -1025,7 +1023,7 @@ JetFile: SoftKeywords.jet
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
......@@ -1058,7 +1056,7 @@ JetFile: SoftKeywords.jet
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('attribute')
PsiElement(IDENTIFIER)('annotation')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
......@@ -1080,7 +1078,7 @@ JetFile: SoftKeywords.jet
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('virtual')
PsiElement(IDENTIFIER)('open')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
......@@ -1278,17 +1276,17 @@ JetFile: SoftKeywords.jet
PsiWhiteSpace(' ')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n ')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(enum)('enum')
PsiWhiteSpace('\n ')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(attribute)('attribute')
PsiElement(annotation)('annotation')
PsiWhiteSpace('\n ')
PsiElement(override)('override')
PsiWhiteSpace('\n ')
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace('\n ')
PsiElement(abstract)('abstract')
PsiWhiteSpace('\n ')
......
......@@ -21,7 +21,7 @@ fun countOnes(x : INumber) = if (x == 0) 0 else mostSignificantBit(x) + countOne
fun Int.matchMask(mask : Int) = this and mask == mask
virtual class INumber : IComparable<This> {
open class INumber : IComparable<This> {
val bits : Int
[operator] fun plus(other : This) : This
[operator] fun shl(bits : Int) : This
......
......@@ -515,7 +515,7 @@ JetFile: BitArith.jet
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IPushPop<T> {
open class IPushPop<T> {
val isEmpty : Boolean
fun push(item : T)
fun pop() : T
......
......@@ -2,7 +2,7 @@ JetFile: IPushPop.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class Builder<E, R> {
open class Builder<E, R> {
[operator] fun plusAssign(item : E)
fun result() : R
}
virtual class Buildable {
open class Buildable {
fun newBuilder<E, R>() : Builder<E, R>
}
......
......@@ -2,7 +2,7 @@ JetFile: PolymorphicClassObjects.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......@@ -67,7 +67,7 @@ JetFile: PolymorphicClassObjects.jet
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
......@@ -2,11 +2,11 @@
These declarations are "shallow" in the sense that they are not really compiled, only the type-checker uses them
*/
virtual class ReadOnlyArray<out T> : ISized {
open class ReadOnlyArray<out T> : ISized {
[operator] fun get(index : Int) : T
}
virtual class WriteOnlyArray<in T> : ISized { // This is needed to keep IIterator's <T> covariant
open class WriteOnlyArray<in T> : ISized { // This is needed to keep IIterator's <T> covariant
[operator] fun set(index : Int, value : T)
}
......
......@@ -4,7 +4,7 @@ JetFile: MutableArray.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......@@ -69,7 +69,7 @@ JetFile: MutableArray.jet
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IEquality {
open class IEquality {
fun equals(other : Any) : Boolean
= (this as java.lang.Object).equals(other as java.lang.Object)
}
virtual class IHashable : IEquality {
open class IHashable : IEquality {
val hashCode : Integer
get() = (this as java.lang.Object).hashCode()
}
virtual class IMap<K, V> {
open class IMap<K, V> {
fun get(key : K) : V
fun set(key : K, value : V) : V
fun remove(key : K) : V
fun containsKey(key : K) : Boolean
}
class HashableWrapper wraps (val obj : Any) : IHashable
class HashableWrapper(val obj : Any) : IHashable
// equals and hashCode implementations are inherited
[inline] fun Any.hashable() : HashableWrapper = HashableWrapper(this)
virtual class IHashingStrategy<K> {
open class IHashingStrategy<K> {
fun equals(a : K, b : K) : Boolean
fun hashCode(a : K) : Integer
}
......
......@@ -2,7 +2,7 @@ JetFile: HashMap.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......@@ -95,7 +95,7 @@ JetFile: HashMap.jet
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......@@ -170,7 +170,7 @@ JetFile: HashMap.jet
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......@@ -301,11 +301,8 @@ JetFile: HashMap.jet
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('HashableWrapper')
PsiWhiteSpace(' ')
TYPE_PARAMETER_LIST
<empty list>
PsiElement(wraps)('wraps')
PsiWhiteSpace(' ')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
......@@ -378,7 +375,7 @@ JetFile: HashMap.jet
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IIterable<out T> {
open class IIterable<out T> {
fun iterator() : IIterator<T>
}
......@@ -2,7 +2,7 @@ JetFile: IIterable.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IIterator<out T> {
open class IIterator<out T> {
fun next() : T
val hasNext : Boolean
......
......@@ -2,7 +2,7 @@ JetFile: IIterator.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IList<out T> : IIterable<T>, ISized {
open class IList<out T> : IIterable<T>, ISized {
[operator] fun get(index : Int) : T
val isEmpty : Boolean
}
\ No newline at end of file
......@@ -2,7 +2,7 @@ JetFile: IList.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IMutableIterable<out T> : IIterable<T> {
open class IMutableIterable<out T> : IIterable<T> {
fun mutableIterator() : IMutableIterator<T>
}
\ No newline at end of file
......@@ -2,7 +2,7 @@ JetFile: IMutableIterable.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IMutableIterator<out T> : IIterator<T> {
open class IMutableIterator<out T> : IIterator<T> {
fun remove() : T
/*
......
......@@ -2,7 +2,7 @@ JetFile: IMutableIterator.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IMutableList<T> : IList<T>, IMutableIterable<T> {
open class IMutableList<T> : IList<T>, IMutableIterable<T> {
fun set(index : Int, value : T) : T
fun add(index : Int, value : T)
fun remove(index : Int) : T
......
......@@ -2,7 +2,7 @@ JetFile: IMutableList.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IMutableSet<T> : ISet<T>, IMutableIterable<T> {
open class IMutableSet<T> : ISet<T>, IMutableIterable<T> {
fun add(item : T) : Boolean
fun remove(item : T) : Boolean
}
\ No newline at end of file
......@@ -2,7 +2,7 @@ JetFile: IMutableSet.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class ISet<T> : IIterable<T>, ISized {
open class ISet<T> : IIterable<T>, ISized {
fun contains(item : T) : Boolean
}
......@@ -2,7 +2,7 @@ JetFile: ISet.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class ISized {
open class ISized {
val size : Int
}
\ No newline at end of file
......@@ -2,7 +2,7 @@ JetFile: ISized.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IAdder<in T> {
open class IAdder<in T> {
fun add(item : T) : Boolean
}
virtual class ICloseable {
open class ICloseable {
fun close()
}
......
......@@ -2,7 +2,7 @@ JetFile: IOSamples.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......@@ -47,7 +47,7 @@ JetFile: IOSamples.jet
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IMap<in K, out V> {
open class IMap<in K, out V> {
}
\ No newline at end of file
......@@ -2,7 +2,7 @@ JetFile: IMap.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
virtual class IPriorityQueue<T> {
open class IPriorityQueue<T> {
fun extract() : T
fun add(item : T)
val isEmpty : Boolean
......
......@@ -2,7 +2,7 @@ JetFile: IPriorityQueue.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
class PriorityQueueAsPushPop<T> wraps(wrapped : IPriorityQueue<T>) : IPushPop<T> {
class PriorityQueueAsPushPop<T>(wrapped : IPriorityQueue<T>) : IPushPop<T> {
override fun pop() = wrapped.extract()
override fun push(item : T) = wrapped.add(item)
override val isEmpty
......
......@@ -9,8 +9,6 @@ JetFile: PriorityQueueAsPushPop.jet
TYPE_PARAMETER
PsiElement(IDENTIFIER)('T')
PsiElement(GT)('>')
PsiWhiteSpace(' ')
PsiElement(wraps)('wraps')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
......
virtual class IComparable<in T> {
open class IComparable<in T> {
fun compareTo(other : T) : Int
}
\ No newline at end of file
......@@ -2,7 +2,7 @@ JetFile: IComparable.jet
NAMESPACE
CLASS
MODIFIER_LIST
PsiElement(virtual)('virtual')
PsiElement(open)('open')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
......
......@@ -12,11 +12,11 @@ val {foo.bar.() : ()}.foo = foo
val {foo.bar.() : ()}.foo : bar = foo
[a] public get() {}
virtual set(a : b) {}
open set(a : b) {}
val {foo.bar.() : ()}.foo : bar = foo
virtual set(a : b) {}
open set(a : b) {}
val {foo.bar.() : ()}.foo : bar = foo
......
namespace toplevelObjectDeclarations {
class Foo(y : Int) {
~foo()~virtual fun foo() : Int = 1
~foo()~open fun foo() : Int = 1
}
object ~A~A : Foo(0) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册