"trait" modifier supported
This commit is contained in:
@@ -47,4 +47,6 @@ public interface ClassDescriptor extends ClassifierDescriptor {
|
||||
boolean isAbstract();
|
||||
|
||||
boolean isOpen();
|
||||
|
||||
boolean isTrait();
|
||||
}
|
||||
|
||||
@@ -125,4 +125,9 @@ public class ClassDescriptorImpl extends DeclarationDescriptorImpl implements Cl
|
||||
public boolean isOpen() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTrait() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,6 +149,11 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor {
|
||||
return original.isOpen();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTrait() {
|
||||
return original.isTrait();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isClassObjectAValue() {
|
||||
return original.isClassObjectAValue();
|
||||
|
||||
@@ -24,6 +24,7 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
|
||||
|
||||
private boolean open;
|
||||
private boolean isAbstract;
|
||||
private boolean trait;
|
||||
private TypeConstructor typeConstructor;
|
||||
private final WritableScope scopeForMemberResolution;
|
||||
private final WritableScope scopeForMemberLookup;
|
||||
@@ -151,6 +152,15 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
|
||||
this.isAbstract = isAbstract;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTrait() {
|
||||
return trait;
|
||||
}
|
||||
|
||||
public void setTrait(boolean trait) {
|
||||
this.trait = trait;
|
||||
}
|
||||
|
||||
public boolean isOpen() {
|
||||
return open;
|
||||
}
|
||||
|
||||
@@ -147,6 +147,7 @@ public class ClassDescriptorResolver {
|
||||
|
||||
descriptor.setOpen(classElement.hasModifier(JetTokens.OPEN_KEYWORD) || classElement.hasModifier(JetTokens.ABSTRACT_KEYWORD));
|
||||
descriptor.setAbstract(classElement.hasModifier(JetTokens.ABSTRACT_KEYWORD));
|
||||
descriptor.setTrait(classElement.hasModifier(JetTokens.TRAIT_KEYWORD));
|
||||
|
||||
trace.record(BindingContext.CLASS, classElement, descriptor);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,9 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements
|
||||
private JavaClassMembersScope unsubstitutedMemberScope;
|
||||
private JetType classObjectType;
|
||||
private final WritableFunctionGroup constructors = new WritableFunctionGroup("<init>");
|
||||
private boolean isAbstract;
|
||||
private boolean isOpen;
|
||||
private boolean isTrait;
|
||||
|
||||
public JavaClassDescriptor(DeclarationDescriptor containingDeclaration) {
|
||||
super(containingDeclaration);
|
||||
@@ -29,6 +32,12 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements
|
||||
this.typeConstructor = typeConstructor;
|
||||
}
|
||||
|
||||
public void setModifiers(boolean isAbstract, boolean isOpen, boolean isTrait) {
|
||||
this.isAbstract = isAbstract;
|
||||
this.isOpen = isOpen;
|
||||
this.isTrait = isTrait;
|
||||
}
|
||||
|
||||
public void setUnsubstitutedMemberScope(JavaClassMembersScope memberScope) {
|
||||
this.unsubstitutedMemberScope = memberScope;
|
||||
}
|
||||
@@ -110,6 +119,11 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements
|
||||
return classObjectType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isClassObjectAValue() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isObject() {
|
||||
return false;
|
||||
@@ -117,17 +131,17 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements
|
||||
|
||||
@Override
|
||||
public boolean isAbstract() {
|
||||
return false;
|
||||
return isAbstract;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpen() {
|
||||
return false;
|
||||
return isOpen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isClassObjectAValue() {
|
||||
return false;
|
||||
public boolean isTrait() {
|
||||
return isTrait;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -106,6 +106,11 @@ public class JavaDescriptorResolver {
|
||||
supertypes
|
||||
|
||||
));
|
||||
classDescriptor.setModifiers(
|
||||
psiClass.hasModifierProperty(PsiModifier.ABSTRACT),
|
||||
!psiClass.hasModifierProperty(PsiModifier.FINAL),
|
||||
psiClass.isInterface()
|
||||
);
|
||||
classDescriptorCache.put(psiClass.getQualifiedName(), classDescriptor);
|
||||
classDescriptor.setUnsubstitutedMemberScope(new JavaClassMembersScope(classDescriptor, psiClass, semanticServices, false));
|
||||
classDescriptor.setClassObjectMemberScope(new JavaClassMembersScope(classDescriptor, psiClass, semanticServices, true));
|
||||
|
||||
@@ -136,6 +136,7 @@ public interface JetTokens {
|
||||
JetKeywordToken PROTECTED_KEYWORD = JetKeywordToken.softKeyword("protected");
|
||||
JetKeywordToken CATCH_KEYWORD = JetKeywordToken.softKeyword("catch");
|
||||
JetKeywordToken OUT_KEYWORD = JetKeywordToken.softKeyword("out");
|
||||
JetKeywordToken TRAIT_KEYWORD = JetKeywordToken.softKeyword("trait");
|
||||
|
||||
JetKeywordToken FINALLY_KEYWORD = JetKeywordToken.softKeyword("finally");
|
||||
|
||||
@@ -154,12 +155,12 @@ public interface JetTokens {
|
||||
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,
|
||||
OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
|
||||
CATCH_KEYWORD, FINALLY_KEYWORD, REF_KEYWORD, OUT_KEYWORD
|
||||
CATCH_KEYWORD, FINALLY_KEYWORD, REF_KEYWORD, OUT_KEYWORD, TRAIT_KEYWORD
|
||||
);
|
||||
|
||||
TokenSet MODIFIER_KEYWORDS = TokenSet.create(ABSTRACT_KEYWORD, VIRTUAL_KEYWORD, ENUM_KEYWORD,
|
||||
OPEN_KEYWORD, ATTRIBUTE_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
|
||||
PROTECTED_KEYWORD, REF_KEYWORD, OUT_KEYWORD, IN_KEYWORD
|
||||
PROTECTED_KEYWORD, REF_KEYWORD, OUT_KEYWORD, IN_KEYWORD, TRAIT_KEYWORD
|
||||
);
|
||||
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT);
|
||||
TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
|
||||
|
||||
@@ -251,7 +251,7 @@ public class DescriptorRenderer {
|
||||
|
||||
@Override
|
||||
public Void visitClassDescriptor(ClassDescriptor descriptor, StringBuilder builder) {
|
||||
String keyword = "class";
|
||||
String keyword = descriptor.isTrait() ? "trait class" : "class";
|
||||
renderClassDescriptor(descriptor, builder, keyword);
|
||||
return super.visitClassDescriptor(descriptor, builder);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user