コード例 #1
0
 protected void checkFunction(
     JetNamedFunction function, SimpleFunctionDescriptor functionDescriptor) {
   reportErrorIfHasIllegalModifier(function);
   DeclarationDescriptor containingDescriptor = functionDescriptor.getContainingDeclaration();
   boolean hasAbstractModifier = function.hasModifier(JetTokens.ABSTRACT_KEYWORD);
   checkDeclaredTypeInPublicMember(function, functionDescriptor);
   if (containingDescriptor instanceof ClassDescriptor) {
     ClassDescriptor classDescriptor = (ClassDescriptor) containingDescriptor;
     boolean inTrait = classDescriptor.getKind() == ClassKind.INTERFACE;
     if (hasAbstractModifier && !classCanHaveAbstractMembers(classDescriptor)) {
       trace.report(
           ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS.on(
               function, functionDescriptor.getName().asString(), classDescriptor));
     }
     if (hasAbstractModifier && inTrait) {
       trace.report(ABSTRACT_MODIFIER_IN_TRAIT.on(function));
     }
     boolean hasBody = function.hasBody();
     if (hasBody && hasAbstractModifier) {
       trace.report(ABSTRACT_FUNCTION_WITH_BODY.on(function, functionDescriptor));
     }
     if (!hasBody && function.hasModifier(JetTokens.FINAL_KEYWORD) && inTrait) {
       trace.report(FINAL_FUNCTION_WITH_NO_BODY.on(function, functionDescriptor));
     }
     if (!hasBody && !hasAbstractModifier && !inTrait) {
       trace.report(NON_ABSTRACT_FUNCTION_WITH_NO_BODY.on(function, functionDescriptor));
     }
     return;
   }
   modifiersChecker.reportIllegalModalityModifiers(function);
   if (!function.hasBody() && !hasAbstractModifier) {
     trace.report(NON_MEMBER_FUNCTION_NO_BODY.on(function, functionDescriptor));
   }
 }
コード例 #2
0
 private void checkProperty(JetProperty property, PropertyDescriptor propertyDescriptor) {
   reportErrorIfHasIllegalModifier(property);
   DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration();
   if (containingDeclaration instanceof ClassDescriptor) {
     checkPropertyAbstractness(
         property, propertyDescriptor, (ClassDescriptor) containingDeclaration);
   } else {
     modifiersChecker.reportIllegalModalityModifiers(property);
   }
   checkPropertyInitializer(property, propertyDescriptor);
   checkAccessors(property, propertyDescriptor);
   checkDeclaredTypeInPublicMember(property, propertyDescriptor);
 }
コード例 #3
0
 private void checkTraitModifiers(JetClass aClass) {
   reportErrorIfHasIllegalModifier(aClass);
   JetModifierList modifierList = aClass.getModifierList();
   if (modifierList == null) return;
   if (modifierList.hasModifier(JetTokens.FINAL_KEYWORD)) {
     trace.report(Errors.TRAIT_CAN_NOT_BE_FINAL.on(aClass));
   }
   if (modifierList.hasModifier(JetTokens.SEALED_KEYWORD)) {
     trace.report(Errors.TRAIT_CAN_NOT_BE_SEALED.on(aClass));
   }
   if (modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD)) {
     trace.report(Errors.ABSTRACT_MODIFIER_IN_TRAIT.on(aClass));
   }
   if (modifierList.hasModifier(JetTokens.OPEN_KEYWORD)) {
     trace.report(Errors.OPEN_MODIFIER_IN_TRAIT.on(aClass));
   }
 }
コード例 #4
0
 private void checkObject(JetObjectDeclaration declaration, ClassDescriptor classDescriptor) {
   reportErrorIfHasIllegalModifier(declaration);
   if (declaration.isLocal() && !declaration.isCompanion() && !declaration.isObjectLiteral()) {
     trace.report(LOCAL_OBJECT_NOT_ALLOWED.on(declaration, classDescriptor));
   }
 }
コード例 #5
0
 private void checkConstructorDeclaration(
     ConstructorDescriptor constructorDescriptor, JetDeclaration declaration) {
   modifiersChecker.reportIllegalModalityModifiers(declaration);
   reportErrorIfHasIllegalModifier(declaration);
   modifiersChecker.checkModifiersForDeclaration(declaration, constructorDescriptor);
 }