--- name: understand-code description: Help understand decompiled Java code, analyze business logic, and document code functionality. Use when user needs to comprehend code purpose, flow, or behavior. version: 1.0.0 --- # Code Understanding Guide This skill helps understand decompiled or existing Java code. ## When to Use - User has decompiled code and needs to understand it - User wants to document business logic - User needs to trace code flow - User wants to identify code patterns ## Analysis Approach ### 1. Start with Entry Points Identify how the application is accessed: ```bash # Find Servlet/Action classes find -name "*Servlet.java" -o -name "*Action.java" | head -20 # Find Controller classes find -name "*Controller.java" | head -20 # Find Service endpoints find -name "*Service.java" -o -name "*ServiceImpl.java" | head -20 ``` ### 2. Trace Request Flow For Struts applications: ``` HTTP Request ↓ Struts Filter (web.xml) ↓ Action Mapping (struts.xml) ↓ Action Class (execute method) ↓ Service Layer ↓ DAO Layer ↓ Database ``` For Spring applications: ``` HTTP Request ↓ DispatcherServlet ↓ Controller (@RequestMapping) ↓ Service Layer (@Service) ↓ Repository (@Repository) ↓ Database ``` ### 3. Understand Domain Model Analyze domain classes: ```bash # Find domain/entity classes find -name "*Domain.java" -o -name "*Entity.java" -o -name "*Bean.java" # Check for common patterns grep -l "get\|set" /*Domain.java | head -10 ``` Domain class patterns: - Fields with getters/setters - Serializable implementation - JPA/Hibernate annotations - Relationships (OneToMany, ManyToOne) ### 4. Map Business Logic Identify business operations: ```bash # Find service methods grep -r "public.*Service" | head -20 # Find transaction boundaries grep -r "@Transactional\|beginTransaction" # Find business calculations grep -r "calculate\|compute\|process" ``` ### 5. Configuration Analysis Read configuration files: ```bash # Spring context cat /spring-application-context.xml # Struts config cat /struts.xml # Database config cat /database.properties # Web config cat /web.xml ``` ## Code Patterns ### DAO Pattern ```java public interface UserDao { User findById(Long id); List findAll(); void save(User user); void delete(User user); } public class UserDaoImpl implements UserDao { // Implementation using iBatis/Hibernate } ``` ### Service Pattern ```java public interface UserService { User getUser(Long id); void createUser(User user); } public class UserServiceImpl implements UserService { private UserDao userDao; @Transactional public void createUser(User user) { // Business logic userDao.save(user); } } ``` ### Action Pattern (Struts) ```java public class UserAction extends ActionSupport { private UserService userService; private User user; public String execute() { // Handle request user = userService.getUser(id); return SUCCESS; } } ``` ## Documentation Generation Generate code documentation: ### 1. Class Summary For each class, document: - Purpose/responsibility - Key methods - Dependencies - Usage examples ### 2. Flow Diagrams Create text-based flow diagrams: ``` User Login Flow: ┌─────────┐ ┌─────────┐ ┌─────────┐ │ Login │───→│ Action │───→│ Service │ │ Page │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ ↓ ↓ ┌─────────┐ ┌─────────┐ │ Validate │ │ DAO │ │ Input │ │ │ └─────────┘ └─────────┘ ``` ### 3. Package Documentation Document each package: ``` com.hst.taxService.action - Purpose: Struts actions for tax service web interface - Key classes: TaxAction, ReportAction - Dependencies: taxService.service, common.util ``` ## Analysis Tools ### Quick Analysis ```bash # Count methods per class for f in $(find -name "*.java"); do echo "$(grep -c "public\|private\|protected" "$f") $f" done | sort -rn | head -20 # Find complex methods (many lines) for f in $(find -name "*.java"); do echo "$(wc -l < "$f") $f" done | sort -rn | head -20 ``` ### Pattern Detection ```bash # Find singletons grep -r "getInstance\|private static" # Find factories grep -r "Factory\|createInstance" # Find observers grep -r "Listener\|Observer\|addEventListener" ``` ## Integration After understanding code: 1. Create README documentation 2. Generate API documentation 3. Identify refactoring opportunities 4. Plan modernization if needed