Skip to content

Commit 06a191f

Browse files
authored
Merge pull request #1912 from codeflash-ai/codeflash/optimize-pr1906-2026-03-27T05.15.59
⚡️ Speed up function `configure_java_project` by 17% in PR #1906 (`cf-java-zero-config-strategy`)
2 parents 39ce696 + 002acbc commit 06a191f

1 file changed

Lines changed: 28 additions & 30 deletions

File tree

codeflash/cli_cmds/init_java.py

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
from codeflash.code_utils.shell_utils import get_shell_rc_path, is_powershell
2727
from codeflash.telemetry.posthog_cf import ph
2828

29+
_MAVEN_NS = {"m": "http://maven.apache.org/POM/4.0.0"}
30+
2931

3032
class JavaBuildTool(Enum):
3133
"""Java build tools."""
@@ -75,23 +77,15 @@ def detect_java_build_tool(project_root: Path) -> JavaBuildTool:
7577
def detect_java_source_root(project_root: Path) -> str:
7678
"""Detect the Java source root directory."""
7779
# Standard Maven/Gradle layout
78-
standard_src = project_root / "src" / "main" / "java"
79-
if standard_src.is_dir():
80+
if (project_root / "src" / "main" / "java").is_dir():
8081
return "src/main/java"
8182

8283
# Try to detect from pom.xml
83-
pom_path = project_root / "pom.xml"
84-
if pom_path.exists():
85-
try:
86-
tree = ET.parse(pom_path)
87-
root = tree.getroot()
88-
# Handle Maven namespace
89-
ns = {"m": "http://maven.apache.org/POM/4.0.0"}
90-
source_dir = root.find(".//m:sourceDirectory", ns)
91-
if source_dir is not None and source_dir.text:
92-
return source_dir.text
93-
except ET.ParseError:
94-
pass
84+
root = _get_pom_root_cached(project_root)
85+
if root is not None:
86+
source_dir = root.find(".//m:sourceDirectory", _MAVEN_NS)
87+
if source_dir is not None and source_dir.text:
88+
return source_dir.text
9589

9690
# Fallback to src directory
9791
if (project_root / "src").is_dir():
@@ -103,22 +97,15 @@ def detect_java_source_root(project_root: Path) -> str:
10397
def detect_java_test_root(project_root: Path) -> str:
10498
"""Detect the Java test root directory."""
10599
# Standard Maven/Gradle layout
106-
standard_test = project_root / "src" / "test" / "java"
107-
if standard_test.is_dir():
100+
if (project_root / "src" / "test" / "java").is_dir():
108101
return "src/test/java"
109102

110103
# Try to detect from pom.xml
111-
pom_path = project_root / "pom.xml"
112-
if pom_path.exists():
113-
try:
114-
tree = ET.parse(pom_path)
115-
root = tree.getroot()
116-
ns = {"m": "http://maven.apache.org/POM/4.0.0"}
117-
test_source_dir = root.find(".//m:testSourceDirectory", ns)
118-
if test_source_dir is not None and test_source_dir.text:
119-
return test_source_dir.text
120-
except ET.ParseError:
121-
pass
104+
root = _get_pom_root_cached(project_root)
105+
if root is not None:
106+
test_source_dir = root.find(".//m:testSourceDirectory", _MAVEN_NS)
107+
if test_source_dir is not None and test_source_dir.text:
108+
return test_source_dir.text
122109

123110
# Fallback patterns
124111
if (project_root / "test").is_dir():
@@ -461,10 +448,9 @@ def configure_java_project(setup_info: JavaSetupInfo) -> bool:
461448
test_root = setup_info.test_root_override or detect_java_test_root(curdir)
462449

463450
# Only include non-default values
464-
defaults = {"module-root": "src/main/java", "tests-root": "src/test/java"}
465-
if source_root != defaults["module-root"]:
451+
if source_root != "src/main/java":
466452
config["module-root"] = source_root
467-
if test_root != defaults["tests-root"]:
453+
if test_root != "src/test/java":
468454
config["tests-root"] = test_root
469455

470456
if setup_info.formatter_override is not None and setup_info.formatter_override != ["disabled"]:
@@ -539,6 +525,18 @@ def get_java_test_command(build_tool: JavaBuildTool) -> str:
539525
return "mvn test"
540526

541527

528+
@lru_cache(maxsize=8)
529+
def _get_pom_root_cached(project_root: Path) -> Union[ET.Element, None]:
530+
pom_path = project_root / "pom.xml"
531+
if not pom_path.exists():
532+
return None
533+
try:
534+
tree = ET.parse(pom_path)
535+
return tree.getroot()
536+
except ET.ParseError:
537+
return None
538+
539+
542540
formatter_warning_shown = False
543541

544542
_SPOTLESS_COMMANDS = {

0 commit comments

Comments
 (0)