diff --git a/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java index 01f7e99e683fd26d3e8acc977bede3ff29969f88..414bd446f6972b3abe0db255152d108681782d11 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java @@ -559,10 +559,12 @@ public class ClassDescriptorResolver { private static ClassModifiers resolveClassModifiers(@Nullable JetModifierList modifierList) { if (modifierList == null) return ClassModifiers.DEFAULT_MODIFIERS; + boolean abstractModifier = modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD); + boolean traitModifier = modifierList.hasModifier(JetTokens.TRAIT_KEYWORD); return new ClassModifiers( - modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD), - modifierList.hasModifier(JetTokens.OPEN_KEYWORD) || modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD), - modifierList.hasModifier(JetTokens.TRAIT_KEYWORD) + abstractModifier || traitModifier, + modifierList.hasModifier(JetTokens.OPEN_KEYWORD) || abstractModifier || traitModifier, + traitModifier ); } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index 45639f4dfd80a8fa438c713c86190d80faa44420..32489e59622950c50a6e30b203d150e8b052688e 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -653,7 +653,7 @@ public class TopDownAnalyzer { public void visitDelegationToSuperCallSpecifier(JetDelegatorToSuperCall call) { JetValueArgumentList valueArgumentList = call.getValueArgumentList(); ASTNode node = valueArgumentList == null ? call.getNode() : valueArgumentList.getNode(); - if (descriptor.isTrait()) { + if (descriptor.getClassModifiers().isTrait()) { trace.getErrorHandler().genericError(node, "Traits can not initialize supertypes"); } JetTypeReference typeReference = call.getTypeReference(); @@ -664,7 +664,7 @@ public class TopDownAnalyzer { recordSupertype(typeReference, supertype); ClassDescriptor classDescriptor = TypeUtils.getClassDescriptor(supertype); if (classDescriptor != null) { - if (classDescriptor.isTrait()) { + if (classDescriptor.getClassModifiers().isTrait()) { trace.getErrorHandler().genericError(node, "A trait may not have a constructor"); } } @@ -673,7 +673,7 @@ public class TopDownAnalyzer { recordSupertype(typeReference, trace.getBindingContext().get(BindingContext.TYPE, typeReference)); } } - else if (!descriptor.isTrait()) { + else if (!descriptor.getClassModifiers().isTrait()) { JetType supertype = trace.getBindingContext().get(BindingContext.TYPE, typeReference); recordSupertype(typeReference, supertype); @@ -692,8 +692,8 @@ public class TopDownAnalyzer { if (supertype != null) { ClassDescriptor classDescriptor = TypeUtils.getClassDescriptor(supertype); if (classDescriptor != null) { - if (!descriptor.isTrait()) { - if (classDescriptor.hasConstructors() && !ErrorUtils.isError(classDescriptor.getTypeConstructor()) && !classDescriptor.isTrait()) { + if (!descriptor.getClassModifiers().isTrait()) { + if (classDescriptor.hasConstructors() && !ErrorUtils.isError(classDescriptor.getTypeConstructor()) && !classDescriptor.getClassModifiers().isTrait()) { trace.getErrorHandler().genericError(specifier.getNode(), "This type has a constructor, and thus must be initialized here"); } } @@ -735,7 +735,7 @@ public class TopDownAnalyzer { ClassDescriptor classDescriptor = TypeUtils.getClassDescriptor(supertype); if (classDescriptor != null) { - if (!classDescriptor.isTrait()) { + if (!classDescriptor.getClassModifiers().isTrait()) { if (classAppeared) { trace.getErrorHandler().genericError(typeReference.getNode(), "Only one class may appear in a supertype list"); }