Skip to content

Commit f477ab7

Browse files
authored
Merge pull request #157 from tylerstennett/feat/jfield-variable-initializers
feat: add per-variable field initializers from codeanalyzer 2.3.8
2 parents 4f6b7da + 136c7ba commit f477ab7

4 files changed

Lines changed: 26 additions & 1 deletion

File tree

cldk/analysis/java/codeanalyzer/jar/codeanalyzer-2.3.7.jar renamed to cldk/analysis/java/codeanalyzer/jar/codeanalyzer-2.3.8.jar

28.7 MB
Binary file not shown.

cldk/models/java/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@
3939
- :mod:`~cldk.models.java.enums`: Related enumeration types.
4040
"""
4141
from typing import Any, Dict, List, Optional, Union
42+
4243
from pydantic import BaseModel, Field, field_validator, model_validator
44+
4345
from cldk.models.java.enums import CRUDOperationType, CRUDQueryType
4446

4547
_CALLABLES_LOOKUP_TABLE = dict()
@@ -111,6 +113,8 @@ class JField(BaseModel):
111113
variables (List[str]): The variables declared in the field.
112114
modifiers (List[str]): The modifiers applied to the field (e.g., public, static).
113115
annotations (List[str]): The annotations applied to the field.
116+
variable_initializers (Dict[str, str] | None): Initializer expression text keyed by
117+
variable name. None is used as the default for backwards compatibility.
114118
"""
115119

116120
comment: JComment | None
@@ -120,6 +124,7 @@ class JField(BaseModel):
120124
variables: List[str]
121125
modifiers: List[str]
122126
annotations: List[str]
127+
variable_initializers: Dict[str, str] | None = None
123128

124129

125130
class JCallableParameter(BaseModel):

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ include = [
8383
]
8484

8585
[tool.backend-versions]
86-
codeanalyzer-java = "2.3.7"
86+
codeanalyzer-java = "2.3.8"
8787
codeanalyzer-python = "0.1.14"
8888

8989
########################################

tests/analysis/java/test_java_analysis.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,26 @@ def test_get_fields(test_fixture, analysis_json):
682682
assert len(fields) == 8
683683
for field in fields:
684684
assert isinstance(field, JField)
685+
# Analyses generated by codeanalyzer < 2.3.8 lack variable_initializers
686+
assert field.variable_initializers is None
687+
688+
689+
def test_get_fields_variable_initializers(java_code):
690+
"""Should return per-variable initializer text for fields"""
691+
692+
cldk = CLDK(language="java")
693+
analysis = cldk.analysis(
694+
source_code=java_code,
695+
analysis_backend_path=None,
696+
eager=True,
697+
analysis_level=AnalysisLevel.symbol_table,
698+
)
699+
700+
fields = analysis.get_fields("com.acme.modres.WeatherServlet")
701+
by_variable = {variable: field for field in fields for variable in field.variables}
702+
assert by_variable["serialVersionUID"].variable_initializers == {"serialVersionUID": "1L"}
703+
assert by_variable["WEATHER_API_KEY"].variable_initializers == {"WEATHER_API_KEY": '"WEATHER_API_KEY"'}
704+
assert by_variable["customerInfo"].variable_initializers == {}
685705

686706

687707
def test_get_nested_classes(test_fixture, analysis_json):

0 commit comments

Comments
 (0)