public String getName() { return getNamespace() == null ? "" : getNamespace(); }
private void registerPackageDescr(Map<String, CompositePackageDescr> packages, Resource resource, PackageDescr packageDescr) { if (packageDescr != null) { CompositePackageDescr compositePackageDescr = packages.get(packageDescr.getNamespace()); if (compositePackageDescr == null) { packages.put(packageDescr.getNamespace(), new CompositePackageDescr(resource, packageDescr)); } else { compositePackageDescr.addPackageDescr(resource, packageDescr); } } }
public void addPackageDescr(Resource resource, PackageDescr packageDescr) { if (!getNamespace().equals(packageDescr.getNamespace())) { throw new RuntimeException("Composing PackageDescr in different namespaces"); } internalAdd(resource, packageDescr); }
public CompositePackageDescr(Resource resource, PackageDescr packageDescr) { super(packageDescr.getNamespace(), packageDescr.getDocumentation()); internalAdd(resource, packageDescr); }
private void buildRules(Collection<CompositePackageDescr> packages) { for (PackageDescr packageDescr : packages) { PackageRegistry pkgRegistry = pkgBuilder.getPackageRegistry(packageDescr.getNamespace()); pkgBuilder.processOtherDeclarations(pkgRegistry, packageDescr); pkgBuilder.compileAllRules(packageDescr, pkgRegistry); } }
PackageRegistry initPackageRegistry(PackageDescr packageDescr) { if (packageDescr == null) { return null; } //Derive namespace if (isEmpty( packageDescr.getNamespace() )) { packageDescr.setNamespace(this.configuration.getDefaultPackageName()); } validateUniqueRuleNames(packageDescr); if (!checkNamespace( packageDescr.getNamespace() )) { return null; } initPackage(packageDescr); PackageRegistry pkgRegistry = this.pkgRegistryMap.get( packageDescr.getNamespace() ); if (pkgRegistry == null) { // initialise the package and namespace if it hasn't been used before pkgRegistry = newPackage( packageDescr ); } return pkgRegistry; }
Map<String, AttributeDescr> pkgAttributes = packageAttributes.get( packageDescr.getNamespace() ); if (pkgAttributes == null) { pkgAttributes = new HashMap<String, AttributeDescr>(); this.packageAttributes.put( packageDescr.getNamespace(), pkgAttributes );
private void validateUniqueRuleNames( final PackageDescr packageDescr ) { final Set<String> names = new HashSet<String>(); PackageRegistry packageRegistry = this.pkgRegistryMap.get( packageDescr.getNamespace() ); Package pkg = null; if (packageRegistry != null) { pkg = packageRegistry.getPackage(); } for (final RuleDescr rule : packageDescr.getRules()) { validateRule(packageDescr, rule); final String name = rule.getName(); if (names.contains( name )) { this.results.add( new ParserError( rule.getResource(), "Duplicate rule name: " + name, rule.getLine(), rule.getColumn(), packageDescr.getNamespace() ) ); } if (pkg != null && pkg.getRule( name ) != null) { this.results.add( new DuplicateRule( rule, packageDescr, this.configuration ) ); } names.add( name ); } }
private void buildTypeDeclarations(Collection<CompositePackageDescr> packages) { for (PackageDescr packageDescr : packages) { for (TypeDeclarationDescr typeDeclarationDescr : packageDescr.getTypeDeclarations()) { if (pkgBuilder.isEmpty( typeDeclarationDescr.getNamespace() )) { typeDeclarationDescr.setNamespace( packageDescr.getNamespace() ); // set the default namespace } pkgBuilder.registerGeneratedType(typeDeclarationDescr); } } Map<String, List<PackageBuilder.TypeDefinition>> unresolvedTypes = new HashMap<String, List<PackageBuilder.TypeDefinition>>(); for (PackageDescr packageDescr : packages) { List<PackageBuilder.TypeDefinition> unresolvedTypesForPkg = buildTypeDeclarations(packageDescr); if (unresolvedTypesForPkg != null) { unresolvedTypes.put(packageDescr.getNamespace(), unresolvedTypesForPkg); } } for (Map.Entry<String, List<PackageBuilder.TypeDefinition>> unresolvedType : unresolvedTypes.entrySet()) { pkgBuilder.processUnresolvedTypes(pkgBuilder.getPackageRegistry(unresolvedType.getKey()), unresolvedType.getValue()); } for (PackageDescr packageDescr : packages) { for (ImportDescr importDescr : packageDescr.getImports()) { pkgBuilder.getPackageRegistry(packageDescr.getNamespace()).addImport( importDescr ); } } }
PackageRegistry pkgRegistry = this.pkgRegistryMap.get( packageDescr.getNamespace() ); Package pkg = pkgRegistry.getPackage();
private void addFactTemplate( final PackageDescr pkgDescr, final FactTemplateDescr factTemplateDescr ) { List<FieldTemplate> fields = new ArrayList<FieldTemplate>(); int index = 0; PackageRegistry pkgRegistry = this.pkgRegistryMap.get( pkgDescr.getNamespace() ); for (FieldTemplateDescr fieldTemplateDescr : factTemplateDescr.getFields()) { FieldTemplate fieldTemplate = null; try { fieldTemplate = new FieldTemplateImpl( fieldTemplateDescr.getName(), index++, pkgRegistry.getTypeResolver().resolveType(fieldTemplateDescr.getClassType()) ); } catch (final ClassNotFoundException e) { this.results.add( new FieldTemplateError( pkgRegistry.getPackage(), fieldTemplateDescr, null, "Unable to resolve Class '" + fieldTemplateDescr.getClassType() + "'")); } fields.add(fieldTemplate); } new FactTemplateImpl( pkgRegistry.getPackage(), factTemplateDescr.getName(), fields.toArray( new FieldTemplate[fields.size()] ) ); }
private void validateRule(PackageDescr packageDescr, RuleDescr rule) { if (rule.hasErrors()) { for (String error : rule.getErrors()) { this.results.add( new ParserError( rule.getResource(), error + " in rule " + rule.getName(), rule.getLine(), rule.getColumn(), packageDescr.getNamespace() ) ); } } }
if ( (sup != null) && (!sup.contains( "." )) && (packageDescr.getNamespace() != null && !packageDescr.getNamespace().isEmpty()) ) { for ( AbstractClassTypeDeclarationDescr td : packageDescr.getClassAndEnumDeclarationDescrs() ) { if ( sup.equals( td.getTypeName() ) ) { sup = td.getType().getFullName(); } else { sup = packageDescr.getNamespace() + "." + sup;
if (isEmpty(functionDescr.getNamespace())) { functionDescr.setNamespace(packageDescr.getNamespace()); if (isEmpty(ruleDescr.getNamespace())) { ruleDescr.setNamespace(packageDescr.getNamespace()); Map<String, AttributeDescr> pkgAttributes = packageAttributes.get(packageDescr.getNamespace()); inheritPackageAttributes(pkgAttributes, ruleDescr);
PackageDescr packageDescr = new PackageDescr( newPkg.getName() ); pkgRegistry = newPackage( packageDescr ); mergePackage( this.pkgRegistryMap.get( packageDescr.getNamespace() ), packageDescr ); pkg = pkgRegistry.getPackage();
typeDescr.setNamespace( packageDescr.getNamespace() ); // set the default namespace packageDescr ); if ( !typeDescr.getNamespace().equals( packageDescr.getNamespace() ) ) { altDescr.addImport( imp ); if (!getPackageRegistry().containsKey( altDescr.getNamespace() )) { newPackage(altDescr); mergePackage( this.pkgRegistryMap.get( altDescr.getNamespace() ), altDescr ); if (!typeDescr.getNamespace().equals( packageDescr.getNamespace() )) { continue;
private PackageRegistry newPackage( final PackageDescr packageDescr ) { Package pkg; if (this.ruleBase == null || ( pkg = this.ruleBase.getPackage( packageDescr.getName() ) ) == null) { // there is no rulebase or it does not define this package so define it pkg = new Package( packageDescr.getName() ); pkg.setClassFieldAccessorCache( new ClassFieldAccessorCache( this.rootClassLoader ) ); // if there is a rulebase then add the package. if (this.ruleBase != null) { // Must lock here, otherwise the assumption about addPackage/getPackage behavior below might be violated this.ruleBase.lock(); try { this.ruleBase.addPackage( pkg ); pkg = this.ruleBase.getPackage( packageDescr.getName() ); } finally { this.ruleBase.unlock(); } } else { // the RuleBase will also initialise the pkg.getDialectRuntimeRegistry().onAdd( this.rootClassLoader ); } } PackageRegistry pkgRegistry = new PackageRegistry( this, pkg ); // add default import for this namespace pkgRegistry.addImport( new ImportDescr( packageDescr.getNamespace() + ".*" ) ); this.pkgRegistryMap.put( packageDescr.getName(), pkgRegistry ); return pkgRegistry; }