Package org.drools.compiler.builder.impl
Class ClassHierarchyManager
- java.lang.Object
-
- org.drools.compiler.builder.impl.ClassHierarchyManager
-
public class ClassHierarchyManager extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.List<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr>
sortedDescriptors
protected java.util.Map<org.drools.drl.ast.descr.QualifiedName,java.util.Collection<org.drools.drl.ast.descr.QualifiedName>>
taxonomy
protected TypeDeclarationContext
tdContext
-
Constructor Summary
Constructors Constructor Description ClassHierarchyManager(java.util.Collection<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unsortedDescrs, TypeDeclarationContext tdContext, BuildResultCollector results)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addDeclarationToPackagePreservingOrder(org.drools.base.rule.TypeDeclaration type, org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr typeDescr, org.drools.base.definitions.InternalKnowledgePackage tgtPackage, java.util.Map<java.lang.String,PackageRegistry> pkgRegistryMap)
protected org.drools.drl.ast.descr.TypeFieldDescr
buildInheritedFieldDescrFromDefinition(org.kie.api.definition.type.FactField fld, org.drools.drl.ast.descr.TypeDeclarationDescr typeDescr)
java.util.List<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr>
getSortedDescriptors()
protected static boolean
hasCircularDependency(org.drools.drl.ast.descr.QualifiedName name, org.drools.drl.ast.descr.QualifiedName typeName, java.util.Map<org.drools.drl.ast.descr.QualifiedName,java.util.Collection<org.drools.drl.ast.descr.QualifiedName>> taxonomy)
void
inheritFields(PackageRegistry pkgRegistry, org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr typeDescr, BuildResultCollector results, java.util.Map<java.lang.String,org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unprocessableDescrs)
protected void
mergeFields(java.lang.String simpleSuperTypeName, java.lang.String superTypePackageName, java.lang.String fullSuper, org.drools.drl.ast.descr.TypeDeclarationDescr typeDescr, java.util.Map<java.lang.String,org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unprocessableDescrs, org.drools.util.TypeResolver resolver, BuildResultCollector results)
protected void
mergeInheritedFields(org.drools.drl.ast.descr.TypeDeclarationDescr typeDescr, java.util.Map<java.lang.String,org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unprocessableDescrs, org.drools.util.TypeResolver typeResolver, BuildResultCollector results)
In order to build a declared class, the fields inherited from its superclass(es) are added to its declaration.protected java.util.List<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr>
sortByHierarchy(java.util.Collection<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unsortedDescrs, TypeDeclarationContext tdContext, BuildResultCollector results)
Utility method to sort declared beans.
-
-
-
Field Detail
-
tdContext
protected final TypeDeclarationContext tdContext
-
sortedDescriptors
protected java.util.List<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> sortedDescriptors
-
taxonomy
protected java.util.Map<org.drools.drl.ast.descr.QualifiedName,java.util.Collection<org.drools.drl.ast.descr.QualifiedName>> taxonomy
-
-
Constructor Detail
-
ClassHierarchyManager
public ClassHierarchyManager(java.util.Collection<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unsortedDescrs, TypeDeclarationContext tdContext, BuildResultCollector results)
-
-
Method Detail
-
getSortedDescriptors
public java.util.List<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> getSortedDescriptors()
-
sortByHierarchy
protected java.util.List<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> sortByHierarchy(java.util.Collection<org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unsortedDescrs, TypeDeclarationContext tdContext, BuildResultCollector results)
Utility method to sort declared beans. Linearizes the hierarchy, i.e.generates a sequence of declaration such that, if Sub is subclass of Sup, then the index of Sub will be > than the index of Sup in the resulting collection. This ensures that superclasses are processed before their subclasses
-
hasCircularDependency
protected static boolean hasCircularDependency(org.drools.drl.ast.descr.QualifiedName name, org.drools.drl.ast.descr.QualifiedName typeName, java.util.Map<org.drools.drl.ast.descr.QualifiedName,java.util.Collection<org.drools.drl.ast.descr.QualifiedName>> taxonomy)
-
inheritFields
public void inheritFields(PackageRegistry pkgRegistry, org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr typeDescr, BuildResultCollector results, java.util.Map<java.lang.String,org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unprocessableDescrs)
-
mergeInheritedFields
protected void mergeInheritedFields(org.drools.drl.ast.descr.TypeDeclarationDescr typeDescr, java.util.Map<java.lang.String,org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unprocessableDescrs, org.drools.util.TypeResolver typeResolver, BuildResultCollector results)
In order to build a declared class, the fields inherited from its superclass(es) are added to its declaration. Inherited descriptors are marked as such to distinguish them from native ones. Various scenarioes are possible. (i) The superclass has been declared in the DRL as well : the fields are cloned as inherited (ii) The superclass is imported (external), but some of its fields have been tagged with metadata (iii) The superclass is imported.The search for field descriptors is carried out in the order. (i) and (ii+iii) are mutually exclusive. The search is as such: (i) The superclass' declared fields are used to build the base class additional fields (iii) The superclass is inspected to discover its (public) fields, from which descriptors are generated (ii) Both (i) and (iii) are applied, but the declared fields override the inspected ones
- Parameters:
typeDescr
- The base class descriptor, to be completed with the inherited fields descriptors
-
mergeFields
protected void mergeFields(java.lang.String simpleSuperTypeName, java.lang.String superTypePackageName, java.lang.String fullSuper, org.drools.drl.ast.descr.TypeDeclarationDescr typeDescr, java.util.Map<java.lang.String,org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr> unprocessableDescrs, org.drools.util.TypeResolver resolver, BuildResultCollector results)
-
buildInheritedFieldDescrFromDefinition
protected org.drools.drl.ast.descr.TypeFieldDescr buildInheritedFieldDescrFromDefinition(org.kie.api.definition.type.FactField fld, org.drools.drl.ast.descr.TypeDeclarationDescr typeDescr)
-
addDeclarationToPackagePreservingOrder
public void addDeclarationToPackagePreservingOrder(org.drools.base.rule.TypeDeclaration type, org.drools.drl.ast.descr.AbstractClassTypeDeclarationDescr typeDescr, org.drools.base.definitions.InternalKnowledgePackage tgtPackage, java.util.Map<java.lang.String,PackageRegistry> pkgRegistryMap)
-
-