![JAR search and dependency download from the Maven repository](/logo.png)
org.snapscript.tree.define.ClassBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of snap-all Show documentation
Show all versions of snap-all Show documentation
Dynamic scripting for the JVM
package org.snapscript.tree.define;
import java.util.concurrent.atomic.AtomicReference;
import org.snapscript.core.Module;
import org.snapscript.core.Result;
import org.snapscript.core.ResultType;
import org.snapscript.core.Scope;
import org.snapscript.core.Statement;
import org.snapscript.core.Type;
import org.snapscript.tree.annotation.AnnotationList;
public class ClassBuilder extends Statement {
private final AtomicReference reference;
private final ClassConstantBuilder builder;
private final AnnotationList annotations;
private final TypeHierarchy hierarchy;
private final TypeName name;
public ClassBuilder(AnnotationList annotations, TypeName name, TypeHierarchy hierarchy) {
this.reference = new AtomicReference();
this.builder = new ClassConstantBuilder();
this.annotations = annotations;
this.hierarchy = hierarchy;
this.name = name;
}
@Override
public Result define(Scope outer) throws Exception {
Module module = outer.getModule();
String alias = name.getName(outer);
Type type = module.addType(alias);
reference.set(type);
return ResultType.getNormal(type);
}
@Override
public Result compile(Scope outer) throws Exception {
Type type = reference.get();
Scope scope = type.getScope();
annotations.apply(scope, type);
builder.declare(scope, type);
hierarchy.extend(scope, type);
return ResultType.getNormal(type);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy