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
-
Constructor Summary
ConstructorsConstructorDescriptionAcceptableClassDesignOrError(SymbolsAndScopes symbolsAndScopes, ErrorListener errorListener) -
Method Summary
Modifier and TypeMethodDescriptionvoidaccept(EK9Parser.ClassDeclarationContext ctx, EK9Parser.TraitsListContext traitsListContext) Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface BiConsumer
andThen
-
Constructor Details
-
AcceptableClassDesignOrError
AcceptableClassDesignOrError(SymbolsAndScopes symbolsAndScopes, ErrorListener errorListener)
-
-
Method Details
-
accept
public void accept(EK9Parser.ClassDeclarationContext ctx, EK9Parser.TraitsListContext traitsListContext) - Specified by:
acceptin interfaceBiConsumer<EK9Parser.ClassDeclarationContext, EK9Parser.TraitsListContext>
-