You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.9 KiB
Bash
75 lines
1.9 KiB
Bash
#!/bin/bash
|
|
# Analyze Java class dependencies
|
|
# Usage: ./analyze-deps.sh <classes_dir>
|
|
|
|
set -e
|
|
|
|
CLASSES_DIR="${1:?Usage: analyze-deps.sh <classes_dir>}"
|
|
|
|
if [ ! -d "$CLASSES_DIR" ]; then
|
|
echo "Error: Directory not found: $CLASSES_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== Java Dependency Analysis ==="
|
|
echo ""
|
|
|
|
# Count class files
|
|
TOTAL=$(find "$CLASSES_DIR" -name "*.class" | wc -l)
|
|
echo "Total class files: $TOTAL"
|
|
echo ""
|
|
|
|
# Package structure
|
|
echo "=== Package Structure ==="
|
|
find "$CLASSES_DIR" -name "*.class" | \
|
|
sed "s|$CLASSES_DIR/||" | \
|
|
sed 's|/[^/]*\.class$||' | \
|
|
sort -u | \
|
|
sed 's|/|.|g'
|
|
echo ""
|
|
|
|
# Class count per package
|
|
echo "=== Classes per Package ==="
|
|
find "$CLASSES_DIR" -name "*.class" | \
|
|
sed "s|$CLASSES_DIR/||" | \
|
|
sed 's|/[^/]*\.class$||' | \
|
|
sort | uniq -c | sort -rn
|
|
echo ""
|
|
|
|
# Find inner classes
|
|
echo "=== Inner Classes ==="
|
|
INNER_COUNT=$(find "$CLASSES_DIR" -name "*\$*.class" | wc -l)
|
|
echo "Inner/anonymous classes: $INNER_COUNT"
|
|
echo ""
|
|
|
|
# Extract imports from decompiled files if available
|
|
echo "=== External Dependencies (from JARs) ==="
|
|
if [ -d "$CLASSES_DIR/../lib" ]; then
|
|
echo "JAR dependencies:"
|
|
ls -1 "$CLASSES_DIR/../lib/"*.jar 2>/dev/null | xargs -I {} basename {} .jar
|
|
else
|
|
echo "No lib directory found"
|
|
fi
|
|
echo ""
|
|
|
|
# Interface and abstract class analysis
|
|
echo "=== Interface Implementation Hints ==="
|
|
echo "Looking for common patterns..."
|
|
find "$CLASSES_DIR" -name "*.class" | while read f; do
|
|
name=$(basename "$f" .class)
|
|
# Check for common naming patterns
|
|
case "$name" in
|
|
*Dao|*DAO) echo " DAO: $name" ;;
|
|
*Service) echo " Service: $name" ;;
|
|
*Action) echo " Action: $name" ;;
|
|
*Domain) echo " Domain: $name" ;;
|
|
*Bean) echo " Bean: $name" ;;
|
|
*Impl) echo " Implementation: $name" ;;
|
|
*Interface) echo " Interface: $name" ;;
|
|
*Exception) echo " Exception: $name" ;;
|
|
esac
|
|
done | sort | head -50
|
|
|
|
echo ""
|
|
echo "=== Analysis Complete ==="
|