Bug 1079950
| Summary: | Package builder unable to find declared array class | ||
|---|---|---|---|
| Product: | [Retired] JBoss BRMS Platform 6 | Reporter: | Mario Fusco <mfusco> |
| Component: | BRE | Assignee: | Mario Fusco <mfusco> |
| Status: | CLOSED CURRENTRELEASE | QA Contact: | Tomas Schlosser <tschloss> |
| Severity: | medium | Docs Contact: | |
| Priority: | high | ||
| Version: | 6.0.0 | CC: | kverlaen |
| Target Milestone: | ER1 | ||
| Target Release: | 6.0.2 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2014-08-06 19:53:19 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
Mario Fusco <mario.fusco> updated the status of jira DROOLS-439 to Resolved Cherry-picked to 6.0.x with https://github.com/droolsjbpm/drools/commit/514c957ad Verified in BRMS 6.0.2 ER2. |
When declaring a fact type with an array field, where the array type is declared in the same package, for example: declare Owner name : String end declare Pet owners : Owner[] end The following build error occurs: [Message [id=1, level=ERROR, path=pets.drl, line=5, column=0 text=Unable to find class 'Owner']] This error doesn't always occur when an array field is declared. It's dependent on the order in which each fact type is processed. PackageBuilder attempts to order fact types for processing based on the declared super type and attribute types. The following loop in PackageBuilder.sortByHierarchy() processes each field looking for field type dependencies: for (TypeFieldDescr field : tdescr.getFields().values()) { QualifiedName typeName = new QualifiedName(field.getPattern().getObjectType()); if (!hasCircularDependency(name, typeName, taxonomy)) { supers.add(typeName); } } However I don't think it correctly spots the dependency when the field type is an array. This issue can be worked around by declaring an unused field of the same type as the array: declare Owner name : String end declare Pet owners : Owner[] _unused: Owner end