Class 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  
    • 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.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • 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)