added contract update into asset workspace
This commit is contained in:
parent
bf4dc17469
commit
b88a4e3c62
@ -9,12 +9,7 @@ import p.studio.compiler.source.identifiers.HostBindingId;
|
|||||||
import p.studio.compiler.source.tables.HostBindingTable;
|
import p.studio.compiler.source.tables.HostBindingTable;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public final class PbsHostAdmissionValidator {
|
public final class PbsHostAdmissionValidator {
|
||||||
|
|||||||
@ -6,12 +6,7 @@ import p.studio.compiler.pbs.ast.PbsAst;
|
|||||||
import p.studio.compiler.pbs.semantics.PbsBuiltinLayoutResolver;
|
import p.studio.compiler.pbs.semantics.PbsBuiltinLayoutResolver;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.OptionalLong;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public final class PbsReservedMetadataExtractor {
|
public final class PbsReservedMetadataExtractor {
|
||||||
|
|||||||
@ -5,17 +5,17 @@ import p.studio.compiler.pbs.ast.PbsAst;
|
|||||||
import p.studio.compiler.pbs.semantics.PbsSemanticsErrors;
|
import p.studio.compiler.pbs.semantics.PbsSemanticsErrors;
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticPhase;
|
import p.studio.compiler.source.diagnostics.DiagnosticPhase;
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.NameId;
|
|
||||||
import p.studio.compiler.source.identifiers.ModuleId;
|
import p.studio.compiler.source.identifiers.ModuleId;
|
||||||
|
import p.studio.compiler.source.identifiers.NameId;
|
||||||
import p.studio.compiler.source.tables.IntrinsicTable;
|
import p.studio.compiler.source.tables.IntrinsicTable;
|
||||||
import p.studio.compiler.source.tables.NameTable;
|
import p.studio.compiler.source.tables.NameTable;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||||
|
|
||||||
final class PbsExecutableBodyLowerer {
|
final class PbsExecutableBodyLowerer {
|
||||||
private final PbsExecutableCallsiteEmitter callsiteEmitter = new PbsExecutableCallsiteEmitter();
|
private final PbsExecutableCallsiteEmitter callsiteEmitter = new PbsExecutableCallsiteEmitter();
|
||||||
private final PbsExecutableStackAnalyzer stackAnalyzer = new PbsExecutableStackAnalyzer();
|
private final PbsExecutableStackAnalyzer stackAnalyzer = new PbsExecutableStackAnalyzer();
|
||||||
|
|||||||
@ -4,20 +4,16 @@ import p.studio.compiler.pbs.PbsFrontendCompiler;
|
|||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.source.identifiers.CallableId;
|
import p.studio.compiler.source.identifiers.CallableId;
|
||||||
import p.studio.compiler.source.identifiers.ModuleId;
|
import p.studio.compiler.source.identifiers.ModuleId;
|
||||||
import p.studio.compiler.source.tables.CallableShapeTable;
|
import p.studio.compiler.source.tables.*;
|
||||||
import p.studio.compiler.source.tables.CallableSignatureRef;
|
|
||||||
import p.studio.compiler.source.tables.CallableTable;
|
|
||||||
import p.studio.compiler.source.tables.NameTable;
|
|
||||||
import p.studio.compiler.source.tables.TypeSurfaceTable;
|
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||||
|
|
||||||
final class PbsExecutableCallableRegistryFactory {
|
final class PbsExecutableCallableRegistryFactory {
|
||||||
private final PbsCallableShapeSurfaceService callableShapeSurfaceService = new PbsCallableShapeSurfaceService();
|
private final PbsCallableShapeSurfaceService callableShapeSurfaceService = new PbsCallableShapeSurfaceService();
|
||||||
|
|
||||||
|
|||||||
@ -9,13 +9,13 @@ import p.studio.compiler.source.identifiers.NameId;
|
|||||||
import p.studio.compiler.source.tables.NameTable;
|
import p.studio.compiler.source.tables.NameTable;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||||
|
|
||||||
final class PbsExecutableMetadataIndexFactory {
|
final class PbsExecutableMetadataIndexFactory {
|
||||||
|
|
||||||
PbsExecutableMetadataIndex create(
|
PbsExecutableMetadataIndex create(
|
||||||
|
|||||||
@ -3,11 +3,7 @@ package p.studio.compiler.pbs.lowering;
|
|||||||
import p.studio.compiler.models.IRBackendExecutableFunction;
|
import p.studio.compiler.models.IRBackendExecutableFunction;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayDeque;
|
import java.util.*;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
final class PbsExecutableStackAnalyzer {
|
final class PbsExecutableStackAnalyzer {
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package p.studio.compiler.pbs.parser;
|
package p.studio.compiler.pbs.parser;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.pbs.lexer.PbsToken;
|
|
||||||
import p.studio.compiler.pbs.lexer.PbsTokenKind;
|
import p.studio.compiler.pbs.lexer.PbsTokenKind;
|
||||||
import p.studio.compiler.source.Span;
|
import p.studio.compiler.source.Span;
|
||||||
|
|
||||||
|
|||||||
@ -5,13 +5,7 @@ import p.studio.compiler.source.Span;
|
|||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public final class PbsBuiltinLayoutResolver {
|
public final class PbsBuiltinLayoutResolver {
|
||||||
private static final Set<String> BUILTIN_SCALAR_TYPES = Set.of("int", "float", "bool", "str");
|
private static final Set<String> BUILTIN_SCALAR_TYPES = Set.of("int", "float", "bool", "str");
|
||||||
|
|||||||
@ -1,18 +1,12 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.source.Span;
|
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||||
|
import p.studio.compiler.source.Span;
|
||||||
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.PriorityQueue;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
final class PbsConstSemanticsValidator {
|
final class PbsConstSemanticsValidator {
|
||||||
private final PbsFlowTypeOps typeOps = new PbsFlowTypeOps();
|
private final PbsFlowTypeOps typeOps = new PbsFlowTypeOps();
|
||||||
|
|||||||
@ -7,12 +7,7 @@ import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
|||||||
import p.studio.compiler.source.tables.NameTable;
|
import p.studio.compiler.source.tables.NameTable;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public final class PbsDeclarationSemanticsValidator {
|
public final class PbsDeclarationSemanticsValidator {
|
||||||
private static final String ATTR_HOST = "Host";
|
private static final String ATTR_HOST = "Host";
|
||||||
|
|||||||
@ -1,12 +1,8 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.*;
|
||||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprUse;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
|
||||||
|
|
||||||
final class PbsFlowAssignmentAnalyzer {
|
final class PbsFlowAssignmentAnalyzer {
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||||
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
final class PbsFlowBodyAnalyzer {
|
final class PbsFlowBodyAnalyzer {
|
||||||
private final PbsFlowTypeOps typeOps = new PbsFlowTypeOps();
|
private final PbsFlowTypeOps typeOps = new PbsFlowTypeOps();
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||||
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
|
|
||||||
final class PbsFlowBodyContext {
|
final class PbsFlowBodyContext {
|
||||||
private final Scope scope;
|
private final Scope scope;
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprResult;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprResult;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprUse;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprUse;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||||
|
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||||
|
|
||||||
final class PbsFlowBranchExpressionAnalyzer {
|
final class PbsFlowBranchExpressionAnalyzer {
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||||
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
final class PbsFlowCallableBodyAnalyzer {
|
final class PbsFlowCallableBodyAnalyzer {
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
|
|||||||
@ -1,15 +1,10 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.*;
|
||||||
import p.studio.compiler.source.Span;
|
import p.studio.compiler.source.Span;
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.CallableSymbol;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprResult;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprUse;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TupleField;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
||||||
|
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
|
||||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprResult;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprResult;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||||
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
|
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|||||||
@ -1,12 +1,8 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.*;
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprResult;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprUse;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
|
||||||
|
|
||||||
final class PbsFlowExpressionAnalyzer {
|
final class PbsFlowExpressionAnalyzer {
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprUse;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprUse;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||||
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
|
|
||||||
final class PbsFlowExpressionContext {
|
final class PbsFlowExpressionContext {
|
||||||
private final Scope scope;
|
private final Scope scope;
|
||||||
|
|||||||
@ -1,13 +1,9 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.*;
|
||||||
import p.studio.compiler.source.Span;
|
import p.studio.compiler.source.Span;
|
||||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprUse;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Model;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
|
||||||
|
|
||||||
final class PbsFlowStatementAnalyzer {
|
final class PbsFlowStatementAnalyzer {
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
package p.studio.compiler.pbs.semantics;
|
package p.studio.compiler.pbs.semantics;
|
||||||
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprResult;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.ExprResult;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TupleField;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TupleField;
|
||||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||||
|
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|||||||
@ -1,20 +1,20 @@
|
|||||||
package p.studio.compiler.pbs.stdlib;
|
package p.studio.compiler.pbs.stdlib;
|
||||||
|
|
||||||
|
import p.studio.compiler.models.SourceHandle;
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.pbs.lexer.PbsLexer;
|
import p.studio.compiler.pbs.lexer.PbsLexer;
|
||||||
import p.studio.compiler.pbs.linking.PbsModuleVisibilityValidator;
|
import p.studio.compiler.pbs.linking.PbsModuleVisibilityValidator;
|
||||||
import p.studio.compiler.pbs.parser.PbsBarrelParser;
|
import p.studio.compiler.pbs.parser.PbsBarrelParser;
|
||||||
import p.studio.compiler.pbs.parser.PbsParser;
|
import p.studio.compiler.pbs.parser.PbsParser;
|
||||||
import p.studio.compiler.source.tables.FileTable;
|
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.FileId;
|
import p.studio.compiler.source.identifiers.FileId;
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
import p.studio.compiler.models.SourceHandle;
|
import p.studio.compiler.source.tables.FileTable;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public final class InterfaceModuleLoader {
|
public final class InterfaceModuleLoader {
|
||||||
public InterfaceModuleLoader() {
|
public InterfaceModuleLoader() {
|
||||||
|
|||||||
@ -14,13 +14,7 @@ import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
|||||||
import p.studio.compiler.source.identifiers.ModuleId;
|
import p.studio.compiler.source.identifiers.ModuleId;
|
||||||
import p.studio.utilities.logs.LogAggregator;
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
|
|
||||||
import java.util.ArrayDeque;
|
import java.util.*;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class PBSFrontendPhaseService implements FrontendPhaseService {
|
public class PBSFrontendPhaseService implements FrontendPhaseService {
|
||||||
|
|||||||
@ -2,20 +2,14 @@ package p.studio.compiler.services;
|
|||||||
|
|
||||||
import p.studio.compiler.models.IRReservedMetadata;
|
import p.studio.compiler.models.IRReservedMetadata;
|
||||||
import p.studio.compiler.pbs.PbsFrontendCompiler;
|
import p.studio.compiler.pbs.PbsFrontendCompiler;
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
|
||||||
import p.studio.compiler.pbs.PbsReservedMetadataExtractor;
|
import p.studio.compiler.pbs.PbsReservedMetadataExtractor;
|
||||||
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.source.identifiers.FileId;
|
import p.studio.compiler.source.identifiers.FileId;
|
||||||
import p.studio.compiler.source.identifiers.ModuleId;
|
import p.studio.compiler.source.identifiers.ModuleId;
|
||||||
import p.studio.compiler.source.tables.ModuleTable;
|
import p.studio.compiler.source.tables.ModuleTable;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayDeque;
|
import java.util.*;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
final class PbsImportedSemanticContextService {
|
final class PbsImportedSemanticContextService {
|
||||||
private final PbsReservedMetadataExtractor reservedMetadataExtractor;
|
private final PbsReservedMetadataExtractor reservedMetadataExtractor;
|
||||||
|
|||||||
@ -27,13 +27,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayDeque;
|
import java.util.*;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
final class PbsModuleAssemblyService {
|
final class PbsModuleAssemblyService {
|
||||||
private final StdlibEnvironmentResolver stdlibEnvironmentResolver;
|
private final StdlibEnvironmentResolver stdlibEnvironmentResolver;
|
||||||
|
|||||||
@ -4,11 +4,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.studio.compiler.messages.BuildingIssueSink;
|
import p.studio.compiler.messages.BuildingIssueSink;
|
||||||
import p.studio.compiler.messages.FrontendPhaseContext;
|
import p.studio.compiler.messages.FrontendPhaseContext;
|
||||||
import p.studio.compiler.models.BuildStack;
|
import p.studio.compiler.models.*;
|
||||||
import p.studio.compiler.models.IRBackend;
|
|
||||||
import p.studio.compiler.models.ProjectDescriptor;
|
|
||||||
import p.studio.compiler.models.SourceHandle;
|
|
||||||
import p.studio.compiler.models.SourceKind;
|
|
||||||
import p.studio.compiler.pbs.ast.PbsAst;
|
import p.studio.compiler.pbs.ast.PbsAst;
|
||||||
import p.studio.compiler.pbs.lexer.PbsLexer;
|
import p.studio.compiler.pbs.lexer.PbsLexer;
|
||||||
import p.studio.compiler.pbs.linking.PbsLinkErrors;
|
import p.studio.compiler.pbs.linking.PbsLinkErrors;
|
||||||
@ -37,11 +33,7 @@ import java.util.List;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsGateUSdkInterfaceConformanceTest {
|
class PbsGateUSdkInterfaceConformanceTest {
|
||||||
|
|
||||||
|
|||||||
@ -28,10 +28,7 @@ import java.util.Map;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsGateUStdlibCompileTest {
|
class PbsGateUStdlibCompileTest {
|
||||||
|
|
||||||
|
|||||||
@ -6,9 +6,7 @@ import p.studio.compiler.pbs.lexer.PbsLexer;
|
|||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.FileId;
|
import p.studio.compiler.source.identifiers.FileId;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsBarrelParserTest {
|
class PbsBarrelParserTest {
|
||||||
|
|
||||||
|
|||||||
@ -6,10 +6,7 @@ import p.studio.compiler.pbs.lexer.PbsLexer;
|
|||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.FileId;
|
import p.studio.compiler.source.identifiers.FileId;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsExprParserTest {
|
class PbsExprParserTest {
|
||||||
|
|
||||||
|
|||||||
@ -6,9 +6,7 @@ import p.studio.compiler.pbs.lexer.PbsLexer;
|
|||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.FileId;
|
import p.studio.compiler.source.identifiers.FileId;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsParserStatementsTest {
|
class PbsParserStatementsTest {
|
||||||
|
|
||||||
|
|||||||
@ -8,10 +8,7 @@ import p.studio.compiler.source.identifiers.FileId;
|
|||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsParserTest {
|
class PbsParserTest {
|
||||||
|
|
||||||
|
|||||||
@ -5,9 +5,7 @@ import p.studio.compiler.pbs.PbsFrontendCompiler;
|
|||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.FileId;
|
import p.studio.compiler.source.identifiers.FileId;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsSemanticsControlFlowTest {
|
class PbsSemanticsControlFlowTest {
|
||||||
|
|
||||||
|
|||||||
@ -5,9 +5,7 @@ import p.studio.compiler.pbs.PbsFrontendCompiler;
|
|||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.FileId;
|
import p.studio.compiler.source.identifiers.FileId;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsSemanticsDeclarationsTest {
|
class PbsSemanticsDeclarationsTest {
|
||||||
|
|
||||||
|
|||||||
@ -5,9 +5,7 @@ import p.studio.compiler.pbs.PbsFrontendCompiler;
|
|||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.FileId;
|
import p.studio.compiler.source.identifiers.FileId;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PbsSemanticsFallthroughTest {
|
class PbsSemanticsFallthroughTest {
|
||||||
|
|
||||||
|
|||||||
@ -9,9 +9,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class InterfaceModuleLoaderTest {
|
class InterfaceModuleLoaderTest {
|
||||||
|
|
||||||
|
|||||||
@ -9,12 +9,12 @@ import p.studio.compiler.models.ProjectDescriptor;
|
|||||||
import p.studio.compiler.models.SourceHandle;
|
import p.studio.compiler.models.SourceHandle;
|
||||||
import p.studio.compiler.models.SourceKind;
|
import p.studio.compiler.models.SourceKind;
|
||||||
import p.studio.compiler.pbs.PbsHostAdmissionErrors;
|
import p.studio.compiler.pbs.PbsHostAdmissionErrors;
|
||||||
|
import p.studio.compiler.pbs.linking.PbsLinkErrors;
|
||||||
|
import p.studio.compiler.pbs.semantics.PbsSemanticsErrors;
|
||||||
import p.studio.compiler.pbs.stdlib.InterfaceModuleLoader;
|
import p.studio.compiler.pbs.stdlib.InterfaceModuleLoader;
|
||||||
import p.studio.compiler.pbs.stdlib.StdlibEnvironment;
|
import p.studio.compiler.pbs.stdlib.StdlibEnvironment;
|
||||||
import p.studio.compiler.pbs.stdlib.StdlibEnvironmentResolver;
|
import p.studio.compiler.pbs.stdlib.StdlibEnvironmentResolver;
|
||||||
import p.studio.compiler.pbs.stdlib.StdlibModuleSource;
|
import p.studio.compiler.pbs.stdlib.StdlibModuleSource;
|
||||||
import p.studio.compiler.pbs.linking.PbsLinkErrors;
|
|
||||||
import p.studio.compiler.pbs.semantics.PbsSemanticsErrors;
|
|
||||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
import p.studio.compiler.source.tables.FileTable;
|
import p.studio.compiler.source.tables.FileTable;
|
||||||
@ -29,12 +29,9 @@ import java.nio.file.Path;
|
|||||||
import java.nio.file.attribute.BasicFileAttributes;
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class PBSFrontendPhaseServiceTest {
|
class PBSFrontendPhaseServiceTest {
|
||||||
|
|
||||||
|
|||||||
@ -6,8 +6,8 @@ import java.io.ByteArrayOutputStream;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class BytecodeEmitter {
|
public class BytecodeEmitter {
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package p.studio.compiler.backend.irvm;
|
package p.studio.compiler.backend.irvm;
|
||||||
|
|
||||||
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
||||||
import p.studio.compiler.backend.bytecode.BytecodeModule;
|
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@ -3,12 +3,7 @@ package p.studio.compiler.backend.irvm;
|
|||||||
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayDeque;
|
import java.util.*;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class OptimizeIRVMService {
|
public class OptimizeIRVMService {
|
||||||
private final IRVMValidator validator;
|
private final IRVMValidator validator;
|
||||||
|
|||||||
@ -6,10 +6,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class BytecodeEmitterTest {
|
class BytecodeEmitterTest {
|
||||||
|
|
||||||
|
|||||||
@ -6,9 +6,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
|
|
||||||
class BytecodeLinkPrecheckServiceTest {
|
class BytecodeLinkPrecheckServiceTest {
|
||||||
|
|
||||||
|
|||||||
@ -6,9 +6,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
|
|
||||||
class BytecodeModuleTest {
|
class BytecodeModuleTest {
|
||||||
|
|
||||||
|
|||||||
@ -6,9 +6,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
|
|
||||||
class BytecodePreloadVerifierServiceTest {
|
class BytecodePreloadVerifierServiceTest {
|
||||||
|
|
||||||
|
|||||||
@ -6,18 +6,10 @@ import java.io.IOException;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
import static org.junit.jupiter.api.Assertions.fail;
|
|
||||||
|
|
||||||
class IRVMIntrinsicRegistryParityTest {
|
class IRVMIntrinsicRegistryParityTest {
|
||||||
private static final String VM_ARCH_INTRINSICS_PATH = "docs/vm-arch/INTRINSICS.csv";
|
private static final String VM_ARCH_INTRINSICS_PATH = "docs/vm-arch/INTRINSICS.csv";
|
||||||
|
|||||||
@ -8,9 +8,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
|
|
||||||
class IRVMValidatorTest {
|
class IRVMValidatorTest {
|
||||||
private final IRVMValidator validator = new IRVMValidator();
|
private final IRVMValidator validator = new IRVMValidator();
|
||||||
|
|||||||
@ -12,9 +12,7 @@ import p.studio.compiler.source.tables.IntrinsicReference;
|
|||||||
import p.studio.compiler.source.tables.ModuleReference;
|
import p.studio.compiler.source.tables.ModuleReference;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class LowerToIRVMServiceTest {
|
class LowerToIRVMServiceTest {
|
||||||
|
|
||||||
|
|||||||
@ -2,8 +2,8 @@ package p.studio.compiler.backend.irvm;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
||||||
import p.studio.compiler.backend.bytecode.BytecodePreloadVerifierService;
|
|
||||||
import p.studio.compiler.backend.bytecode.BytecodeModule;
|
import p.studio.compiler.backend.bytecode.BytecodeModule;
|
||||||
|
import p.studio.compiler.backend.bytecode.BytecodePreloadVerifierService;
|
||||||
import p.studio.compiler.models.IRBackend;
|
import p.studio.compiler.models.IRBackend;
|
||||||
import p.studio.compiler.models.IRBackendExecutableFunction;
|
import p.studio.compiler.models.IRBackendExecutableFunction;
|
||||||
import p.studio.compiler.source.Span;
|
import p.studio.compiler.source.Span;
|
||||||
@ -16,12 +16,10 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.util.ArrayDeque;
|
import java.util.ArrayDeque;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class OptimizeIRVMEquivalenceHarnessTest {
|
class OptimizeIRVMEquivalenceHarnessTest {
|
||||||
|
|
||||||
|
|||||||
@ -9,11 +9,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class OptimizeIRVMServiceTest {
|
class OptimizeIRVMServiceTest {
|
||||||
|
|
||||||
|
|||||||
@ -23,14 +23,9 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
|
|
||||||
class BackendGateIIntegrationTest {
|
class BackendGateIIntegrationTest {
|
||||||
private final RuntimeCompatibilityAdapter compatibilityAdapter = RuntimeCompatibilityAdapters.createDefault();
|
private final RuntimeCompatibilityAdapter compatibilityAdapter = RuntimeCompatibilityAdapters.createDefault();
|
||||||
|
|||||||
@ -9,9 +9,7 @@ import java.io.IOException;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
import static org.junit.jupiter.api.Assertions.fail;
|
|
||||||
|
|
||||||
class MainProjectPipelineIntegrationTest {
|
class MainProjectPipelineIntegrationTest {
|
||||||
|
|
||||||
|
|||||||
@ -10,9 +10,7 @@ import java.util.List;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
import static org.junit.jupiter.api.Assertions.fail;
|
|
||||||
|
|
||||||
class BackendConformanceMatrixSpecTest {
|
class BackendConformanceMatrixSpecTest {
|
||||||
private static final String MATRIX_RELATIVE_PATH =
|
private static final String MATRIX_RELATIVE_PATH =
|
||||||
|
|||||||
@ -1,15 +1,7 @@
|
|||||||
package p.studio.compiler.workspaces;
|
package p.studio.compiler.workspaces;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import p.studio.compiler.workspaces.stages.EmitBytecodePipelineStage;
|
import p.studio.compiler.workspaces.stages.*;
|
||||||
import p.studio.compiler.workspaces.stages.FrontendPhasePipelineStage;
|
|
||||||
import p.studio.compiler.workspaces.stages.LinkBytecodePipelineStage;
|
|
||||||
import p.studio.compiler.workspaces.stages.LoadSourcesPipelineStage;
|
|
||||||
import p.studio.compiler.workspaces.stages.LowerToIRVMPipelineStage;
|
|
||||||
import p.studio.compiler.workspaces.stages.OptimizeIRVMPipelineStage;
|
|
||||||
import p.studio.compiler.workspaces.stages.ResolveDepsPipelineStage;
|
|
||||||
import p.studio.compiler.workspaces.stages.VerifyBytecodePipelineStage;
|
|
||||||
import p.studio.compiler.workspaces.stages.WriteBytecodeArtifactPipelineStage;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@ -2,11 +2,7 @@ package p.studio.compiler.workspaces.stages;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
||||||
import p.studio.compiler.backend.irvm.IRVMFunction;
|
import p.studio.compiler.backend.irvm.*;
|
||||||
import p.studio.compiler.backend.irvm.IRVMInstruction;
|
|
||||||
import p.studio.compiler.backend.irvm.IRVMModule;
|
|
||||||
import p.studio.compiler.backend.irvm.IRVMOp;
|
|
||||||
import p.studio.compiler.backend.irvm.IRVMProgram;
|
|
||||||
import p.studio.compiler.messages.BuilderPipelineConfig;
|
import p.studio.compiler.messages.BuilderPipelineConfig;
|
||||||
import p.studio.compiler.models.BuilderPipelineContext;
|
import p.studio.compiler.models.BuilderPipelineContext;
|
||||||
import p.studio.compiler.models.IRBackend;
|
import p.studio.compiler.models.IRBackend;
|
||||||
@ -17,9 +13,7 @@ import p.studio.compiler.source.identifiers.FileId;
|
|||||||
import p.studio.utilities.logs.LogAggregator;
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class BackendSafetyGateSUTest {
|
class BackendSafetyGateSUTest {
|
||||||
|
|
||||||
|
|||||||
@ -8,10 +8,7 @@ import p.studio.compiler.models.BuilderPipelineContext;
|
|||||||
import p.studio.utilities.logs.LogAggregator;
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class EmitBytecodePipelineStageTest {
|
class EmitBytecodePipelineStageTest {
|
||||||
|
|
||||||
|
|||||||
@ -11,10 +11,7 @@ import p.studio.compiler.source.identifiers.FileId;
|
|||||||
import p.studio.utilities.logs.LogAggregator;
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class LowerToIRVMPipelineStageTest {
|
class LowerToIRVMPipelineStageTest {
|
||||||
|
|
||||||
|
|||||||
@ -1,20 +1,13 @@
|
|||||||
package p.studio.compiler.workspaces.stages;
|
package p.studio.compiler.workspaces.stages;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import p.studio.compiler.backend.irvm.IRVMFunction;
|
import p.studio.compiler.backend.irvm.*;
|
||||||
import p.studio.compiler.backend.irvm.IRVMInstruction;
|
|
||||||
import p.studio.compiler.backend.irvm.IRVMModule;
|
|
||||||
import p.studio.compiler.backend.irvm.IRVMOp;
|
|
||||||
import p.studio.compiler.backend.irvm.IRVMProgram;
|
|
||||||
import p.studio.compiler.messages.BuilderPipelineConfig;
|
import p.studio.compiler.messages.BuilderPipelineConfig;
|
||||||
import p.studio.compiler.models.BuilderPipelineContext;
|
import p.studio.compiler.models.BuilderPipelineContext;
|
||||||
import p.studio.utilities.logs.LogAggregator;
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class OptimizeIRVMPipelineStageTest {
|
class OptimizeIRVMPipelineStageTest {
|
||||||
|
|
||||||
|
|||||||
@ -11,10 +11,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class WriteBytecodeArtifactPipelineStageTest {
|
class WriteBytecodeArtifactPipelineStageTest {
|
||||||
|
|
||||||
|
|||||||
@ -3,11 +3,7 @@ package p.studio.compiler.source.diagnostics;
|
|||||||
import p.studio.compiler.source.Span;
|
import p.studio.compiler.source.Span;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class DiagnosticSink implements ReadOnlyCollection<Diagnostic> {
|
public class DiagnosticSink implements ReadOnlyCollection<Diagnostic> {
|
||||||
private final ArrayList<Diagnostic> diagnostics = new ArrayList<>();
|
private final ArrayList<Diagnostic> diagnostics = new ArrayList<>();
|
||||||
|
|||||||
@ -3,9 +3,6 @@ package p.studio.compiler.source.identifiers;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
|
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
|
||||||
public abstract class SourceIdentifier {
|
public abstract class SourceIdentifier {
|
||||||
|
|||||||
@ -2,9 +2,7 @@ package p.studio.compiler.source.tables;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
|
|
||||||
class HostBindingTableTest {
|
class HostBindingTableTest {
|
||||||
|
|
||||||
|
|||||||
@ -2,9 +2,7 @@ package p.studio.compiler.source.tables;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class IntrinsicTableTest {
|
class IntrinsicTableTest {
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,8 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
class ValidatePhaseTest {
|
class ValidatePhaseTest {
|
||||||
|
|
||||||
|
|||||||
@ -5,12 +5,7 @@ import lombok.Getter;
|
|||||||
import p.studio.compiler.source.identifiers.CallableId;
|
import p.studio.compiler.source.identifiers.CallableId;
|
||||||
import p.studio.compiler.source.identifiers.IntrinsicId;
|
import p.studio.compiler.source.identifiers.IntrinsicId;
|
||||||
import p.studio.compiler.source.identifiers.ModuleId;
|
import p.studio.compiler.source.identifiers.ModuleId;
|
||||||
import p.studio.compiler.source.tables.CallableSignatureRef;
|
import p.studio.compiler.source.tables.*;
|
||||||
import p.studio.compiler.source.tables.CallableTable;
|
|
||||||
import p.studio.compiler.source.tables.IntrinsicReference;
|
|
||||||
import p.studio.compiler.source.tables.IntrinsicTable;
|
|
||||||
import p.studio.compiler.source.tables.ModuleReference;
|
|
||||||
import p.studio.compiler.source.tables.ModuleTable;
|
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@ -11,9 +11,7 @@ import p.studio.compiler.source.tables.IntrinsicReference;
|
|||||||
import p.studio.compiler.source.tables.ModuleReference;
|
import p.studio.compiler.source.tables.ModuleReference;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class IRBackendExecutableContractTest {
|
class IRBackendExecutableContractTest {
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,6 @@
|
|||||||
package p.studio.utilities.structures;
|
package p.studio.utilities.structures;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ListIterator;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public interface ReadOnlyList<T> extends ReadOnlyCollection<T> {
|
public interface ReadOnlyList<T> extends ReadOnlyCollection<T> {
|
||||||
|
|||||||
@ -18,4 +18,6 @@ public interface PackerWorkspaceService {
|
|||||||
MoveAssetResult moveAsset(MoveAssetRequest request);
|
MoveAssetResult moveAsset(MoveAssetRequest request);
|
||||||
|
|
||||||
DeleteAssetResult deleteAsset(DeleteAssetRequest request);
|
DeleteAssetResult deleteAsset(DeleteAssetRequest request);
|
||||||
|
|
||||||
|
UpdateAssetContractResponse updateAssetContract(UpdateAssetContractRequest request);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package p.packer.dtos;
|
package p.packer.dtos;
|
||||||
|
|
||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
import p.packer.messages.assets.OutputCodecCatalog;
|
||||||
|
import p.packer.messages.assets.OutputFormatCatalog;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -9,7 +10,7 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public record PackerAssetDetailsDTO(
|
public record PackerAssetDetailsDTO(
|
||||||
PackerAssetSummaryDTO summary,
|
PackerAssetSummaryDTO summary,
|
||||||
String outputFormat,
|
OutputFormatCatalog outputFormat,
|
||||||
OutputCodecCatalog outputCodec,
|
OutputCodecCatalog outputCodec,
|
||||||
List<OutputCodecCatalog> availableOutputCodecs,
|
List<OutputCodecCatalog> availableOutputCodecs,
|
||||||
Map<OutputCodecCatalog, List<PackerCodecConfigurationFieldDTO>> codecConfigurationFieldsByCodec,
|
Map<OutputCodecCatalog, List<PackerCodecConfigurationFieldDTO>> codecConfigurationFieldsByCodec,
|
||||||
@ -18,7 +19,7 @@ public record PackerAssetDetailsDTO(
|
|||||||
|
|
||||||
public PackerAssetDetailsDTO {
|
public PackerAssetDetailsDTO {
|
||||||
Objects.requireNonNull(summary, "summary");
|
Objects.requireNonNull(summary, "summary");
|
||||||
outputFormat = Objects.requireNonNullElse(outputFormat, "unknown").trim();
|
outputFormat = Objects.requireNonNullElse(outputFormat, OutputFormatCatalog.UNKNOWN);
|
||||||
outputCodec = Objects.requireNonNullElse(outputCodec, OutputCodecCatalog.UNKNOWN);
|
outputCodec = Objects.requireNonNullElse(outputCodec, OutputCodecCatalog.UNKNOWN);
|
||||||
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
||||||
codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec"));
|
codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec"));
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
package p.packer.messages;
|
||||||
|
|
||||||
|
import p.packer.messages.assets.OutputCodecCatalog;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public record UpdateAssetContractRequest(
|
||||||
|
PackerProjectContext project,
|
||||||
|
AssetReference assetReference,
|
||||||
|
boolean preloadEnabled,
|
||||||
|
OutputCodecCatalog outputCodec,
|
||||||
|
Map<String, String> codecFieldValues) {
|
||||||
|
|
||||||
|
public UpdateAssetContractRequest {
|
||||||
|
Objects.requireNonNull(project, "project");
|
||||||
|
Objects.requireNonNull(assetReference, "assetReference");
|
||||||
|
outputCodec = Objects.requireNonNullElse(outputCodec, OutputCodecCatalog.UNKNOWN);
|
||||||
|
codecFieldValues = Map.copyOf(Objects.requireNonNullElse(codecFieldValues, Map.of()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
package p.packer.messages;
|
||||||
|
|
||||||
|
public record UpdateAssetContractResponse(boolean success, String errorMessage) {
|
||||||
|
}
|
||||||
@ -1,7 +1,9 @@
|
|||||||
package p.packer.models;
|
package p.packer.models;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
import p.packer.messages.assets.OutputCodecCatalog;
|
||||||
|
import p.packer.messages.assets.OutputFormatCatalog;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -13,7 +15,7 @@ public record PackerAssetDeclaration(
|
|||||||
String name,
|
String name,
|
||||||
AssetFamilyCatalog assetFamily,
|
AssetFamilyCatalog assetFamily,
|
||||||
Map<String, List<String>> inputsByRole,
|
Map<String, List<String>> inputsByRole,
|
||||||
String outputFormat,
|
OutputFormatCatalog outputFormat,
|
||||||
OutputCodecCatalog outputCodec,
|
OutputCodecCatalog outputCodec,
|
||||||
boolean preloadEnabled) {
|
boolean preloadEnabled) {
|
||||||
|
|
||||||
@ -25,9 +27,9 @@ public record PackerAssetDeclaration(
|
|||||||
name = Objects.requireNonNull(name, "name").trim();
|
name = Objects.requireNonNull(name, "name").trim();
|
||||||
assetFamily = Objects.requireNonNull(assetFamily, "assetFamily");
|
assetFamily = Objects.requireNonNull(assetFamily, "assetFamily");
|
||||||
inputsByRole = Map.copyOf(Objects.requireNonNull(inputsByRole, "inputsByRole"));
|
inputsByRole = Map.copyOf(Objects.requireNonNull(inputsByRole, "inputsByRole"));
|
||||||
outputFormat = Objects.requireNonNull(outputFormat, "outputFormat").trim();
|
outputFormat = Objects.requireNonNull(outputFormat, "outputFormat");
|
||||||
outputCodec = Objects.requireNonNull(outputCodec, "outputCodec");
|
outputCodec = Objects.requireNonNull(outputCodec, "outputCodec");
|
||||||
if (assetUuid.isBlank() || name.isBlank() || outputFormat.isBlank()) {
|
if (StringUtils.isBlank(assetUuid) || StringUtils.isBlank(name)) {
|
||||||
throw new IllegalArgumentException("declaration fields must not be blank");
|
throw new IllegalArgumentException("declaration fields must not be blank");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package p.packer.models;
|
package p.packer.models;
|
||||||
|
|
||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
import p.packer.messages.assets.OutputCodecCatalog;
|
||||||
|
import p.packer.messages.assets.OutputFormatCatalog;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -9,7 +10,7 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public record PackerAssetDetails(
|
public record PackerAssetDetails(
|
||||||
PackerAssetSummary summary,
|
PackerAssetSummary summary,
|
||||||
String outputFormat,
|
OutputFormatCatalog outputFormat,
|
||||||
OutputCodecCatalog outputCodec,
|
OutputCodecCatalog outputCodec,
|
||||||
List<OutputCodecCatalog> availableOutputCodecs,
|
List<OutputCodecCatalog> availableOutputCodecs,
|
||||||
Map<OutputCodecCatalog, List<PackerCodecConfigurationField>> codecConfigurationFieldsByCodec,
|
Map<OutputCodecCatalog, List<PackerCodecConfigurationField>> codecConfigurationFieldsByCodec,
|
||||||
@ -18,7 +19,7 @@ public record PackerAssetDetails(
|
|||||||
|
|
||||||
public PackerAssetDetails {
|
public PackerAssetDetails {
|
||||||
Objects.requireNonNull(summary, "summary");
|
Objects.requireNonNull(summary, "summary");
|
||||||
outputFormat = Objects.requireNonNullElse(outputFormat, "unknown").trim();
|
outputFormat = Objects.requireNonNullElse(outputFormat, OutputFormatCatalog.UNKNOWN);
|
||||||
outputCodec = Objects.requireNonNullElse(outputCodec, OutputCodecCatalog.UNKNOWN);
|
outputCodec = Objects.requireNonNullElse(outputCodec, OutputCodecCatalog.UNKNOWN);
|
||||||
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
||||||
codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec"));
|
codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec"));
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package p.packer.models;
|
package p.packer.models;
|
||||||
|
|
||||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
|
||||||
import p.packer.messages.AssetReference;
|
import p.packer.messages.AssetReference;
|
||||||
|
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||||
import p.packer.messages.assets.PackerAssetState;
|
import p.packer.messages.assets.PackerAssetState;
|
||||||
import p.packer.messages.assets.PackerBuildParticipation;
|
import p.packer.messages.assets.PackerBuildParticipation;
|
||||||
|
|
||||||
|
|||||||
@ -10,11 +10,7 @@ import p.packer.models.PackerRegistryState;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public final class FileSystemPackerRegistryRepository implements PackerRegistryRepository {
|
public final class FileSystemPackerRegistryRepository implements PackerRegistryRepository {
|
||||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||||
|
|||||||
@ -1,46 +1,17 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import p.packer.messages.PackerOperationStatus;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import p.packer.messages.PackerProjectContext;
|
import p.packer.PackerWorkspaceService;
|
||||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
|
||||||
import p.packer.messages.AssetReference;
|
|
||||||
import p.packer.messages.GetAssetActionsRequest;
|
|
||||||
import p.packer.messages.GetAssetActionsResult;
|
|
||||||
import p.packer.messages.MoveAssetRequest;
|
|
||||||
import p.packer.messages.MoveAssetResult;
|
|
||||||
import p.packer.messages.assets.OutputFormatCatalog;
|
|
||||||
import p.packer.messages.assets.PackerAssetState;
|
|
||||||
import p.packer.messages.assets.PackerBuildParticipation;
|
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
|
||||||
import p.packer.events.PackerEventKind;
|
import p.packer.events.PackerEventKind;
|
||||||
import p.packer.events.PackerEventSink;
|
import p.packer.events.PackerEventSink;
|
||||||
import p.packer.events.PackerProgress;
|
import p.packer.events.PackerProgress;
|
||||||
import p.packer.messages.CreateAssetRequest;
|
import p.packer.messages.*;
|
||||||
import p.packer.messages.CreateAssetResult;
|
import p.packer.messages.assets.*;
|
||||||
import p.packer.messages.DeleteAssetRequest;
|
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||||
import p.packer.messages.DeleteAssetResult;
|
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||||
import p.packer.messages.GetAssetDetailsRequest;
|
import p.packer.models.*;
|
||||||
import p.packer.messages.GetAssetDetailsResult;
|
|
||||||
import p.packer.messages.InitWorkspaceRequest;
|
|
||||||
import p.packer.messages.InitWorkspaceResult;
|
|
||||||
import p.packer.messages.ListAssetsRequest;
|
|
||||||
import p.packer.messages.ListAssetsResult;
|
|
||||||
import p.packer.messages.RegisterAssetRequest;
|
|
||||||
import p.packer.messages.RegisterAssetResult;
|
|
||||||
import p.packer.PackerWorkspaceService;
|
|
||||||
import p.packer.models.PackerAssetDeclarationParseResult;
|
|
||||||
import p.packer.models.PackerDeleteAssetEvaluation;
|
|
||||||
import p.packer.models.PackerAssetIdentity;
|
|
||||||
import p.packer.models.PackerMoveAssetEvaluation;
|
|
||||||
import p.packer.models.PackerRegisterAssetEvaluation;
|
|
||||||
import p.packer.models.PackerAssetSummary;
|
|
||||||
import p.packer.models.PackerDiagnostic;
|
|
||||||
import p.packer.models.PackerRegistryEntry;
|
|
||||||
import p.packer.models.PackerRegistryState;
|
|
||||||
import p.packer.models.PackerRuntimeAsset;
|
|
||||||
import p.packer.models.PackerRuntimeSnapshot;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@ -115,7 +86,7 @@ public final class FileSystemPackerWorkspaceService implements PackerWorkspaceSe
|
|||||||
events.emit(
|
events.emit(
|
||||||
PackerEventKind.ASSET_DISCOVERED,
|
PackerEventKind.ASSET_DISCOVERED,
|
||||||
"Discovered asset: " + summary.identity().assetName(),
|
"Discovered asset: " + summary.identity().assetName(),
|
||||||
new PackerProgress(total == 0 ? 1.0d : (index + 1) / (double) total, false),
|
new PackerProgress((index + 1) / (double) total, false),
|
||||||
List.of(summary.identity().assetName()));
|
List.of(summary.identity().assetName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,9 +376,9 @@ public final class FileSystemPackerWorkspaceService implements PackerWorkspaceSe
|
|||||||
sourceRoot,
|
sourceRoot,
|
||||||
targetRoot,
|
targetRoot,
|
||||||
targetManifestPath));
|
targetManifestPath));
|
||||||
final AssetReference canonicalReference = updatedEntry.isPresent()
|
final AssetReference canonicalReference = updatedEntry
|
||||||
? AssetReference.forAssetId(updatedEntry.get().assetId())
|
.map(packerRegistryEntry -> AssetReference.forAssetId(packerRegistryEntry.assetId()))
|
||||||
: AssetReference.forRelativeAssetRoot(targetRelativeRoot);
|
.orElseGet(() -> AssetReference.forRelativeAssetRoot(targetRelativeRoot));
|
||||||
final MoveAssetResult result = new MoveAssetResult(
|
final MoveAssetResult result = new MoveAssetResult(
|
||||||
PackerOperationStatus.SUCCESS,
|
PackerOperationStatus.SUCCESS,
|
||||||
"Asset moved: " + sourceRelativeRoot + " -> " + targetRelativeRoot,
|
"Asset moved: " + sourceRelativeRoot + " -> " + targetRelativeRoot,
|
||||||
@ -603,4 +574,111 @@ public final class FileSystemPackerWorkspaceService implements PackerWorkspaceSe
|
|||||||
.toList();
|
.toList();
|
||||||
return registry.withAssets(updatedEntries, registry.nextAssetId());
|
return registry.withAssets(updatedEntries, registry.nextAssetId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UpdateAssetContractResponse updateAssetContract(final UpdateAssetContractRequest request) {
|
||||||
|
final UpdateAssetContractRequest safeRequest = Objects.requireNonNull(request, "request");
|
||||||
|
final PackerProjectContext project = safeRequest.project();
|
||||||
|
return writeCoordinator.execute(project, () -> updateAssetContractInWriteLane(safeRequest));
|
||||||
|
}
|
||||||
|
|
||||||
|
private UpdateAssetContractResponse updateAssetContractInWriteLane(UpdateAssetContractRequest request) {
|
||||||
|
final PackerProjectContext project = request.project();
|
||||||
|
workspaceFoundation.initWorkspace(new InitWorkspaceRequest(project));
|
||||||
|
final PackerRuntimeSnapshot snapshot = runtimeRegistry.getOrLoad(project).snapshot();
|
||||||
|
final PackerDeleteAssetEvaluation evaluation = actionReadService.evaluateDelete(snapshot, project, request.assetReference());
|
||||||
|
if (!evaluation.canDelete()) {
|
||||||
|
return new UpdateAssetContractResponse(
|
||||||
|
false,
|
||||||
|
Objects.requireNonNullElse(evaluation.reason(), "Asset contract cannot be updated."));
|
||||||
|
}
|
||||||
|
if (request.outputCodec() == OutputCodecCatalog.UNKNOWN) {
|
||||||
|
return new UpdateAssetContractResponse(false, "Output codec is required.");
|
||||||
|
}
|
||||||
|
|
||||||
|
final Path assetRoot = evaluation.resolved().assetRoot();
|
||||||
|
final Path manifestPath = assetRoot.resolve("asset.json");
|
||||||
|
if (!Files.isRegularFile(manifestPath)) {
|
||||||
|
return new UpdateAssetContractResponse(false, "asset.json was not found for the requested asset root.");
|
||||||
|
}
|
||||||
|
|
||||||
|
final ObjectNode manifest;
|
||||||
|
try {
|
||||||
|
final JsonNode rawManifest = MAPPER.readTree(manifestPath.toFile());
|
||||||
|
if (!(rawManifest instanceof ObjectNode objectNode)) {
|
||||||
|
return new UpdateAssetContractResponse(false, "asset.json must contain a JSON object at the root.");
|
||||||
|
}
|
||||||
|
manifest = objectNode;
|
||||||
|
} catch (IOException exception) {
|
||||||
|
return new UpdateAssetContractResponse(false, "Unable to read asset manifest: " + exception.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
final OutputFormatCatalog outputFormat = resolveManifestOutputFormat(manifest);
|
||||||
|
if (outputFormat == OutputFormatCatalog.UNKNOWN) {
|
||||||
|
return new UpdateAssetContractResponse(false, "Output format is missing or invalid in asset.json.");
|
||||||
|
}
|
||||||
|
if (!outputFormat.supports(request.outputCodec())) {
|
||||||
|
return new UpdateAssetContractResponse(false, "Output codec is not supported for the selected output format.");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
patchManifestContract(manifest, request);
|
||||||
|
MAPPER.writerWithDefaultPrettyPrinter().writeValue(manifestPath.toFile(), manifest);
|
||||||
|
runtimeRegistry.update(project, (currentSnapshot, generation) -> runtimePatchService.afterUpdateAssetContract(
|
||||||
|
currentSnapshot,
|
||||||
|
generation,
|
||||||
|
assetRoot,
|
||||||
|
manifestPath,
|
||||||
|
evaluation.resolved().registryEntry()));
|
||||||
|
return new UpdateAssetContractResponse(true, null);
|
||||||
|
} catch (IOException exception) {
|
||||||
|
return new UpdateAssetContractResponse(false, "Unable to update asset contract: " + exception.getMessage());
|
||||||
|
} catch (RuntimeException exception) {
|
||||||
|
return new UpdateAssetContractResponse(false, "Unable to update runtime snapshot: " + exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private OutputFormatCatalog resolveManifestOutputFormat(ObjectNode manifest) {
|
||||||
|
final JsonNode outputNode = manifest.get("output");
|
||||||
|
if (!(outputNode instanceof ObjectNode outputObject)) {
|
||||||
|
return OutputFormatCatalog.UNKNOWN;
|
||||||
|
}
|
||||||
|
final JsonNode formatNode = outputObject.get("format");
|
||||||
|
if (formatNode == null || !formatNode.isTextual()) {
|
||||||
|
return OutputFormatCatalog.UNKNOWN;
|
||||||
|
}
|
||||||
|
return OutputFormatCatalog.fromManifestValue(formatNode.asText());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void patchManifestContract(ObjectNode manifest, UpdateAssetContractRequest request) {
|
||||||
|
final ObjectNode preloadNode = mutableObject(manifest, "preload");
|
||||||
|
preloadNode.put("enabled", request.preloadEnabled());
|
||||||
|
|
||||||
|
final ObjectNode outputNode = mutableObject(manifest, "output");
|
||||||
|
outputNode.put("codec", request.outputCodec().manifestValue());
|
||||||
|
|
||||||
|
final ObjectNode codecConfigurationNode = mutableObject(outputNode, "codec_configuration");
|
||||||
|
codecConfigurationNode.removeAll();
|
||||||
|
final String selectedCodecPrefix = request.outputCodec().name() + ":";
|
||||||
|
request.codecFieldValues().forEach((fieldKey, fieldValue) -> {
|
||||||
|
if (fieldKey == null || fieldKey.isBlank() || !fieldKey.startsWith(selectedCodecPrefix)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final String normalizedFieldKey = fieldKey.substring(selectedCodecPrefix.length()).trim();
|
||||||
|
if (normalizedFieldKey.isBlank()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
codecConfigurationNode.put(normalizedFieldKey, Objects.requireNonNullElse(fieldValue, ""));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private ObjectNode mutableObject(ObjectNode parent, String fieldName) {
|
||||||
|
final JsonNode current = parent.get(fieldName);
|
||||||
|
if (current instanceof ObjectNode objectNode) {
|
||||||
|
return objectNode;
|
||||||
|
}
|
||||||
|
final ObjectNode created = MAPPER.createObjectNode();
|
||||||
|
parent.set(fieldName, created);
|
||||||
|
return created;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,24 +1,10 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
import p.packer.messages.AssetReference;
|
import p.packer.messages.*;
|
||||||
import p.packer.messages.GetAssetActionsRequest;
|
|
||||||
import p.packer.messages.GetAssetActionsResult;
|
|
||||||
import p.packer.messages.PackerOperationStatus;
|
|
||||||
import p.packer.messages.PackerProjectContext;
|
|
||||||
import p.packer.messages.assets.AssetAction;
|
import p.packer.messages.assets.AssetAction;
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||||
import p.packer.models.PackerAssetActionAvailability;
|
import p.packer.models.*;
|
||||||
import p.packer.models.PackerAssetDeclaration;
|
|
||||||
import p.packer.models.PackerAssetDeclarationParseResult;
|
|
||||||
import p.packer.models.PackerDeleteAssetEvaluation;
|
|
||||||
import p.packer.models.PackerDiagnostic;
|
|
||||||
import p.packer.models.PackerMoveAssetEvaluation;
|
|
||||||
import p.packer.models.PackerRegisterAssetEvaluation;
|
|
||||||
import p.packer.models.PackerRegistryEntry;
|
|
||||||
import p.packer.models.PackerResolvedAssetReference;
|
|
||||||
import p.packer.models.PackerRuntimeAsset;
|
|
||||||
import p.packer.models.PackerRuntimeSnapshot;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.JsonNode;
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
import p.packer.messages.assets.OutputCodecCatalog;
|
||||||
|
import p.packer.messages.assets.OutputFormatCatalog;
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||||
import p.packer.models.PackerAssetDeclaration;
|
import p.packer.models.PackerAssetDeclaration;
|
||||||
@ -12,11 +13,7 @@ import p.packer.models.PackerDiagnostic;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public final class PackerAssetDeclarationParser {
|
public final class PackerAssetDeclarationParser {
|
||||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||||
@ -43,7 +40,7 @@ public final class PackerAssetDeclarationParser {
|
|||||||
final String name = requiredText(root, "name", diagnostics, manifestPath);
|
final String name = requiredText(root, "name", diagnostics, manifestPath);
|
||||||
final AssetFamilyCatalog assetFamily = requiredAssetFamily(root, diagnostics, manifestPath);
|
final AssetFamilyCatalog assetFamily = requiredAssetFamily(root, diagnostics, manifestPath);
|
||||||
final Map<String, List<String>> inputsByRole = requiredInputs(root.path("inputs"), diagnostics, manifestPath);
|
final Map<String, List<String>> inputsByRole = requiredInputs(root.path("inputs"), diagnostics, manifestPath);
|
||||||
final String outputFormat = requiredText(root.path("output"), "format", diagnostics, manifestPath);
|
final OutputFormatCatalog outputFormat = requiredOutputFormat(root.path("output"), diagnostics, manifestPath);
|
||||||
final OutputCodecCatalog outputCodec = requiredOutputCodec(root.path("output"), diagnostics, manifestPath);
|
final OutputCodecCatalog outputCodec = requiredOutputCodec(root.path("output"), diagnostics, manifestPath);
|
||||||
final Boolean preloadEnabled = requiredBoolean(root.path("preload"), "enabled", diagnostics, manifestPath);
|
final Boolean preloadEnabled = requiredBoolean(root.path("preload"), "enabled", diagnostics, manifestPath);
|
||||||
|
|
||||||
@ -118,6 +115,24 @@ public final class PackerAssetDeclarationParser {
|
|||||||
return field.booleanValue();
|
return field.booleanValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private OutputFormatCatalog requiredOutputFormat(JsonNode node, List<PackerDiagnostic> diagnostics, Path manifestPath) {
|
||||||
|
final String fmtValue = requiredText(node, "format", diagnostics, manifestPath);
|
||||||
|
if (fmtValue == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
final OutputFormatCatalog outputFormat = OutputFormatCatalog.fromManifestValue(fmtValue);
|
||||||
|
if (outputFormat == OutputFormatCatalog.UNKNOWN) {
|
||||||
|
diagnostics.add(new PackerDiagnostic(
|
||||||
|
PackerDiagnosticSeverity.ERROR,
|
||||||
|
PackerDiagnosticCategory.STRUCTURAL,
|
||||||
|
"Field 'output' must have a valid value.",
|
||||||
|
manifestPath,
|
||||||
|
true));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return outputFormat;
|
||||||
|
}
|
||||||
|
|
||||||
private OutputCodecCatalog requiredOutputCodec(JsonNode node, List<PackerDiagnostic> diagnostics, Path manifestPath) {
|
private OutputCodecCatalog requiredOutputCodec(JsonNode node, List<PackerDiagnostic> diagnostics, Path manifestPath) {
|
||||||
final String codecValue = requiredText(node, "codec", diagnostics, manifestPath);
|
final String codecValue = requiredText(node, "codec", diagnostics, manifestPath);
|
||||||
if (codecValue == null) {
|
if (codecValue == null) {
|
||||||
@ -128,7 +143,7 @@ public final class PackerAssetDeclarationParser {
|
|||||||
diagnostics.add(new PackerDiagnostic(
|
diagnostics.add(new PackerDiagnostic(
|
||||||
PackerDiagnosticSeverity.ERROR,
|
PackerDiagnosticSeverity.ERROR,
|
||||||
PackerDiagnosticCategory.STRUCTURAL,
|
PackerDiagnosticCategory.STRUCTURAL,
|
||||||
"Field 'codec' must be one of: NONE.",
|
"Field 'codec' must have a valid value.",
|
||||||
manifestPath,
|
manifestPath,
|
||||||
true));
|
true));
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@ -1,34 +1,13 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
import p.packer.messages.PackerOperationStatus;
|
import p.packer.messages.*;
|
||||||
import p.packer.messages.PackerProjectContext;
|
import p.packer.messages.assets.*;
|
||||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
|
||||||
import p.packer.messages.AssetReference;
|
|
||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
|
||||||
import p.packer.messages.assets.PackerAssetState;
|
|
||||||
import p.packer.messages.assets.PackerBuildParticipation;
|
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||||
import p.packer.messages.GetAssetDetailsRequest;
|
import p.packer.models.*;
|
||||||
import p.packer.messages.GetAssetDetailsResult;
|
|
||||||
import p.packer.models.PackerAssetDeclaration;
|
|
||||||
import p.packer.models.PackerAssetDeclarationParseResult;
|
|
||||||
import p.packer.models.PackerAssetDetails;
|
|
||||||
import p.packer.models.PackerAssetIdentity;
|
|
||||||
import p.packer.models.PackerAssetSummary;
|
|
||||||
import p.packer.models.PackerDiagnostic;
|
|
||||||
import p.packer.models.PackerRegistryEntry;
|
|
||||||
import p.packer.models.PackerResolvedAssetReference;
|
|
||||||
import p.packer.models.PackerRuntimeAsset;
|
|
||||||
import p.packer.models.PackerRuntimeSnapshot;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public final class PackerAssetDetailsService {
|
public final class PackerAssetDetailsService {
|
||||||
private final PackerRuntimeRegistry runtimeRegistry;
|
private final PackerRuntimeRegistry runtimeRegistry;
|
||||||
@ -126,7 +105,7 @@ public final class PackerAssetDetailsService {
|
|||||||
true);
|
true);
|
||||||
final PackerAssetDetails details = new PackerAssetDetails(
|
final PackerAssetDetails details = new PackerAssetDetails(
|
||||||
summary,
|
summary,
|
||||||
"unknown",
|
OutputFormatCatalog.UNKNOWN,
|
||||||
OutputCodecCatalog.UNKNOWN,
|
OutputCodecCatalog.UNKNOWN,
|
||||||
List.of(OutputCodecCatalog.NONE),
|
List.of(OutputCodecCatalog.NONE),
|
||||||
Map.of(OutputCodecCatalog.NONE, List.of()),
|
Map.of(OutputCodecCatalog.NONE, List.of()),
|
||||||
|
|||||||
@ -4,11 +4,7 @@ import p.packer.messages.AssetReference;
|
|||||||
import p.packer.messages.PackerProjectContext;
|
import p.packer.messages.PackerProjectContext;
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||||
import p.packer.models.PackerDiagnostic;
|
import p.packer.models.*;
|
||||||
import p.packer.models.PackerRegistryEntry;
|
|
||||||
import p.packer.models.PackerResolvedAssetReference;
|
|
||||||
import p.packer.models.PackerRuntimeAsset;
|
|
||||||
import p.packer.models.PackerRuntimeSnapshot;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
import p.packer.messages.PackerProjectContext;
|
|
||||||
import p.packer.events.PackerEvent;
|
import p.packer.events.PackerEvent;
|
||||||
import p.packer.events.PackerEventKind;
|
import p.packer.events.PackerEventKind;
|
||||||
import p.packer.events.PackerEventSink;
|
import p.packer.events.PackerEventSink;
|
||||||
import p.packer.events.PackerProgress;
|
import p.packer.events.PackerProgress;
|
||||||
|
import p.packer.messages.PackerProjectContext;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@ -3,18 +3,14 @@ package p.packer.services;
|
|||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
import p.packer.messages.assets.OutputCodecCatalog;
|
||||||
import p.packer.messages.assets.OutputFormatCatalog;
|
import p.packer.messages.assets.OutputFormatCatalog;
|
||||||
import p.packer.models.PackerCodecConfigurationField;
|
import p.packer.models.PackerCodecConfigurationField;
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
final class PackerOutputContractCatalog {
|
final class PackerOutputContractCatalog {
|
||||||
private PackerOutputContractCatalog() {
|
private PackerOutputContractCatalog() {
|
||||||
}
|
}
|
||||||
|
|
||||||
static OutputContractDefinition definitionFor(String outputFormat, OutputCodecCatalog selectedCodec) {
|
static OutputContractDefinition definitionFor(OutputFormatCatalog outputFormat, OutputCodecCatalog selectedCodec) {
|
||||||
final List<OutputCodecCatalog> availableCodecs = availableCodecsFor(outputFormat, selectedCodec);
|
final List<OutputCodecCatalog> availableCodecs = availableCodecsFor(outputFormat, selectedCodec);
|
||||||
return new OutputContractDefinition(
|
return new OutputContractDefinition(
|
||||||
availableCodecs,
|
availableCodecs,
|
||||||
@ -25,13 +21,12 @@ final class PackerOutputContractCatalog {
|
|||||||
java.util.LinkedHashMap::new)));
|
java.util.LinkedHashMap::new)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static List<OutputCodecCatalog> availableCodecsFor(String outputFormat, OutputCodecCatalog selectedCodec) {
|
static List<OutputCodecCatalog> availableCodecsFor(OutputFormatCatalog outputFormat, OutputCodecCatalog selectedCodec) {
|
||||||
final Set<OutputCodecCatalog> codecs = new LinkedHashSet<>();
|
final Set<OutputCodecCatalog> codecs = new LinkedHashSet<>();
|
||||||
final OutputFormatCatalog formatCatalog = OutputFormatCatalog.fromManifestValue(outputFormat);
|
if (outputFormat != OutputFormatCatalog.UNKNOWN) {
|
||||||
if (formatCatalog != OutputFormatCatalog.UNKNOWN) {
|
codecs.addAll(outputFormat.availableCodecs());
|
||||||
codecs.addAll(formatCatalog.availableCodecs());
|
|
||||||
} else {
|
} else {
|
||||||
final String normalizedFormat = Objects.requireNonNullElse(outputFormat, "").trim().toUpperCase(Locale.ROOT);
|
final String normalizedFormat = outputFormat.manifestValue().trim().toUpperCase(Locale.ROOT);
|
||||||
if (normalizedFormat.startsWith("TILES/")
|
if (normalizedFormat.startsWith("TILES/")
|
||||||
|| normalizedFormat.startsWith("PALETTE/")
|
|| normalizedFormat.startsWith("PALETTE/")
|
||||||
|| normalizedFormat.startsWith("SOUND/")
|
|| normalizedFormat.startsWith("SOUND/")
|
||||||
@ -51,7 +46,7 @@ final class PackerOutputContractCatalog {
|
|||||||
return List.copyOf(codecs);
|
return List.copyOf(codecs);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<PackerCodecConfigurationField> fieldsFor(String outputFormat, OutputCodecCatalog codec) {
|
private static List<PackerCodecConfigurationField> fieldsFor(OutputFormatCatalog outputFormat, OutputCodecCatalog codec) {
|
||||||
return List.of();
|
return List.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,15 +5,7 @@ import p.packer.messages.PackerProjectContext;
|
|||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.concurrent.ConcurrentMap;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
public final class PackerProjectWriteCoordinator implements Closeable {
|
public final class PackerProjectWriteCoordinator implements Closeable {
|
||||||
|
|||||||
@ -1,18 +1,8 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
import p.packer.dtos.PackerAssetDetailsDTO;
|
import p.packer.dtos.*;
|
||||||
import p.packer.dtos.PackerAssetActionAvailabilityDTO;
|
|
||||||
import p.packer.dtos.PackerAssetIdentityDTO;
|
|
||||||
import p.packer.dtos.PackerAssetSummaryDTO;
|
|
||||||
import p.packer.dtos.PackerCodecConfigurationFieldDTO;
|
|
||||||
import p.packer.dtos.PackerDiagnosticDTO;
|
|
||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
import p.packer.messages.assets.OutputCodecCatalog;
|
||||||
import p.packer.models.PackerAssetActionAvailability;
|
import p.packer.models.*;
|
||||||
import p.packer.models.PackerAssetDetails;
|
|
||||||
import p.packer.models.PackerAssetIdentity;
|
|
||||||
import p.packer.models.PackerAssetSummary;
|
|
||||||
import p.packer.models.PackerCodecConfigurationField;
|
|
||||||
import p.packer.models.PackerDiagnostic;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
import p.packer.messages.PackerProjectContext;
|
|
||||||
import p.packer.messages.InitWorkspaceRequest;
|
import p.packer.messages.InitWorkspaceRequest;
|
||||||
|
import p.packer.messages.PackerProjectContext;
|
||||||
import p.packer.models.PackerRegistryEntry;
|
import p.packer.models.PackerRegistryEntry;
|
||||||
import p.packer.models.PackerRegistryState;
|
import p.packer.models.PackerRegistryState;
|
||||||
import p.packer.models.PackerRuntimeAsset;
|
import p.packer.models.PackerRuntimeAsset;
|
||||||
@ -10,12 +10,7 @@ import p.packer.models.PackerRuntimeSnapshot;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,9 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
import p.packer.models.PackerAssetDeclarationParseResult;
|
import p.packer.models.*;
|
||||||
import p.packer.models.PackerRegistryEntry;
|
|
||||||
import p.packer.models.PackerRegistryState;
|
|
||||||
import p.packer.models.PackerRuntimeAsset;
|
|
||||||
import p.packer.models.PackerRuntimeSnapshot;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public final class PackerRuntimePatchService {
|
public final class PackerRuntimePatchService {
|
||||||
private final PackerAssetDeclarationParser declarationParser;
|
private final PackerAssetDeclarationParser declarationParser;
|
||||||
@ -81,7 +73,7 @@ public final class PackerRuntimePatchService {
|
|||||||
PackerRuntimeSnapshot snapshot,
|
PackerRuntimeSnapshot snapshot,
|
||||||
long generation,
|
long generation,
|
||||||
PackerRegistryState updatedRegistry,
|
PackerRegistryState updatedRegistry,
|
||||||
java.util.Optional<PackerRegistryEntry> updatedRegistryEntry,
|
Optional<PackerRegistryEntry> updatedRegistryEntry,
|
||||||
Path sourceRoot,
|
Path sourceRoot,
|
||||||
Path targetRoot,
|
Path targetRoot,
|
||||||
Path targetManifestPath) {
|
Path targetManifestPath) {
|
||||||
@ -106,4 +98,36 @@ public final class PackerRuntimePatchService {
|
|||||||
updatedAssets.sort(Comparator.comparing(asset -> asset.assetRoot().toString(), String.CASE_INSENSITIVE_ORDER));
|
updatedAssets.sort(Comparator.comparing(asset -> asset.assetRoot().toString(), String.CASE_INSENSITIVE_ORDER));
|
||||||
return new PackerRuntimeSnapshot(generation, updatedRegistry, updatedAssets);
|
return new PackerRuntimeSnapshot(generation, updatedRegistry, updatedAssets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PackerRuntimeSnapshot afterUpdateAssetContract(
|
||||||
|
PackerRuntimeSnapshot snapshot,
|
||||||
|
long generation,
|
||||||
|
Path assetRoot,
|
||||||
|
Path manifestPath,
|
||||||
|
Optional<PackerRegistryEntry> registryEntry) {
|
||||||
|
final PackerAssetDeclarationParseResult parsed = declarationParser.parse(manifestPath);
|
||||||
|
final List<PackerRuntimeAsset> updatedAssets = new ArrayList<>();
|
||||||
|
boolean patched = false;
|
||||||
|
for (PackerRuntimeAsset asset : snapshot.assets()) {
|
||||||
|
if (asset.assetRoot().equals(assetRoot.toAbsolutePath().normalize())) {
|
||||||
|
updatedAssets.add(new PackerRuntimeAsset(
|
||||||
|
asset.assetRoot(),
|
||||||
|
asset.manifestPath(),
|
||||||
|
asset.registryEntry(),
|
||||||
|
parsed));
|
||||||
|
patched = true;
|
||||||
|
} else {
|
||||||
|
updatedAssets.add(asset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!patched) {
|
||||||
|
updatedAssets.add(new PackerRuntimeAsset(
|
||||||
|
assetRoot,
|
||||||
|
manifestPath,
|
||||||
|
registryEntry,
|
||||||
|
parsed));
|
||||||
|
updatedAssets.sort(Comparator.comparing(asset -> asset.assetRoot().toString(), String.CASE_INSENSITIVE_ORDER));
|
||||||
|
}
|
||||||
|
return new PackerRuntimeSnapshot(generation, snapshot.registry(), updatedAssets);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,12 +4,12 @@ import p.packer.messages.PackerProjectContext;
|
|||||||
import p.packer.models.PackerRuntimeSnapshot;
|
import p.packer.models.PackerRuntimeSnapshot;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.function.BiFunction;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
public final class PackerRuntimeRegistry {
|
public final class PackerRuntimeRegistry {
|
||||||
private final PackerRuntimeSnapshotLoader loader;
|
private final PackerRuntimeSnapshotLoader loader;
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
import p.packer.messages.PackerOperationStatus;
|
|
||||||
import p.packer.messages.PackerProjectContext;
|
|
||||||
import p.packer.messages.InitWorkspaceRequest;
|
import p.packer.messages.InitWorkspaceRequest;
|
||||||
import p.packer.messages.InitWorkspaceResult;
|
import p.packer.messages.InitWorkspaceResult;
|
||||||
|
import p.packer.messages.PackerOperationStatus;
|
||||||
|
import p.packer.messages.PackerProjectContext;
|
||||||
import p.packer.models.PackerRegistryEntry;
|
import p.packer.models.PackerRegistryEntry;
|
||||||
import p.packer.models.PackerRegistryState;
|
import p.packer.models.PackerRegistryState;
|
||||||
|
|
||||||
|
|||||||
@ -1,29 +1,12 @@
|
|||||||
package p.packer.services;
|
package p.packer.services;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.packer.messages.PackerOperationStatus;
|
|
||||||
import p.packer.messages.PackerProjectContext;
|
|
||||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
|
||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
|
||||||
import p.packer.messages.assets.OutputFormatCatalog;
|
|
||||||
import p.packer.messages.AssetReference;
|
|
||||||
import p.packer.messages.assets.PackerBuildParticipation;
|
|
||||||
import p.packer.messages.assets.PackerAssetState;
|
|
||||||
import p.packer.events.PackerEvent;
|
import p.packer.events.PackerEvent;
|
||||||
import p.packer.events.PackerEventKind;
|
import p.packer.events.PackerEventKind;
|
||||||
import p.packer.messages.CreateAssetRequest;
|
import p.packer.messages.*;
|
||||||
import p.packer.messages.CreateAssetResult;
|
import p.packer.messages.assets.*;
|
||||||
import p.packer.messages.DeleteAssetRequest;
|
|
||||||
import p.packer.messages.DeleteAssetResult;
|
|
||||||
import p.packer.messages.GetAssetActionsRequest;
|
|
||||||
import p.packer.messages.GetAssetDetailsRequest;
|
|
||||||
import p.packer.messages.ListAssetsRequest;
|
|
||||||
import p.packer.messages.MoveAssetRequest;
|
|
||||||
import p.packer.messages.MoveAssetResult;
|
|
||||||
import p.packer.messages.RegisterAssetRequest;
|
|
||||||
import p.packer.messages.RegisterAssetResult;
|
|
||||||
import p.packer.messages.assets.AssetAction;
|
|
||||||
import p.packer.testing.PackerFixtureLocator;
|
import p.packer.testing.PackerFixtureLocator;
|
||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@ -31,6 +14,7 @@ import java.nio.file.Path;
|
|||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
@ -38,6 +22,8 @@ import java.util.concurrent.Future;
|
|||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
final class FileSystemPackerWorkspaceServiceTest {
|
final class FileSystemPackerWorkspaceServiceTest {
|
||||||
|
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||||
|
|
||||||
@TempDir
|
@TempDir
|
||||||
Path tempDir;
|
Path tempDir;
|
||||||
|
|
||||||
@ -193,6 +179,77 @@ final class FileSystemPackerWorkspaceServiceTest {
|
|||||||
assertEquals(2, loader.loadCount());
|
assertEquals(2, loader.loadCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void updatesAssetContractManifestAndReturnsSuccess() throws Exception {
|
||||||
|
final Path projectRoot = copyFixture("workspaces/managed-basic", tempDir.resolve("update-contract-success"));
|
||||||
|
final FileSystemPackerWorkspaceService service = service();
|
||||||
|
|
||||||
|
final var result = service.updateAssetContract(new UpdateAssetContractRequest(
|
||||||
|
project(projectRoot),
|
||||||
|
AssetReference.forAssetId(1),
|
||||||
|
false,
|
||||||
|
OutputCodecCatalog.NONE,
|
||||||
|
Map.of(
|
||||||
|
"NONE:packMode", "tight",
|
||||||
|
"NONE:palette", "mono")));
|
||||||
|
|
||||||
|
assertTrue(result.success());
|
||||||
|
assertNull(result.errorMessage());
|
||||||
|
|
||||||
|
final Path manifestPath = projectRoot.resolve("assets/ui/atlas/asset.json");
|
||||||
|
final var manifest = MAPPER.readTree(manifestPath.toFile());
|
||||||
|
assertFalse(manifest.path("preload").path("enabled").asBoolean(true));
|
||||||
|
assertEquals("NONE", manifest.path("output").path("codec").asText());
|
||||||
|
assertEquals("tight", manifest.path("output").path("codec_configuration").path("packMode").asText());
|
||||||
|
assertEquals("mono", manifest.path("output").path("codec_configuration").path("palette").asText());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void updateAssetContractPatchesLoadedSnapshotWithoutWholeProjectReload() throws Exception {
|
||||||
|
final Path projectRoot = copyFixture("workspaces/managed-basic", tempDir.resolve("update-contract-no-reload"));
|
||||||
|
final CountingLoader loader = countingLoader();
|
||||||
|
final FileSystemPackerWorkspaceService service = service(ignored -> { }, loader);
|
||||||
|
|
||||||
|
service.listAssets(new ListAssetsRequest(project(projectRoot)));
|
||||||
|
assertEquals(1, loader.loadCount());
|
||||||
|
|
||||||
|
final var updateResult = service.updateAssetContract(new UpdateAssetContractRequest(
|
||||||
|
project(projectRoot),
|
||||||
|
AssetReference.forAssetId(1),
|
||||||
|
false,
|
||||||
|
OutputCodecCatalog.NONE,
|
||||||
|
Map.of("NONE:packMode", "tight")));
|
||||||
|
|
||||||
|
assertTrue(updateResult.success());
|
||||||
|
assertEquals(1, loader.loadCount());
|
||||||
|
|
||||||
|
final var detailsResult = service.getAssetDetails(new GetAssetDetailsRequest(
|
||||||
|
project(projectRoot),
|
||||||
|
AssetReference.forAssetId(1)));
|
||||||
|
assertEquals(PackerOperationStatus.SUCCESS, detailsResult.status());
|
||||||
|
assertFalse(detailsResult.details().summary().preloadEnabled());
|
||||||
|
assertEquals(OutputCodecCatalog.NONE, detailsResult.details().outputCodec());
|
||||||
|
assertEquals(1, loader.loadCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void returnsFailureWhenAssetManifestIsMissingOnContractUpdate() throws Exception {
|
||||||
|
final Path projectRoot = copyFixture("workspaces/managed-basic", tempDir.resolve("update-contract-missing-manifest"));
|
||||||
|
Files.delete(projectRoot.resolve("assets/ui/atlas/asset.json"));
|
||||||
|
final FileSystemPackerWorkspaceService service = service();
|
||||||
|
|
||||||
|
final var result = service.updateAssetContract(new UpdateAssetContractRequest(
|
||||||
|
project(projectRoot),
|
||||||
|
AssetReference.forAssetId(1),
|
||||||
|
true,
|
||||||
|
OutputCodecCatalog.NONE,
|
||||||
|
Map.of()));
|
||||||
|
|
||||||
|
assertFalse(result.success());
|
||||||
|
assertNotNull(result.errorMessage());
|
||||||
|
assertTrue(result.errorMessage().contains("asset.json was not found"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void exposesRegisterActionForValidUnregisteredAsset() throws Exception {
|
void exposesRegisterActionForValidUnregisteredAsset() throws Exception {
|
||||||
final Path projectRoot = copyFixture("workspaces/orphan-valid", tempDir.resolve("orphan-actions"));
|
final Path projectRoot = copyFixture("workspaces/orphan-valid", tempDir.resolve("orphan-actions"));
|
||||||
|
|||||||
@ -28,7 +28,7 @@ final class PackerAssetDeclarationParserTest {
|
|||||||
assertEquals("fixture-uuid-1", result.declaration().assetUuid());
|
assertEquals("fixture-uuid-1", result.declaration().assetUuid());
|
||||||
assertEquals("ui_atlas", result.declaration().name());
|
assertEquals("ui_atlas", result.declaration().name());
|
||||||
assertEquals(AssetFamilyCatalog.IMAGE_BANK, result.declaration().assetFamily());
|
assertEquals(AssetFamilyCatalog.IMAGE_BANK, result.declaration().assetFamily());
|
||||||
assertEquals("TILES/indexed_v1", result.declaration().outputFormat());
|
assertEquals("TILES/indexed_v1", result.declaration().outputFormat().displayName());
|
||||||
assertEquals(OutputCodecCatalog.NONE, result.declaration().outputCodec());
|
assertEquals(OutputCodecCatalog.NONE, result.declaration().outputCodec());
|
||||||
assertTrue(result.declaration().preloadEnabled());
|
assertTrue(result.declaration().preloadEnabled());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,13 +2,13 @@ package p.packer.services;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
|
import p.packer.messages.AssetReference;
|
||||||
|
import p.packer.messages.GetAssetDetailsRequest;
|
||||||
import p.packer.messages.PackerOperationStatus;
|
import p.packer.messages.PackerOperationStatus;
|
||||||
import p.packer.messages.PackerProjectContext;
|
import p.packer.messages.PackerProjectContext;
|
||||||
import p.packer.messages.AssetReference;
|
|
||||||
import p.packer.messages.assets.PackerBuildParticipation;
|
|
||||||
import p.packer.messages.assets.OutputCodecCatalog;
|
import p.packer.messages.assets.OutputCodecCatalog;
|
||||||
import p.packer.messages.assets.PackerAssetState;
|
import p.packer.messages.assets.PackerAssetState;
|
||||||
import p.packer.messages.GetAssetDetailsRequest;
|
import p.packer.messages.assets.PackerBuildParticipation;
|
||||||
import p.packer.testing.PackerFixtureLocator;
|
import p.packer.testing.PackerFixtureLocator;
|
||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@ -34,7 +34,7 @@ final class PackerAssetDetailsServiceTest {
|
|||||||
assertEquals(PackerBuildParticipation.INCLUDED, result.details().summary().buildParticipation());
|
assertEquals(PackerBuildParticipation.INCLUDED, result.details().summary().buildParticipation());
|
||||||
assertEquals("fixture-uuid-1", result.details().summary().identity().assetUuid());
|
assertEquals("fixture-uuid-1", result.details().summary().identity().assetUuid());
|
||||||
assertEquals("ui_atlas", result.details().summary().identity().assetName());
|
assertEquals("ui_atlas", result.details().summary().identity().assetName());
|
||||||
assertEquals("TILES/indexed_v1", result.details().outputFormat());
|
assertEquals("TILES/indexed_v1", result.details().outputFormat().displayName());
|
||||||
assertEquals(List.of(OutputCodecCatalog.NONE), result.details().availableOutputCodecs());
|
assertEquals(List.of(OutputCodecCatalog.NONE), result.details().availableOutputCodecs());
|
||||||
assertEquals(List.of(), result.details().codecConfigurationFieldsByCodec().get(OutputCodecCatalog.NONE));
|
assertEquals(List.of(), result.details().codecConfigurationFieldsByCodec().get(OutputCodecCatalog.NONE));
|
||||||
assertTrue(result.diagnostics().isEmpty());
|
assertTrue(result.diagnostics().isEmpty());
|
||||||
|
|||||||
@ -2,8 +2,8 @@ package p.packer.services;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.packer.messages.PackerProjectContext;
|
|
||||||
import p.packer.messages.InitWorkspaceRequest;
|
import p.packer.messages.InitWorkspaceRequest;
|
||||||
|
import p.packer.messages.PackerProjectContext;
|
||||||
import p.packer.models.PackerRegistryEntry;
|
import p.packer.models.PackerRegistryEntry;
|
||||||
import p.packer.models.PackerRegistryState;
|
import p.packer.models.PackerRegistryState;
|
||||||
|
|
||||||
|
|||||||
@ -55,4 +55,10 @@ public final class StudioFormSession<T> {
|
|||||||
resetDraft();
|
resetDraft();
|
||||||
mode = StudioFormMode.READ_ONLY;
|
mode = StudioFormMode.READ_ONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public T apply() {
|
||||||
|
source = draft;
|
||||||
|
mode = StudioFormMode.READ_ONLY;
|
||||||
|
return source;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,11 +15,11 @@ import p.studio.controls.lifecycle.StudioControlLifecycle;
|
|||||||
import p.studio.controls.lifecycle.StudioControlLifecycleSupport;
|
import p.studio.controls.lifecycle.StudioControlLifecycleSupport;
|
||||||
import p.studio.events.*;
|
import p.studio.events.*;
|
||||||
import p.studio.projects.ProjectReference;
|
import p.studio.projects.ProjectReference;
|
||||||
|
import p.studio.utilities.events.EventSubscription;
|
||||||
|
import p.studio.utilities.i18n.I18n;
|
||||||
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshFailedEvent;
|
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshFailedEvent;
|
||||||
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshStartedEvent;
|
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshStartedEvent;
|
||||||
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshedEvent;
|
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshedEvent;
|
||||||
import p.studio.utilities.events.EventSubscription;
|
|
||||||
import p.studio.utilities.i18n.I18n;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@ -5,12 +5,7 @@ import java.io.UncheckedIOException;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public final class KnownProjectsService {
|
public final class KnownProjectsService {
|
||||||
private final Path storageFile;
|
private final Path storageFile;
|
||||||
|
|||||||
@ -15,20 +15,12 @@ import javafx.stage.Modality;
|
|||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.stage.Window;
|
import javafx.stage.Window;
|
||||||
import p.studio.Container;
|
import p.studio.Container;
|
||||||
import p.studio.projects.ProjectCatalogService;
|
import p.studio.projects.*;
|
||||||
import p.studio.projects.ProjectCreationRequest;
|
|
||||||
import p.studio.projects.ProjectLanguageCatalogService;
|
|
||||||
import p.studio.projects.ProjectLanguageTemplate;
|
|
||||||
import p.studio.projects.ProjectReference;
|
|
||||||
import p.studio.utilities.i18n.I18n;
|
import p.studio.utilities.i18n.I18n;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
public final class NewProjectWizard {
|
public final class NewProjectWizard {
|
||||||
|
|||||||
@ -7,12 +7,8 @@ import javafx.scene.control.Button;
|
|||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ListCell;
|
import javafx.scene.control.ListCell;
|
||||||
import javafx.scene.control.ListView;
|
import javafx.scene.control.ListView;
|
||||||
import javafx.scene.layout.BorderPane;
|
|
||||||
import javafx.scene.layout.HBox;
|
|
||||||
import javafx.scene.layout.Priority;
|
|
||||||
import javafx.scene.layout.StackPane;
|
|
||||||
import javafx.scene.layout.VBox;
|
|
||||||
import javafx.scene.input.MouseButton;
|
import javafx.scene.input.MouseButton;
|
||||||
|
import javafx.scene.layout.*;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import p.studio.Container;
|
import p.studio.Container;
|
||||||
import p.studio.projects.KnownProjectsService;
|
import p.studio.projects.KnownProjectsService;
|
||||||
|
|||||||
@ -6,13 +6,7 @@ import javafx.stage.Stage;
|
|||||||
import javafx.stage.StageStyle;
|
import javafx.stage.StageStyle;
|
||||||
import p.packer.messages.InitWorkspaceRequest;
|
import p.packer.messages.InitWorkspaceRequest;
|
||||||
import p.studio.Container;
|
import p.studio.Container;
|
||||||
import p.studio.events.StudioProjectLoadingCompletedEvent;
|
import p.studio.events.*;
|
||||||
import p.studio.events.StudioProjectLoadingFailedEvent;
|
|
||||||
import p.studio.events.StudioProjectLoadingPhase;
|
|
||||||
import p.studio.events.StudioProjectLoadingProgressEvent;
|
|
||||||
import p.studio.events.StudioProjectLoadingStartedEvent;
|
|
||||||
import p.studio.events.StudioProjectCreatedEvent;
|
|
||||||
import p.studio.events.StudioProjectOpenedEvent;
|
|
||||||
import p.studio.projects.KnownProjectsService;
|
import p.studio.projects.KnownProjectsService;
|
||||||
import p.studio.projects.ProjectCatalogService;
|
import p.studio.projects.ProjectCatalogService;
|
||||||
import p.studio.projects.ProjectReference;
|
import p.studio.projects.ProjectReference;
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import p.studio.events.StudioPackerOperationEvent;
|
|||||||
import p.studio.events.StudioWorkspaceEventBus;
|
import p.studio.events.StudioWorkspaceEventBus;
|
||||||
import p.studio.utilities.i18n.I18n;
|
import p.studio.utilities.i18n.I18n;
|
||||||
import p.studio.utilities.logspane.LogsPane;
|
import p.studio.utilities.logspane.LogsPane;
|
||||||
|
import p.studio.workspaces.assets.messages.events.StudioAssetLogEvent;
|
||||||
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshFailedEvent;
|
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshFailedEvent;
|
||||||
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshStartedEvent;
|
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshStartedEvent;
|
||||||
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshedEvent;
|
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshedEvent;
|
||||||
@ -29,6 +30,9 @@ public final class AssetLogsPane extends LogsPane implements StudioEventAware {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerEventSubscriptions() {
|
public void registerEventSubscriptions() {
|
||||||
|
eventBindings.listen(workspaceBus, StudioAssetLogEvent.class).handle(event -> {
|
||||||
|
appendLine("[" + event.source() + "] " + event.message());
|
||||||
|
});
|
||||||
eventBindings.listen(workspaceBus, StudioAssetsWorkspaceRefreshStartedEvent.class).handle(event -> {
|
eventBindings.listen(workspaceBus, StudioAssetsWorkspaceRefreshStartedEvent.class).handle(event -> {
|
||||||
appendLine("[refresh] Asset scan started.");
|
appendLine("[refresh] Asset scan started.");
|
||||||
});
|
});
|
||||||
|
|||||||
@ -60,7 +60,7 @@ public final class AssetDetailsControl extends VBox implements StudioEventAware
|
|||||||
this.projectReference = Objects.requireNonNull(projectReference, "projectReference");
|
this.projectReference = Objects.requireNonNull(projectReference, "projectReference");
|
||||||
this.workspaceBus = Objects.requireNonNull(workspaceBus, "workspaceBus");
|
this.workspaceBus = Objects.requireNonNull(workspaceBus, "workspaceBus");
|
||||||
this.summaryControl = new AssetDetailsSummaryControl(projectReference, workspaceBus);
|
this.summaryControl = new AssetDetailsSummaryControl(projectReference, workspaceBus);
|
||||||
this.contractControl = new AssetDetailsContractControl(workspaceBus);
|
this.contractControl = new AssetDetailsContractControl(projectReference, workspaceBus);
|
||||||
this.actionsSection = createActionsSection();
|
this.actionsSection = createActionsSection();
|
||||||
|
|
||||||
getStyleClass().add("assets-workspace-pane");
|
getStyleClass().add("assets-workspace-pane");
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import javafx.scene.layout.Priority;
|
|||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
import p.packer.messages.assets.AssetAction;
|
import p.packer.messages.assets.AssetAction;
|
||||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||||
|
import p.packer.messages.assets.OutputFormatCatalog;
|
||||||
import p.studio.Container;
|
import p.studio.Container;
|
||||||
import p.studio.projects.ProjectReference;
|
import p.studio.projects.ProjectReference;
|
||||||
import p.studio.utilities.i18n.I18n;
|
import p.studio.utilities.i18n.I18n;
|
||||||
@ -44,6 +45,13 @@ public final class AssetDetailsUiSupport {
|
|||||||
return createKeyValueRow(key, valueLabel);
|
return createKeyValueRow(key, valueLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Node createKeyValueRow(String key, OutputFormatCatalog outputFormat) {
|
||||||
|
final Label valueLabel = new Label(outputFormat.displayName());
|
||||||
|
valueLabel.getStyleClass().add("assets-details-value");
|
||||||
|
valueLabel.setWrapText(true);
|
||||||
|
return createKeyValueRow(key, valueLabel);
|
||||||
|
}
|
||||||
|
|
||||||
public static Node createKeyValueRow(String key, Node valueNode) {
|
public static Node createKeyValueRow(String key, Node valueNode) {
|
||||||
final HBox row = new HBox(12);
|
final HBox row = new HBox(12);
|
||||||
row.setAlignment(Pos.TOP_LEFT);
|
row.setAlignment(Pos.TOP_LEFT);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user