package st.gravel.support.jvm; import st.gravel.core.Symbol; import st.gravel.support.compiler.ast.ClassNode; import st.gravel.support.compiler.ast.PackageNode; import st.gravel.support.jvm.runtime.ImageBootstrapper; public class PackageMirror { public PackageMirror(Symbol name) { super(); this.name = name; } private final Symbol name; public Symbol name() { return name; } private PackageNode packageNode() { return ArrayExtensions.detect_ifNone_(ImageBootstrapper.systemMapping .systemDefinitionNode().packageNodes(), new Predicate1<PackageNode>() { @Override public boolean value_(PackageNode arg1) { return arg1.name() == name; } }, new Block0<PackageNode>() { @Override public PackageNode value() { throw new RuntimeException("Not found"); } }); } private ClassDescriptionMirror[] definedMirrors(final boolean isTrait) { return ArrayExtensions.collect_(ArrayExtensions.select_(packageNode() .classes(), new Predicate1<ClassNode>() { @Override public boolean value_(ClassNode arg1) { return arg1.isTrait() == isTrait; } }), new Block1<ClassDescriptionMirror, ClassNode>() { @Override public ClassDescriptionMirror value_(ClassNode node) { return ClassDescriptionMirror.forReference(node.reference()); } }); } public ClassDescriptionMirror[] definedTraits() { return definedMirrors(true); } public ClassDescriptionMirror[] definedClasses() { return definedMirrors(false); } }