//////////////////////
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
//////////////////////

[[core-runtime,Core Runtime]]
= Core Runtime =

[devstatus]
--------------
source=core/runtime/dev-status.xml
--------------

First of all, your code should never, ever, have a dependency on Core Runtime. If you think you need this, you should
probably contact users@polygene.apache.org mailing list and see if your usecase can either be solved in a existing way or
perhaps that a new Core SPI Extension is needed.

include::../../build/docs/buildinfo/artifact.txt[]

Let's repeat that; *Never, never, ever depend on Core Runtime*. Make sure that the compile dependency does NOT include
the `org.apache.polygene.core.runtime` jar.

== Custom AssemblyHelper ==
BUT, there are super-rare cases, where a custom AssemblyHelper might be needed. One known use-case is to introduce
an alternative bytecode generation algorithm, either better than the one we have, or for a different system, such
as Dalvik.

To do this, add the +AssemblyHelper+ implementation instance as +metaInfo+ to the +ApplicationAssembly+

We think this is so rare, that the +AssemblyHelper+ class will remain in the +core/runtime+ module and has not
been promoted to the +core/bootstrap+ module. If you plan to use this feature, please contact the Polygene development
team at +dev@polygene.apache.org+ to ensure we can make this a better supported, backed by real usecases.

Fictitious example of using a hypothetical Dalvik capable classloader;

[snippet,java]
--------------
source=core/runtime/src/test/java/org/apache/polygene/runtime/bootstrap/docs/DocumentationSupport.java
tag=customAssemblyHelper
--------------
