public void visitPackageDescr(final PackageDescr packageDescr) { final String packageName = packageDescr.getName(); final String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + XmlDumper.eol + " <package name=\"" + packageName + "\" " + XmlDumper.eol + "\txmlns=\"http://drools.org/drools-5.2\" " + XmlDumper.eol + "\txmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\" " + XmlDumper.eol + "\txs:schemaLocation=\"http://drools.org/drools-5.2 drools.org/drools-5.2.xsd\"> " + XmlDumper.eol; appendXmlDump( xmlString ); appendXmlDump( processImportsList( packageDescr.getImports() ) ); appendXmlDump( processGlobalsList( packageDescr.getGlobals() ) ); appendXmlDump( processFunctionImportsList( packageDescr.getFunctionImports() )); appendXmlDump( processFunctionsList( packageDescr.getFunctions() ) ); appendXmlDump( processRules( packageDescr.getRules() ) ); appendXmlDump( "</package>" ); }
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 ); } } }
private PackageDescrBuilderImpl() { super( null, new PackageDescr() ); }
public List<AbstractClassTypeDeclarationDescr> getClassAndEnumDeclarationDescrs() { List<AbstractClassTypeDeclarationDescr> list = new ArrayList<AbstractClassTypeDeclarationDescr>( getEnumDeclarations() ); list.addAll( getTypeDeclarations() ); return Collections.unmodifiableList( list ); }
List<PackageDescr> packageDescrsForPackage = packages.get( packageDescr.getName() ); if (packageDescrsForPackage == null) { packageDescrsForPackage = new ArrayList<PackageDescr>(); packages.put( packageDescr.getName(), packageDescrsForPackage ); Set<ImportDescr> imports = new HashSet<ImportDescr>(); for (PackageDescr pd : packageDescrsForPackage) { imports.addAll( pd.getImports() ); pd.getImports().clear(); pd.addAllImports(imports); if (!packageDescr.getAttributes().isEmpty()) { Map<String, AttributeDescr> pkgAttributes = packageAttributes.get( packageDescr.getNamespace() ); if (pkgAttributes == null) { pkgAttributes = new HashMap<String, AttributeDescr>(); this.packageAttributes.put( packageDescr.getNamespace(), pkgAttributes ); for (AttributeDescr attr : packageDescr.getAttributes()) { pkgAttributes.put( attr.getName(), attr );
private void internalAdd(Resource resource, PackageDescr packageDescr) { List<ImportDescr> currentImports = getImports(); for (ImportDescr descr : packageDescr.getImports()) { if (!currentImports.contains(descr)) { addImport(descr); for (FunctionImportDescr descr : packageDescr.getFunctionImports()) { if (!currentFunctionImports.contains(descr)) { addFunctionImport(descr); for (AttributeDescr descr : packageDescr.getAttributes()) { if (!currentAttributeDescrs.contains(descr)) { addAttribute(descr); for (GlobalDescr descr : packageDescr.getGlobals()) { if (!currentGlobalDescrs.contains(descr)) { addGlobal(descr); for (FunctionDescr descr : packageDescr.getFunctions()) { if (!currentFunctionDescrs.contains(descr)) { addFunction(descr); for (RuleDescr descr : packageDescr.getRules()) { if (!ruleDescrs.contains(descr)) { addRule(descr); for (TypeDeclarationDescr descr : packageDescr.getTypeDeclarations()) { if (!typeDeclarationDescrs.contains(descr)) { addTypeDeclaration(descr);
for ( AbstractClassTypeDeclarationDescr typeDescr : packageDescr.getClassAndEnumDeclarationDescrs() ) { for ( ImportDescr id : packageDescr.getImports() ) { String imp = id.getTarget(); int separator = imp.lastIndexOf( '.' ); PackageRegistry pkgReg = this.pkgRegistryMap.get( packageDescr.getName() ); if ( pkgReg != null ) { try { typeDescr.setNamespace( packageDescr.getNamespace() ); // set the default namespace if ( !typeDescr.getNamespace().equals( packageDescr.getNamespace() ) ) { PackageDescr altDescr = new PackageDescr( typeDescr.getNamespace() ); if ( typeDescr instanceof TypeDeclarationDescr ) { altDescr.addTypeDeclaration( (TypeDeclarationDescr) typeDescr ); } else if ( typeDescr instanceof EnumDeclarationDescr) { altDescr.addEnumDeclaration( (EnumDeclarationDescr) typeDescr ); for ( ImportDescr imp : packageDescr.getImports() ) { altDescr.addImport( imp ); if (!getPackageRegistry().containsKey( altDescr.getNamespace() )) { newPackage(altDescr); mergePackage( this.pkgRegistryMap.get( altDescr.getNamespace() ), altDescr ); Collection<AbstractClassTypeDeclarationDescr> sortedTypeDescriptors = sortByHierarchy( packageDescr.getClassAndEnumDeclarationDescrs() );
private Set<String> getDeclaredTypes(PackageDescr pkgDescr) { Set<String> declaredTypes = new HashSet<String>(); for ( TypeDeclarationDescr typeDeclarationDescr : pkgDescr.getTypeDeclarations() ) { declaredTypes.add( typeDeclarationDescr.getTypeName() ); } return declaredTypes; }
private List<TypeDeclarationDescr> getDeclaredTypeHierachy(TypeDeclarationDescr td, List< ? > jars) { List<TypeDeclarationDescr> th = new ArrayList<TypeDeclarationDescr>(); th.add( td ); TypeDeclarationDescr std; while ( (std = getDeclaredSuperType( td )) != null ) { th.add( std ); td = std; } //If the super-most class has been imported attempt to make a pseudo TypeDeclaration for the imported class if ( this.pkgDescr.getImports().size() > 0 ) { for ( ImportDescr imp : this.pkgDescr.getImports() ) { if ( imp.getTarget().endsWith( "." + td.getTypeName() ) ) { TypeDeclarationDescr pseudoTypeDeclr = makePseudoTypeDeclarationDescrFromSuperClassType( imp.getTarget(), jars ); if ( pseudoTypeDeclr != null ) { th.add( pseudoTypeDeclr ); } } } } return th; }
for (ImportDescr id : packageDescr.getImports()) { if (id.getTarget().endsWith( "." + sup )) { if ( (sup != null) && (!sup.contains( "." )) && (packageDescr.getNamespace() != null && !packageDescr.getNamespace().isEmpty()) ) { for ( AbstractClassTypeDeclarationDescr td : packageDescr.getClassAndEnumDeclarationDescrs() ) { if ( sup.equals( td.getTypeName() ) ) { if ( td.getType().getFullName().contains( "." ) ) { sup = td.getType().getFullName(); } else { sup = packageDescr.getNamespace() + "." + sup;
private void processGlobals(PackageRegistry pkgRegistry, PackageDescr packageDescr) { for (final GlobalDescr global : packageDescr.getGlobals()) { final String identifier = global.getIdentifier(); String className = global.getType(); // JBRULES-3039: can't handle type name with generic params while (className.indexOf( '<' ) >= 0) { className = className.replaceAll( "<[^<>]+?>", "" ); } try { Class<?> clazz = pkgRegistry.getTypeResolver().resolveType(className); if ( clazz.isPrimitive() ) { this.results.add( new GlobalError( global, " Primitive types are not allowed in globals : " + className ) ); return; } pkgRegistry.getPackage().addGlobal( identifier, clazz ); this.globals.put( identifier, clazz ); } catch (final ClassNotFoundException e) { this.results.add( new GlobalError( global, e.getMessage() ) ); e.printStackTrace(); } } }
PackageDescr packageDescr = new PackageDescr( newPkg.getName() ); pkgRegistry = newPackage( packageDescr ); mergePackage( this.pkgRegistryMap.get( packageDescr.getNamespace() ), packageDescr ); pkg = pkgRegistry.getPackage();
public PackageDescrBuilder attribute( String name, String value, AttributeDescr.Type type ) { descr.addAttribute( new AttributeDescr( name, value, type ) ); return this; }
public FunctionDescrBuilder newFunction() { FunctionDescrBuilder function = new FunctionDescrBuilderImpl( this ); descr.addFunction( initDescr(function) ); return function; }
public EnumDeclarationDescrBuilder enumerative() { EnumDeclarationDescrBuilder eddb = new EnumDeclarationDescrBuilderImpl( parent ); descr.addEnumDeclaration( eddb.getDescr() ); return eddb; }
public EntryPointDeclarationDescrBuilder entryPoint() { EntryPointDeclarationDescrBuilder epb = new EntryPointDeclarationDescrBuilderImpl( parent); descr.addEntryPointDeclaration( epb.getDescr() ); return epb; }
private Set<String> getDeclaredTypes(PackageDescr pkgDescr) { Set<String> declaredTypes = new HashSet<String>(); for ( TypeDeclarationDescr typeDeclarationDescr : pkgDescr.getTypeDeclarations() ) { declaredTypes.add( typeDeclarationDescr.getTypeName() ); } return declaredTypes; }
private List<TypeDeclarationDescr> getDeclaredTypeHierachy(TypeDeclarationDescr td, List< ? > jars) { List<TypeDeclarationDescr> th = new ArrayList<TypeDeclarationDescr>(); th.add( td ); TypeDeclarationDescr std; while ( (std = getDeclaredSuperType( td )) != null ) { th.add( std ); td = std; } //If the super-most class has been imported attempt to make a pseudo TypeDeclaration for the imported class if ( this.pkgDescr.getImports().size() > 0 ) { for ( ImportDescr imp : this.pkgDescr.getImports() ) { if ( imp.getTarget().endsWith( "." + td.getTypeName() ) ) { TypeDeclarationDescr pseudoTypeDeclr = makePseudoTypeDeclarationDescrFromSuperClassType( imp.getTarget(), jars ); if ( pseudoTypeDeclr != null ) { th.add( pseudoTypeDeclr ); } } } } return th; }
private void populateGlobalInfo(final List jars) { // populating information for the globals for ( final Iterator it = pkgDescr.getGlobals().iterator(); it.hasNext(); ) { final GlobalDescr global = (GlobalDescr) it.next(); try { final String shortTypeName = getShortNameOfClass( global.getType() ); final Class< ? > clazz = loadClass( global.getType(), jars ); if ( !this.builder.hasFieldsForType( shortTypeName ) ) { loadClassFields( clazz, shortTypeName ); this.builder.addGlobalType( global.getIdentifier(), shortTypeName ); } if ( implementsCollection( clazz ) ) { this.builder.addGlobalCollection( global.getIdentifier() ); } this.builder.addGlobalType( global.getIdentifier(), shortTypeName ); } catch ( final IOException e ) { this.errors.add( "Error while inspecting class for global: " + global.getType() + " error message: " + e.getMessage() ); } } }
public PackageDescrBuilder attribute( String name, String value ) { descr.addAttribute( new AttributeDescr( name, value ) ); return this; }