system/src/sc/layer/Layer.java
public void replacesLayer(String otherLayerName) {
      if (replacesLayerNames == null)
         replacesLayerNames = new ArrayList<String>();
      replacesLayerNames.add(otherLayerName);
   }
/**
    * For fine-grained control over layer ordering, a downstream layer can mark that it replaces an update stream layer.
    * This is always going to be a layer which the downstream layer already extends.  When determining layer ordering, if a third layer
    * extends the upstream layer, it will also follow the downstream layer which replaces that upstream layer.
    * For example, if html.schtml replaces html.core, and you extend html.core, you'll be guaranteed to follow html.schtml in the layer list.
    *
    * Why this is necessary?  In most cases, you explicitly depend upon a feature of another layer so you usually extend the layers you depend upon.
    * But if another framework layer modifies that feature, and it follows your layer in the stack, supporting all of the invalidation and rebuilds necessary
    * so you end up recompiling all affected files is too much work.
    * The tagPackageList is an example of a feature that does not always respect the strict layering due to it's flexibility.  So classes put into that list
    * may need to replace the layer which defined the tagPackage entry.
    *
    * Essentially, your application layer may need to inherit a dependency on the last layer which replaces the feature to work properly.
    */
For fine-grained control over layer ordering, a downstream layer can mark that it replaces an update stream layer.
This is always going to be a layer which the downstream layer already extends.  When determining layer ordering, if a third layer
extends the upstream layer, it will also follow the downstream layer which replaces that upstream layer.
For example, if html.schtml replaces html.core, and you extend html.core, you'll be guaranteed to follow html.schtml in the layer list.



Essentially, your application layer may need to inherit a dependency on the last layer which replaces the feature to work properly.
For fine - grained control over layer ordering a downstream layer can mark that it replaces an update stream layer . This is always going to be a layer which the downstream layer already extends . When determining layer ordering if a third layer extends the upstream layer it will also follow the downstream layer which replaces that upstream layer . For example if html . schtml replaces html . core and you extend html . core you ' ll be guaranteed to follow html . schtml in the layer list . Essentially your application layer may need to inherit a dependency on the last layer which replaces the feature to work properly .
public void replacesLayer(String otherLayerName) {
      if (replacesLayerNames == null)
         replacesLayerNames = new ArrayList<String>();
      replacesLayerNames.add(otherLayerName);
   }
public void replacesLayer ( String otherLayerName ) { if ( replacesLayerNames == null ) replacesLayerNames = new ArrayList < String > ( ) ; replacesLayerNames . add ( otherLayerName ) ; }
For fine-grained control over layer ordering, a downstream layer can mark that it replaces an update stream layer.
For fine - grained control over layer ordering a downstream layer can mark that it replaces an update stream layer .