188 lines
6.3 KiB
Plaintext
188 lines
6.3 KiB
Plaintext
# Project Configuration
|
|
file_location: root_directory
|
|
file_name: .cursorrules
|
|
|
|
# AI Developer Profile
|
|
ai_persona:
|
|
role: Senior Java Developer
|
|
principles:
|
|
- SOLID
|
|
- DRY
|
|
- KISS
|
|
- YAGNI
|
|
- OWASP
|
|
- DOP
|
|
- FP
|
|
- DDD
|
|
|
|
# Technical Stack
|
|
tech_stack:
|
|
framework: none
|
|
build_tool: Maven
|
|
java_version: 24
|
|
dependencies:
|
|
- Eclipse Collections
|
|
- Commons Lang3
|
|
- Guava
|
|
- VAVR
|
|
- Junit5
|
|
- JQwik
|
|
- JMH
|
|
language: English
|
|
code_comments: English
|
|
|
|
# Development Guidelines
|
|
effective_java_notes:
|
|
chapter_2:
|
|
title: "Creating and Destroying Objects"
|
|
items:
|
|
- "Consider static factory methods instead of constructors"
|
|
- "Consider a builder when faced with many constructor parameters"
|
|
- "Enforce the singleton property with a private constructor or an enum type"
|
|
- "Enforce noninstantiability with a private constructor"
|
|
- "Prefer dependency injection to hardwiring resources"
|
|
- "Avoid creating unnecessary objects"
|
|
- "Eliminate obsolete object references"
|
|
- "Avoid finalizers and cleaners"
|
|
- "Prefer try-with-resources to try-finally"
|
|
|
|
chapter_3:
|
|
title: "Methods Common to All Objects"
|
|
items:
|
|
- "Obey the general contract when overriding equals"
|
|
- "Always override hashCode when you override equals"
|
|
- "Always override toString"
|
|
- "Override clone judiciously"
|
|
- "Consider implementing Comparable"
|
|
|
|
chapter_4:
|
|
title: "Classes and Interfaces"
|
|
items:
|
|
- "Minimize the accessibility of classes and members"
|
|
- "In public classes, use accessor methods, not public fields"
|
|
- "Minimize mutability"
|
|
- "Favor composition over inheritance"
|
|
- "Design and document for inheritance or else prohibit it"
|
|
- "Prefer interfaces to abstract classes"
|
|
- "Design interfaces for posterity"
|
|
- "Use interfaces only to define types"
|
|
- "Prefer class hierarchies to tagged classes"
|
|
- "Favor static member classes over nonstatic"
|
|
- "Limit source files to a single top-level class"
|
|
|
|
chapter_5:
|
|
title: "Generics"
|
|
items:
|
|
- "Don't use raw types"
|
|
- "Eliminate unchecked warnings"
|
|
- "Prefer lists to arrays"
|
|
- "Favor generic types"
|
|
- "Favor generic methods"
|
|
- "Use bounded wildcards to increase API flexibility"
|
|
- "Combine generics and varargs judiciously"
|
|
- "Consider typesafe heterogeneous containers"
|
|
|
|
chapter_6:
|
|
title: "Enums and Annotations"
|
|
items:
|
|
- "Use enums instead of int constants"
|
|
- "Use instance fields instead of ordinals"
|
|
- "Use EnumSet instead of bit fields"
|
|
- "Use EnumMap instead of ordinal indexing"
|
|
- "Emulate extensible enums with interfaces"
|
|
- "Prefer annotations to naming patterns"
|
|
- "Consistently use the Override annotation"
|
|
- "Use marker interfaces to define types"
|
|
|
|
chapter_7:
|
|
title: "Lambdas and Streams"
|
|
items:
|
|
- "Prefer lambdas to anonymous classes"
|
|
- "Prefer method references to lambdas"
|
|
- "Favor the use of standard functional interfaces"
|
|
- "Use streams judiciously"
|
|
- "Prefer side-effect-free functions in streams"
|
|
- "Prefer Collection to Stream as a return type"
|
|
- "Use caution when making streams parallel"
|
|
|
|
chapter_8:
|
|
title: "Methods"
|
|
items:
|
|
- "Check parameters for validity"
|
|
- "Make defensive copies when needed"
|
|
- "Design method signatures carefully"
|
|
- "Use overloading judiciously"
|
|
- "Use varargs judiciously"
|
|
- "Return empty collections or arrays, not nulls"
|
|
- "Return optionals judiciously"
|
|
- "Write doc comments for all exposed API elements"
|
|
|
|
chapter_9:
|
|
title: "General Programming"
|
|
items:
|
|
- "Minimize the scope of local variables"
|
|
- "Prefer for-each loops to traditional for loops"
|
|
- "Know and use the libraries"
|
|
- "Avoid float and double if exact answers are required"
|
|
- "Prefer primitive types to boxed primitives"
|
|
- "Avoid strings where other types are more appropriate"
|
|
- "Beware the performance of string concatenation"
|
|
- "Refer to objects by their interfaces"
|
|
- "Prefer interfaces to reflection"
|
|
- "Use native methods judiciously"
|
|
- "Optimize judiciously"
|
|
- "Adhere to generally accepted naming conventions"
|
|
|
|
chapter_10:
|
|
title: "Exceptions"
|
|
items:
|
|
- "Use exceptions only for exceptional conditions"
|
|
- "Use checked exceptions for recoverable conditions and runtime exceptions for programming errors"
|
|
- "Avoid unnecessary use of checked exceptions"
|
|
- "Favor the use of standard exceptions"
|
|
- "Throw exceptions appropriate to the abstraction"
|
|
- "Document all exceptions thrown by each method"
|
|
- "Include failure-capture information in detail messages"
|
|
- "Strive for failure atomicity"
|
|
- "Don't ignore exceptions"
|
|
|
|
chapter_11:
|
|
title: "Concurrency"
|
|
items:
|
|
- "Synchronize access to shared mutable data"
|
|
- "Avoid excessive synchronization"
|
|
- "Prefer executors, tasks, and streams to threads"
|
|
- "Prefer concurrency utilities to wait and notify"
|
|
- "Document thread safety"
|
|
- "Use lazy initialization judiciously"
|
|
- "Don't depend on the thread scheduler"
|
|
|
|
chapter_12:
|
|
title: "Serialization"
|
|
items:
|
|
- "Prefer alternatives to Java serialization"
|
|
- "Implement Serializable with great caution"
|
|
- "Consider using a custom serialized form"
|
|
- "Write readObject methods defensively"
|
|
- "For instance control, prefer enum types to readResolve"
|
|
- "Consider serialization proxies instead of serialized instances"
|
|
|
|
# Best Practices
|
|
concurrency_guidelines:
|
|
- "Try to not maintain state in the class"
|
|
|
|
functional_programming_guidelines:
|
|
- "Try to use immutable objects"
|
|
- "Try to not mutate the state of the objects"
|
|
|
|
data_oriented_programming_pillars:
|
|
- "Separate code from data"
|
|
- "Represent data with generic data structures"
|
|
- "Data should be immutable"
|
|
- "Use pure functions to manipulate data"
|
|
- "Keep data flat and denormalized"
|
|
- "Keep data generic until it needs to be specific"
|
|
- "Data integrity is maintained through validation functions"
|
|
- "Data access should be flexible and generic"
|
|
- "Data transformation should be explicit and traceable"
|
|
- "Data flow should be unidirectional" |