Skip to content

Commit

Permalink
[DROOLS-4125] restore TypeResolver and RuleUnitDescritors after Knowl… (
Browse files Browse the repository at this point in the history
apache#2374)

* [DROOLS-4125] restore TypeResolver and RuleUnitDescritors after KnowledgePackage cloning

* additional change

* [DROOLS-4125] restore TypeResolver and RuleUnitDescritors after KnowledgePackage cloning
  • Loading branch information
mariofusco authored Jun 5, 2019
1 parent 4648f41 commit 1b379a3
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,52 +15,28 @@

package org.drools.compiler.compiler;

import java.util.HashSet;

import org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl;
import org.drools.compiler.lang.descr.ImportDescr;
import org.drools.core.definitions.InternalKnowledgePackage;
import org.drools.core.factmodel.traits.TraitRegistry;
import org.drools.core.rule.DialectRuntimeRegistry;
import org.drools.core.rule.ImportDeclaration;
import org.kie.api.io.Resource;
import org.kie.soup.project.datamodel.commons.types.ClassTypeResolver;
import org.kie.soup.project.datamodel.commons.types.TypeResolver;

public class PackageRegistry {

private static final String[] implicitImports = new String[]{
"org.kie.api.definition.rule.*",
"org.kie.api.definition.type.*",
"org.drools.core.factmodel.traits.Alias",
"org.drools.core.factmodel.traits.Trait",
"org.drools.core.factmodel.traits.Traitable",
"org.drools.core.beliefsystem.abductive.Abductive",
"org.drools.core.beliefsystem.abductive.Abducible"};

private final InternalKnowledgePackage pkg;
private String dialect;

private final DialectRuntimeRegistry dialectRuntimeRegistry;
private final DialectCompiletimeRegistry dialectCompiletimeRegistry;

private final TypeResolver typeResolver;

public PackageRegistry(ClassLoader rootClassLoader, KnowledgeBuilderConfigurationImpl pkgConf, InternalKnowledgePackage pkg) {
this.pkg = pkg;
this.dialectCompiletimeRegistry = pkgConf.buildDialectRegistry(rootClassLoader, pkgConf, this, pkg);
this.dialectRuntimeRegistry = pkg.getDialectRuntimeRegistry();

this.typeResolver = new ClassTypeResolver(new HashSet<String>(this.pkg.getImports().keySet()),
rootClassLoader,
this.pkg.getName());

this.typeResolver.addImport(pkg.getName() + ".*");
for (String implicitImport : implicitImports) {
this.typeResolver.addImplicitImport(implicitImport);
}

pkg.setTypeResolver(typeResolver);
pkg.setClassLoader(rootClassLoader);
}

public String getDialect() {
Expand Down Expand Up @@ -94,15 +70,14 @@ public void addImport(ImportDescr importDescr) {

public void registerImport(String importEntry) {
this.pkg.addImport(new ImportDeclaration(importEntry));
this.typeResolver.addImport(importEntry);
}

public void addStaticImport(ImportDescr importDescr) {
this.dialectCompiletimeRegistry.addStaticImport(importDescr);
}

public TypeResolver getTypeResolver() {
return this.typeResolver;
return pkg.getTypeResolver();
}

public void compileAll() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@

package org.drools.compiler.integrationtests;

import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.drools.compiler.Cheese;
import org.drools.compiler.CommonTestMethodBase;
import org.drools.compiler.FactA;
Expand Down Expand Up @@ -53,23 +59,19 @@
import org.kie.internal.builder.KnowledgeBuilderConfiguration;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.StatefulKnowledgeSession;
import org.mockito.ArgumentCaptor;

import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

public class DynamicRulesTest extends CommonTestMethodBase {

Expand Down Expand Up @@ -1098,7 +1100,7 @@ public void testDynamicRuleRemovalsSubNetworkAndNot() throws Exception {

}

@Test(timeout=10000)
@Test//(timeout=10000)
public void testSharedLIANodeRemoval() throws Exception {
// it's not a true share, but the liaNode will have two sinks, due to subnetwork.
String str = "global java.util.List list;\n";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public interface InternalKnowledgePackage extends KiePackage,

TypeResolver getTypeResolver();

void setTypeResolver(TypeResolver typeResolver);
void setClassLoader(ClassLoader classLoader);

RuleUnitDescriptionLoader getRuleUnitDescriptionLoader();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
import org.drools.core.definitions.rule.impl.RuleImpl;
import org.drools.core.factmodel.traits.TraitRegistry;
import org.drools.core.facttemplates.FactTemplate;
import org.drools.core.rule.Collect;
import org.drools.core.rule.DialectRuntimeRegistry;
import org.drools.core.rule.Function;
import org.drools.core.rule.ImportDeclaration;
Expand All @@ -61,12 +60,10 @@
import org.kie.api.definition.rule.Query;
import org.kie.api.definition.rule.Rule;
import org.kie.api.definition.type.FactType;
import org.kie.api.internal.assembler.KieAssemblers;
import org.kie.api.internal.io.ResourceTypePackage;
import org.kie.api.internal.utils.ServiceRegistry;
import org.kie.api.io.Resource;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.rule.AccumulateFunction;
import org.kie.soup.project.datamodel.commons.types.ClassTypeResolver;
import org.kie.soup.project.datamodel.commons.types.TypeResolver;

public class KnowledgePackageImpl
Expand All @@ -76,6 +73,15 @@ public class KnowledgePackageImpl

private static final long serialVersionUID = 510l;

private static final String[] implicitImports = new String[]{
"org.kie.api.definition.rule.*",
"org.kie.api.definition.type.*",
"org.drools.core.factmodel.traits.Alias",
"org.drools.core.factmodel.traits.Trait",
"org.drools.core.factmodel.traits.Traitable",
"org.drools.core.beliefsystem.abductive.Abductive",
"org.drools.core.beliefsystem.abductive.Abducible"};

/**
* Name of the pkg.
*/
Expand Down Expand Up @@ -344,8 +350,10 @@ public void setDialectRuntimeRegistry(DialectRuntimeRegistry dialectRuntimeRegis
}

public void addImport(final ImportDeclaration importDecl) {
this.imports.put(importDecl.getTarget(),
importDecl);
this.imports.put(importDecl.getTarget(), importDecl);
if (this.typeResolver != null) {
this.typeResolver.addImport( importDecl.getTarget() );
}
}

public Map<String, ImportDeclaration> getImports() {
Expand Down Expand Up @@ -644,8 +652,15 @@ public TypeResolver getTypeResolver() {
return typeResolver;
}

public void setTypeResolver(TypeResolver typeResolver) {
this.typeResolver = typeResolver;
public void setClassLoader(ClassLoader classLoader) {
if (typeResolver != null && typeResolver.getClassLoader() == classLoader) {
return;
}
this.typeResolver = new ClassTypeResolver(new HashSet<String>(getImports().keySet()), classLoader, getName());
typeResolver.addImport(getName() + ".*");
for (String implicitImport : implicitImports) {
typeResolver.addImplicitImport(implicitImport);
}
this.ruleUnitDescriptionLoader = new RuleUnitDescriptionLoader(typeResolver);
}

Expand Down Expand Up @@ -814,7 +829,16 @@ public KnowledgePackageImpl deepCloneIfAlreadyInUse(ClassLoader classLoader) {
}
}

return ClassUtils.deepClone(this, classLoader, cloningResources);
KnowledgePackageImpl clonedPkg = ClassUtils.deepClone(this, classLoader, cloningResources);
clonedPkg.setClassLoader( classLoader );

if (ruleUnitDescriptionLoader != null) {
for (String ruleUnit : ruleUnitDescriptionLoader.getDescriptions().keySet()) {
clonedPkg.getRuleUnitDescriptionLoader().getDescription( ruleUnit );
}
}

return clonedPkg;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,6 @@
import org.kie.api.definition.rule.Direct;
import org.kie.api.definition.rule.Propagation;
import org.kie.api.definition.type.Role;
import org.kie.soup.project.datamodel.commons.types.ClassTypeResolver;
import org.kie.soup.project.datamodel.commons.types.TypeResolver;

import static java.util.stream.Collectors.toList;

Expand Down Expand Up @@ -215,9 +213,7 @@ public ClassLoader getClassLoader() {
private KnowledgePackageImpl createKiePackage(String name) {
KnowledgePackageImpl kpkg = new KnowledgePackageImpl( name );
kpkg.setClassFieldAccessorCache(new ClassFieldAccessorCache( getClassLoader() ) );
TypeResolver typeResolver = new ClassTypeResolver( new HashSet<>( kpkg.getImports().keySet() ), getClassLoader(), name );
typeResolver.addImport( name + ".*" );
kpkg.setTypeResolver(typeResolver);
kpkg.setClassLoader( getClassLoader() );
return kpkg;
}

Expand Down

0 comments on commit 1b379a3

Please sign in to comment.