// Path: shared/src/main/java/org/kobjects/nativehtml/dom/Element.java
// public interface Element {
//   String getLocalName();
//   void setAttribute(String name, String value);
//   String getAttribute(String name);
// 
//   Element getParentElement();
//   void setComputedStyle(CssStyleDeclaration style);
//   
//   /**
//    * Used internally
//    */
//   ElementType getElementType();
//   ContentType getElementContentType();
// 
//   /**
//    * Used internally in insertBefore.
//    */
//   void setParentElement(Element parent);
// 
//   HtmlCollection getChildren();
// 
//   CssStyleDeclaration getStyle();
//   CssStyleDeclaration getComputedStyle();
// 
//   String getTextContent();
// 
//   void setTextContent(String textContent);
// 
//   void insertBefore(Element newChild, Element referenceChild);
//   Document getOwnerDocument();
//   
// }
// 
// Path: shared/src/main/java/org/kobjects/nativehtml/dom/HtmlCollection.java
// public interface HtmlCollection {
// 
//     HtmlCollection EMPTY = new HtmlCollection() {
//         @Override
//         public int getLength() {
//             return 0;
//         }
// 
//         @Override
//         public Element item(int index) {
//             return null;
//         }
//     };
// 
//     int getLength();
//     Element item(int index);
// }


import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.kobjects.nativehtml.dom.Element;
import org.kobjects.nativehtml.dom.HtmlCollection;
    if (inherit != null) {
      style.inherit(inherit);
    }

    ArrayList<CssStyleDeclaration> queue = new ArrayList<>();
    ArrayList<CssStyleSheet> childStyles = new ArrayList<>();
    ArrayList<CssStyleSheet> descendantStyles = new ArrayList<>();
  
    int size = applyHere.size();
    for (int i = 0; i < size; i++) {
      CssStyleSheet styleSheet = applyHere.get(i);
      styleSheet.collectStyles(element, queue, childStyles, descendantStyles);
    }
    size = applyAnywhere.size();
    for (int i = 0; i < size; i++) {
      CssStyleSheet styleSheet = applyAnywhere.get(i);
      descendantStyles.add(styleSheet);
      styleSheet.collectStyles(element, queue, childStyles, descendantStyles);
    }
  
    for (int i = 0; i < queue.size(); i++) {
      style.setFrom((queue.get(i)));
    }

    style.setFrom(element.getStyle());
  

    element.setComputedStyle(style);
    // recurse....
    
// Path: shared/src/main/java/org/kobjects/nativehtml/dom/Element.java
// public interface Element {
//   String getLocalName();
//   void setAttribute(String name, String value);
//   String getAttribute(String name);
// 
//   Element getParentElement();
//   void setComputedStyle(CssStyleDeclaration style);
//   
//   /**
//    * Used internally
//    */
//   ElementType getElementType();
//   ContentType getElementContentType();
// 
//   /**
//    * Used internally in insertBefore.
//    */
//   void setParentElement(Element parent);
// 
//   HtmlCollection getChildren();
// 
//   CssStyleDeclaration getStyle();
//   CssStyleDeclaration getComputedStyle();
// 
//   String getTextContent();
// 
//   void setTextContent(String textContent);
// 
//   void insertBefore(Element newChild, Element referenceChild);
//   Document getOwnerDocument();
//   
// }
// 
// Path: shared/src/main/java/org/kobjects/nativehtml/dom/HtmlCollection.java
// public interface HtmlCollection {
// 
//     HtmlCollection EMPTY = new HtmlCollection() {
//         @Override
//         public int getLength() {
//             return 0;
//         }
// 
//         @Override
//         public Element item(int index) {
//             return null;
//         }
//     };
// 
//     int getLength();
//     Element item(int index);
// }


// Path: shared/src/main/java/org/kobjects/nativehtml/css/CssStyleSheet.java
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.kobjects.nativehtml.dom.Element;
import org.kobjects.nativehtml.dom.HtmlCollection;

    if (inherit != null) {
      style.inherit(inherit);
    }

    ArrayList<CssStyleDeclaration> queue = new ArrayList<>();
    ArrayList<CssStyleSheet> childStyles = new ArrayList<>();
    ArrayList<CssStyleSheet> descendantStyles = new ArrayList<>();
  
    int size = applyHere.size();
    for (int i = 0; i < size; i++) {
      CssStyleSheet styleSheet = applyHere.get(i);
      styleSheet.collectStyles(element, queue, childStyles, descendantStyles);
    }
    size = applyAnywhere.size();
    for (int i = 0; i < size; i++) {
      CssStyleSheet styleSheet = applyAnywhere.get(i);
      descendantStyles.add(styleSheet);
      styleSheet.collectStyles(element, queue, childStyles, descendantStyles);
    }
  
    for (int i = 0; i < queue.size(); i++) {
      style.setFrom((queue.get(i)));
    }

    style.setFrom(element.getStyle());
  

    element.setComputedStyle(style);
    // recurse....
    
    HtmlCollection children = element.getChildren();