Skip to content

Merge develop into main v1.0.0#13

Merged
jher235 merged 109 commits intomainfrom
develop
Feb 15, 2026
Merged

Merge develop into main v1.0.0#13
jher235 merged 109 commits intomainfrom
develop

Conversation

@jher235
Copy link
Owner

@jher235 jher235 commented Feb 15, 2026

📝 Description

  • Merge for release v1.0.0

🚀 Release v1.0.0

🌱 Project Setup & Infrastructure

  • Initialized project with Gradle and Shadow Jar plugin for fat jar builds.
  • Configured CI/CD workflows using GitHub Actions for automated builds and PR generation.
  • Integrated CodeRabbit for AI-based code reviews and established PR templates.

🧠 Core Logic (AST & Context Analysis)

  • Implemented ProjectParser and PathResolver for parsing Java source code.
  • Developed MethodExtractor and DependencyResolver to analyze method calls, fields, and inheritance structures.
  • Built ContextExtractor to recursively extract relevant code context based on AST.
  • Added MarkdownExporter to format analysis results into clean Markdown.

🖥️ CLI & User Experience

  • Implemented JFocusCli with interactive mode for selecting files and methods.
  • Added fuzzy search and case-insensitive matching for easier navigation.
  • Introduced -c (clipboard copy) and -v (verbose/deep dive) options.
  • Optimized output for stdout to ensure compatibility with AI agents.

📦 Distribution & Installation

  • Created installation scripts for macOS/Linux (install.sh) and Windows (install.ps1).
  • Added SHA256 checksum verification for secure installation.
  • Improved shell detection logic for automatic alias registration.

📚 Documentation

  • Restructured README.md with benchmarks, usage examples, and correct anchor links.
  • Created rules.md to guide AI agents (Cursor, Windsurf) on how to use the tool.
  • Consolidated documentation and scripts to the project root for better accessibility.

jher235 and others added 30 commits January 26, 2026 03:19
- Initialize Gradle project structure
- Configure build.gradle.kts with Java plugin
- Add settings.gradle.kts with project name 'j-focus'
- Add Gradle wrapper and .gitignore
…endencies

- com.github.johnrengelman.shadow: 컴파일 시 라이브러리들까지 모두 실행 파일로 만들기 위함
- AST 분석을 위해 JavaParser 의존성 추가
- cli 입력을 위해 Picocli 의존성 추가
- 메인 함수는 com.jher235.jfocus.JFocusCli 로 설정
initialize project structure and PR automation with Gemini
- try1: find root marker  (.git, settings.gradle)
- try2: find build marker (build.gradle, pom.xml)
- PathResolver 를 사용해서 경로를 추출. 하위 폴더에서 소스 위치를 잡아내기 위함
- StaticJavaParser 를 사용하여 파싱 진행
- implements Callable<Integer> for return Exit Code to OS
- break when path equals ceiling
- Add duplicate file detection in `parseFile`:
  - Return error if multiple files match the given name
  - Suggest specifying relative path to resolve ambiguity
feat: Introduce Core Components for J-Focus CLI
- Implement `extractMethods` to find all methods matching a name (supports overloading)
- Implement `extractMethodSource` to retrieve method source code as string
- Use JavaParser's `findAll` for AST traversal
feat: Introduce MethodExtractor for AST-based Java method extraction
- Add `DependencyResolver` class to handle symbol resolution using JavaParser
- Implement `resolveMethods` to extract method call dependencies from source code
- Implement `resolveFields` to identify field usages within methods
- Apply distinct error handling strategy:
  - Silently ignore `UnsolvedSymbolException` (e.g., external libs, Lombok)
  - Log warnings for unexpected `RuntimeException` during resolution
- Filter out self-recursion and duplicate dependencies
- Create `ContextResult` class to encapsulate analysis results
- Define fields for storing categorized context:
  - Target method (Layer 0)
  - Internal methods (Layer 1: same class)
  - External methods (Layer 2: different class)
  - Used fields
- Add helper methods to accumulate dependencies dynamically
jher235 and others added 27 commits February 6, 2026 02:56
- Enhance 'resolveByAstAnalysis' to traverse superclass chains for implicit-this calls.
- Improve 'getMethodId' using JavaParser's getFullyQualifiedName to distinguish between methods in nested classes.
- Ensure stable method identification across complex project structures.
…olution

- Update 'findInSuperClass' to recursively traverse the entire inheritance hierarchy (Grandparent -> Parent).
- Fix 'this.method()' resolution to check local methods first (supporting inner classes) instead of blindly resolving file names.
- Ensure 'super.method()' correctly delegates to the inheritance traversal logic.
- Target specific classes during method lookup to avoid matching sibling types in the same file.
- Implement robust field deduplication using 'ClassName.fieldName' IDs instead of unstable AST node equality.
- Apply consistent class filtering in superclass traversal.
- Ensure 'findInSuperClass' targets the correct ancestor class during AST traversal.
…ements

- Update 'getFieldId' to generate IDs based on the FieldDeclaration node (e.g., 'Class#a,b') rather than individual variable names.
- Fix issue where multi-variable declarations (e.g., 'int x, y;') caused duplicate entries in the dependency list.
- Remove redundant 'fieldName' parameter from 'resolveAndAddField' logic.
…solve

- Update 'getMethodId' to use Fully Qualified Class Names (FQCN) instead of simple names.
- Prevent collision issues where methods from different packages with the same name were treated as duplicates.
- Ensure consistent ID generation logic across core components.
- Create 'AstUtils' to centralize method and field ID generation logic.
- Remove duplicate 'getMethodId' and 'getFieldId' methods from DependencyResolver and ContextExtractor.
- Ensure consistent ID generation strategy across the application (DRY principle).
- Configure CI to run on push and PR to main/develop branches.
- Set up JDK 21 environment to match project toolchain.
- Use 'gradle/actions/setup-gradle' for automatic caching and wrapper validation.
- Execute 'build' and 'shadowJar' tasks to verify tests and executable jar creation.
- Remove deprecated 'arguments' parameter from setup-gradle action.
- Separate Gradle setup and execution steps.
- Execute './gradlew build shadowJar' directly in a run step.
ci: Add GitHub Actions Workflow for Java 21 and Gradle Build
feat: Implement Deep Recursive Call Graph Analysis
-  Changed default behavior from clipboard copy to stdout.
- Remove `-p` (`--print`) flag as printing is now the default.
- Add `-c` (`--copy`) flag to support clipboard copying for human users.
- Improve compatibility with AI agents (Cursor, Windsurf) and Unix pipelines.
- Create a detailed guide document to help AI agents and users understand JFocus strategies.
- Define optimal analysis workflow (Do NOT read entire file).
- Explain CLI syntax, options (-c, -v), and examples.
- Add configuration rules for AI agents (e.g., Cursor, Windsurf) to autonomously use JFocus.
- Mandate usage of `jfocus <file> <method>` over full-file reading.
- Establish "Trust Model" treating JFocus output as the single source of truth.
…dards

- Translate `README.ko.md` to English (`README.md`) with a professional senior engineer tone.
- Add language switchers ([🇰🇷 Korean | 🇺🇸 English]) to both files.
- Refine `README.ko.md` based on expert feedback:
  - Strengthen intro with problem-solving tagline.
  - Clarify AST 'Symbol Resolution' technical details.
  - Add qualitative results ("Reduced Hallucination") to benchmarks.
- Update `rules.md` to include the 'Trust Model' section as requested by code review.
- Remove duplicate rules content from `README.md` and link to `rules.md` instead.
- Ensure consistency between documentation and actual agent instructions.
Refactored
- This ensures that users running the one-liner via curl | bash will have the jfocus alias correctly appended to their actual login shell's config file (e.g., .zshrc) instead of being incorrectly defaulted to .bashrc.
- Update SHA256 checksums in `install.sh` and `install.ps1` for the latest build.
- Fix logic in `install.sh` to correctly detect user shell (zsh/bash) when piped via curl.
feat/docs: Enhance AI Agent Integration, Refactor Documentation, and Improve CLI Usability
- Fix Broken Links: Resolve Table of Contents navigation issues caused by emojis using explicit HTML anchors.
- Fix Paths: Update incorrect relative paths for documentation and repository URLs.
@jher235 jher235 self-assigned this Feb 15, 2026
@coderabbitai
Copy link

coderabbitai bot commented Feb 15, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch develop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@jher235 jher235 merged commit 05ef919 into main Feb 15, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant