Class AcceptableClassDesignOrError

java.lang.Object
org.ek9lang.compiler.phase5.AcceptableClassDesignOrError
All Implemented Interfaces:
BiConsumer<EK9Parser.ClassDeclarationContext, EK9Parser.TraitsListContext>

final class AcceptableClassDesignOrError extends Object implements BiConsumer<EK9Parser.ClassDeclarationContext, EK9Parser.TraitsListContext>
Validates class design patterns for Construct Misuse Detection (E11022-E11025).

Detects four anti-patterns where EK9 constructs are being misused:

  • E11022 - Class Should Be Component: Class with 4+ service fields and no data fields is really a service coordinator and should be declared as a component.
  • E11023 - Missing 'by' Delegation: Class implements trait without 'by', has a compatible field, and manually overrides most/all trait methods (boilerplate).
  • E11024 - Hybrid Class-Component: Class uses 'by' delegation but also has many service fields - mixed responsibilities that should be split.
  • E11025 - Excessive Mixed Responsibilities: Class has 3+ service fields AND 3+ data fields - the "Blob" anti-pattern, should be split into component + data class.

Exclusions (NOT anti-patterns):

  • Manual override required due to trait method signature conflicts
  • Classes with 1-2 service fields + data fields (reasonable composition)
  • Components (expected to have many service dependencies)
  • Generic classes (cannot be components per EK9 grammar)

Research basis:

  • Martin, R.C.: Single Responsibility Principle
  • Brown et al.: "AntiPatterns" (1998) - The Blob pattern
  • Marinescu, R.: IEEE ICSM 2004 - Detection strategies
  • Riel, A.J.: "OO Design Heuristics" (1996)
  • Chidamber & Kemerer: CK Metrics Suite