---
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