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.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
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.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.OptionalLong;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
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.source.diagnostics.DiagnosticPhase;
|
||||
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.NameId;
|
||||
import p.studio.compiler.source.tables.IntrinsicTable;
|
||||
import p.studio.compiler.source.tables.NameTable;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||
|
||||
final class PbsExecutableBodyLowerer {
|
||||
private final PbsExecutableCallsiteEmitter callsiteEmitter = new PbsExecutableCallsiteEmitter();
|
||||
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.source.identifiers.CallableId;
|
||||
import p.studio.compiler.source.identifiers.ModuleId;
|
||||
import p.studio.compiler.source.tables.CallableShapeTable;
|
||||
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.compiler.source.tables.*;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||
|
||||
final class PbsExecutableCallableRegistryFactory {
|
||||
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.utilities.structures.ReadOnlyList;
|
||||
|
||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static p.studio.compiler.pbs.lowering.PbsExecutableLoweringModels.*;
|
||||
|
||||
final class PbsExecutableMetadataIndexFactory {
|
||||
|
||||
PbsExecutableMetadataIndex create(
|
||||
|
||||
@ -3,11 +3,7 @@ package p.studio.compiler.pbs.lowering;
|
||||
import p.studio.compiler.models.IRBackendExecutableFunction;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
final class PbsExecutableStackAnalyzer {
|
||||
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package p.studio.compiler.pbs.parser;
|
||||
|
||||
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.source.Span;
|
||||
|
||||
|
||||
@ -5,13 +5,7 @@ import p.studio.compiler.source.Span;
|
||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public final class PbsBuiltinLayoutResolver {
|
||||
private static final Set<String> BUILTIN_SCALAR_TYPES = Set.of("int", "float", "bool", "str");
|
||||
|
||||
@ -1,18 +1,12 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.TypeView;
|
||||
import p.studio.compiler.source.Span;
|
||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.PriorityQueue;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
final class PbsConstSemanticsValidator {
|
||||
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.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public final class PbsDeclarationSemanticsValidator {
|
||||
private static final String ATTR_HOST = "Host";
|
||||
|
||||
@ -1,12 +1,8 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.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 {
|
||||
@FunctionalInterface
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.Scope;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
final class PbsFlowBodyAnalyzer {
|
||||
private final PbsFlowTypeOps typeOps = new PbsFlowTypeOps();
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
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.Scope;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
|
||||
final class PbsFlowBodyContext {
|
||||
private final Scope scope;
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.ExprUse;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Kind;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||
|
||||
final class PbsFlowBranchExpressionAnalyzer {
|
||||
@FunctionalInterface
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
import p.studio.compiler.pbs.ast.PbsAst;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
final class PbsFlowCallableBodyAnalyzer {
|
||||
@FunctionalInterface
|
||||
|
||||
@ -1,15 +1,10 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.diagnostics.DiagnosticSink;
|
||||
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;
|
||||
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.Model;
|
||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.Kind;
|
||||
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.Set;
|
||||
|
||||
@ -1,12 +1,8 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.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 {
|
||||
@FunctionalInterface
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
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.Model;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.Scope;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
|
||||
final class PbsFlowExpressionContext {
|
||||
private final Scope scope;
|
||||
|
||||
@ -1,13 +1,9 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.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 {
|
||||
@FunctionalInterface
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package p.studio.compiler.pbs.semantics;
|
||||
|
||||
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.Kind;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TupleField;
|
||||
import p.studio.compiler.pbs.semantics.PbsFlowSemanticSupport.TypeView;
|
||||
import p.studio.compiler.source.diagnostics.Diagnostics;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
@ -1,20 +1,20 @@
|
||||
package p.studio.compiler.pbs.stdlib;
|
||||
|
||||
import p.studio.compiler.models.SourceHandle;
|
||||
import p.studio.compiler.pbs.ast.PbsAst;
|
||||
import p.studio.compiler.pbs.lexer.PbsLexer;
|
||||
import p.studio.compiler.pbs.linking.PbsModuleVisibilityValidator;
|
||||
import p.studio.compiler.pbs.parser.PbsBarrelParser;
|
||||
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.identifiers.FileId;
|
||||
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 java.util.ArrayList;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public final class InterfaceModuleLoader {
|
||||
public InterfaceModuleLoader() {
|
||||
|
||||
@ -14,13 +14,7 @@ import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
import p.studio.compiler.source.identifiers.ModuleId;
|
||||
import p.studio.utilities.logs.LogAggregator;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
@Slf4j
|
||||
public class PBSFrontendPhaseService implements FrontendPhaseService {
|
||||
|
||||
@ -2,20 +2,14 @@ package p.studio.compiler.services;
|
||||
|
||||
import p.studio.compiler.models.IRReservedMetadata;
|
||||
import p.studio.compiler.pbs.PbsFrontendCompiler;
|
||||
import p.studio.compiler.pbs.ast.PbsAst;
|
||||
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.ModuleId;
|
||||
import p.studio.compiler.source.tables.ModuleTable;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
final class PbsImportedSemanticContextService {
|
||||
private final PbsReservedMetadataExtractor reservedMetadataExtractor;
|
||||
|
||||
@ -27,13 +27,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
final class PbsModuleAssemblyService {
|
||||
private final StdlibEnvironmentResolver stdlibEnvironmentResolver;
|
||||
|
||||
@ -4,11 +4,7 @@ import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import p.studio.compiler.messages.BuildingIssueSink;
|
||||
import p.studio.compiler.messages.FrontendPhaseContext;
|
||||
import p.studio.compiler.models.BuildStack;
|
||||
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.models.*;
|
||||
import p.studio.compiler.pbs.ast.PbsAst;
|
||||
import p.studio.compiler.pbs.lexer.PbsLexer;
|
||||
import p.studio.compiler.pbs.linking.PbsLinkErrors;
|
||||
@ -37,11 +33,7 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
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;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PbsGateUSdkInterfaceConformanceTest {
|
||||
|
||||
|
||||
@ -28,10 +28,7 @@ import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
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.*;
|
||||
|
||||
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.identifiers.FileId;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
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.identifiers.FileId;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
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.identifiers.FileId;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PbsParserStatementsTest {
|
||||
|
||||
|
||||
@ -8,10 +8,7 @@ import p.studio.compiler.source.identifiers.FileId;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PbsParserTest {
|
||||
|
||||
|
||||
@ -5,9 +5,7 @@ import p.studio.compiler.pbs.PbsFrontendCompiler;
|
||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
import p.studio.compiler.source.identifiers.FileId;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PbsSemanticsControlFlowTest {
|
||||
|
||||
|
||||
@ -5,9 +5,7 @@ import p.studio.compiler.pbs.PbsFrontendCompiler;
|
||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
import p.studio.compiler.source.identifiers.FileId;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PbsSemanticsDeclarationsTest {
|
||||
|
||||
|
||||
@ -5,9 +5,7 @@ import p.studio.compiler.pbs.PbsFrontendCompiler;
|
||||
import p.studio.compiler.source.diagnostics.DiagnosticSink;
|
||||
import p.studio.compiler.source.identifiers.FileId;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PbsSemanticsFallthroughTest {
|
||||
|
||||
|
||||
@ -9,9 +9,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class InterfaceModuleLoaderTest {
|
||||
|
||||
|
||||
@ -9,12 +9,12 @@ import p.studio.compiler.models.ProjectDescriptor;
|
||||
import p.studio.compiler.models.SourceHandle;
|
||||
import p.studio.compiler.models.SourceKind;
|
||||
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.StdlibEnvironment;
|
||||
import p.studio.compiler.pbs.stdlib.StdlibEnvironmentResolver;
|
||||
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.identifiers.ProjectId;
|
||||
import p.studio.compiler.source.tables.FileTable;
|
||||
@ -29,12 +29,9 @@ import java.nio.file.Path;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PBSFrontendPhaseServiceTest {
|
||||
|
||||
|
||||
@ -6,8 +6,8 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Objects;
|
||||
|
||||
public class BytecodeEmitter {
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package p.studio.compiler.backend.irvm;
|
||||
|
||||
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
||||
import p.studio.compiler.backend.bytecode.BytecodeModule;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -3,12 +3,7 @@ package p.studio.compiler.backend.irvm;
|
||||
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
public class OptimizeIRVMService {
|
||||
private final IRVMValidator validator;
|
||||
|
||||
@ -6,10 +6,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BytecodeEmitterTest {
|
||||
|
||||
|
||||
@ -6,9 +6,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BytecodeLinkPrecheckServiceTest {
|
||||
|
||||
|
||||
@ -6,9 +6,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BytecodeModuleTest {
|
||||
|
||||
|
||||
@ -6,9 +6,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BytecodePreloadVerifierServiceTest {
|
||||
|
||||
|
||||
@ -6,18 +6,10 @@ import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Locale;
|
||||
import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class IRVMIntrinsicRegistryParityTest {
|
||||
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.Set;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class IRVMValidatorTest {
|
||||
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.utilities.structures.ReadOnlyList;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class LowerToIRVMServiceTest {
|
||||
|
||||
|
||||
@ -2,8 +2,8 @@ package p.studio.compiler.backend.irvm;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
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.BytecodePreloadVerifierService;
|
||||
import p.studio.compiler.models.IRBackend;
|
||||
import p.studio.compiler.models.IRBackendExecutableFunction;
|
||||
import p.studio.compiler.source.Span;
|
||||
@ -16,12 +16,10 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
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 OptimizeIRVMEquivalenceHarnessTest {
|
||||
|
||||
|
||||
@ -9,11 +9,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
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;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class OptimizeIRVMServiceTest {
|
||||
|
||||
|
||||
@ -23,14 +23,9 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
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;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BackendGateIIntegrationTest {
|
||||
private final RuntimeCompatibilityAdapter compatibilityAdapter = RuntimeCompatibilityAdapters.createDefault();
|
||||
|
||||
@ -9,9 +9,7 @@ import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class MainProjectPipelineIntegrationTest {
|
||||
|
||||
|
||||
@ -10,9 +10,7 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BackendConformanceMatrixSpecTest {
|
||||
private static final String MATRIX_RELATIVE_PATH =
|
||||
|
||||
@ -1,15 +1,7 @@
|
||||
package p.studio.compiler.workspaces;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import p.studio.compiler.workspaces.stages.EmitBytecodePipelineStage;
|
||||
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 p.studio.compiler.workspaces.stages.*;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
|
||||
@ -2,11 +2,7 @@ package p.studio.compiler.workspaces.stages;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import p.studio.compiler.backend.bytecode.BytecodeEmitter;
|
||||
import p.studio.compiler.backend.irvm.IRVMFunction;
|
||||
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.backend.irvm.*;
|
||||
import p.studio.compiler.messages.BuilderPipelineConfig;
|
||||
import p.studio.compiler.models.BuilderPipelineContext;
|
||||
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.structures.ReadOnlyList;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BackendSafetyGateSUTest {
|
||||
|
||||
|
||||
@ -8,10 +8,7 @@ import p.studio.compiler.models.BuilderPipelineContext;
|
||||
import p.studio.utilities.logs.LogAggregator;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
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.*;
|
||||
|
||||
class EmitBytecodePipelineStageTest {
|
||||
|
||||
|
||||
@ -11,10 +11,7 @@ import p.studio.compiler.source.identifiers.FileId;
|
||||
import p.studio.utilities.logs.LogAggregator;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
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.*;
|
||||
|
||||
class LowerToIRVMPipelineStageTest {
|
||||
|
||||
|
||||
@ -1,20 +1,13 @@
|
||||
package p.studio.compiler.workspaces.stages;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import p.studio.compiler.backend.irvm.IRVMFunction;
|
||||
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.backend.irvm.*;
|
||||
import p.studio.compiler.messages.BuilderPipelineConfig;
|
||||
import p.studio.compiler.models.BuilderPipelineContext;
|
||||
import p.studio.utilities.logs.LogAggregator;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
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.*;
|
||||
|
||||
class OptimizeIRVMPipelineStageTest {
|
||||
|
||||
|
||||
@ -11,10 +11,7 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class WriteBytecodeArtifactPipelineStageTest {
|
||||
|
||||
|
||||
@ -3,11 +3,7 @@ package p.studio.compiler.source.diagnostics;
|
||||
import p.studio.compiler.source.Span;
|
||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
public class DiagnosticSink implements ReadOnlyCollection<Diagnostic> {
|
||||
private final ArrayList<Diagnostic> diagnostics = new ArrayList<>();
|
||||
|
||||
@ -3,9 +3,6 @@ package p.studio.compiler.source.identifiers;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@Getter
|
||||
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
|
||||
public abstract class SourceIdentifier {
|
||||
|
||||
@ -2,9 +2,7 @@ package p.studio.compiler.source.tables;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class HostBindingTableTest {
|
||||
|
||||
|
||||
@ -2,9 +2,7 @@ package p.studio.compiler.source.tables;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class IntrinsicTableTest {
|
||||
|
||||
|
||||
@ -12,7 +12,8 @@ import p.studio.utilities.structures.ReadOnlyList;
|
||||
import java.nio.file.Path;
|
||||
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 {
|
||||
|
||||
|
||||
@ -5,12 +5,7 @@ import lombok.Getter;
|
||||
import p.studio.compiler.source.identifiers.CallableId;
|
||||
import p.studio.compiler.source.identifiers.IntrinsicId;
|
||||
import p.studio.compiler.source.identifiers.ModuleId;
|
||||
import p.studio.compiler.source.tables.CallableSignatureRef;
|
||||
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.compiler.source.tables.*;
|
||||
import p.studio.utilities.structures.ReadOnlyList;
|
||||
|
||||
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.utilities.structures.ReadOnlyList;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class IRBackendExecutableContractTest {
|
||||
|
||||
|
||||
@ -1,11 +1,6 @@
|
||||
package p.studio.utilities.structures;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public interface ReadOnlyList<T> extends ReadOnlyCollection<T> {
|
||||
|
||||
@ -18,4 +18,6 @@ public interface PackerWorkspaceService {
|
||||
MoveAssetResult moveAsset(MoveAssetRequest request);
|
||||
|
||||
DeleteAssetResult deleteAsset(DeleteAssetRequest request);
|
||||
|
||||
UpdateAssetContractResponse updateAssetContract(UpdateAssetContractRequest request);
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package p.packer.dtos;
|
||||
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
@ -9,7 +10,7 @@ import java.util.Objects;
|
||||
|
||||
public record PackerAssetDetailsDTO(
|
||||
PackerAssetSummaryDTO summary,
|
||||
String outputFormat,
|
||||
OutputFormatCatalog outputFormat,
|
||||
OutputCodecCatalog outputCodec,
|
||||
List<OutputCodecCatalog> availableOutputCodecs,
|
||||
Map<OutputCodecCatalog, List<PackerCodecConfigurationFieldDTO>> codecConfigurationFieldsByCodec,
|
||||
@ -18,7 +19,7 @@ public record PackerAssetDetailsDTO(
|
||||
|
||||
public PackerAssetDetailsDTO {
|
||||
Objects.requireNonNull(summary, "summary");
|
||||
outputFormat = Objects.requireNonNullElse(outputFormat, "unknown").trim();
|
||||
outputFormat = Objects.requireNonNullElse(outputFormat, OutputFormatCatalog.UNKNOWN);
|
||||
outputCodec = Objects.requireNonNullElse(outputCodec, OutputCodecCatalog.UNKNOWN);
|
||||
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
||||
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;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -13,7 +15,7 @@ public record PackerAssetDeclaration(
|
||||
String name,
|
||||
AssetFamilyCatalog assetFamily,
|
||||
Map<String, List<String>> inputsByRole,
|
||||
String outputFormat,
|
||||
OutputFormatCatalog outputFormat,
|
||||
OutputCodecCatalog outputCodec,
|
||||
boolean preloadEnabled) {
|
||||
|
||||
@ -25,9 +27,9 @@ public record PackerAssetDeclaration(
|
||||
name = Objects.requireNonNull(name, "name").trim();
|
||||
assetFamily = Objects.requireNonNull(assetFamily, "assetFamily");
|
||||
inputsByRole = Map.copyOf(Objects.requireNonNull(inputsByRole, "inputsByRole"));
|
||||
outputFormat = Objects.requireNonNull(outputFormat, "outputFormat").trim();
|
||||
outputFormat = Objects.requireNonNull(outputFormat, "outputFormat");
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package p.packer.models;
|
||||
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
@ -9,7 +10,7 @@ import java.util.Objects;
|
||||
|
||||
public record PackerAssetDetails(
|
||||
PackerAssetSummary summary,
|
||||
String outputFormat,
|
||||
OutputFormatCatalog outputFormat,
|
||||
OutputCodecCatalog outputCodec,
|
||||
List<OutputCodecCatalog> availableOutputCodecs,
|
||||
Map<OutputCodecCatalog, List<PackerCodecConfigurationField>> codecConfigurationFieldsByCodec,
|
||||
@ -18,7 +19,7 @@ public record PackerAssetDetails(
|
||||
|
||||
public PackerAssetDetails {
|
||||
Objects.requireNonNull(summary, "summary");
|
||||
outputFormat = Objects.requireNonNullElse(outputFormat, "unknown").trim();
|
||||
outputFormat = Objects.requireNonNullElse(outputFormat, OutputFormatCatalog.UNKNOWN);
|
||||
outputCodec = Objects.requireNonNullElse(outputCodec, OutputCodecCatalog.UNKNOWN);
|
||||
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
||||
codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec"));
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.packer.models;
|
||||
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.PackerAssetState;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
|
||||
|
||||
@ -10,11 +10,7 @@ import p.packer.models.PackerRegistryState;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public final class FileSystemPackerRegistryRepository implements PackerRegistryRepository {
|
||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||
|
||||
@ -1,46 +1,17 @@
|
||||
package p.packer.services;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
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 com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import p.packer.PackerWorkspaceService;
|
||||
import p.packer.events.PackerEventKind;
|
||||
import p.packer.events.PackerEventSink;
|
||||
import p.packer.events.PackerProgress;
|
||||
import p.packer.messages.CreateAssetRequest;
|
||||
import p.packer.messages.CreateAssetResult;
|
||||
import p.packer.messages.DeleteAssetRequest;
|
||||
import p.packer.messages.DeleteAssetResult;
|
||||
import p.packer.messages.GetAssetDetailsRequest;
|
||||
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 p.packer.messages.*;
|
||||
import p.packer.messages.assets.*;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.models.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
@ -115,7 +86,7 @@ public final class FileSystemPackerWorkspaceService implements PackerWorkspaceSe
|
||||
events.emit(
|
||||
PackerEventKind.ASSET_DISCOVERED,
|
||||
"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()));
|
||||
}
|
||||
|
||||
@ -405,9 +376,9 @@ public final class FileSystemPackerWorkspaceService implements PackerWorkspaceSe
|
||||
sourceRoot,
|
||||
targetRoot,
|
||||
targetManifestPath));
|
||||
final AssetReference canonicalReference = updatedEntry.isPresent()
|
||||
? AssetReference.forAssetId(updatedEntry.get().assetId())
|
||||
: AssetReference.forRelativeAssetRoot(targetRelativeRoot);
|
||||
final AssetReference canonicalReference = updatedEntry
|
||||
.map(packerRegistryEntry -> AssetReference.forAssetId(packerRegistryEntry.assetId()))
|
||||
.orElseGet(() -> AssetReference.forRelativeAssetRoot(targetRelativeRoot));
|
||||
final MoveAssetResult result = new MoveAssetResult(
|
||||
PackerOperationStatus.SUCCESS,
|
||||
"Asset moved: " + sourceRelativeRoot + " -> " + targetRelativeRoot,
|
||||
@ -603,4 +574,111 @@ public final class FileSystemPackerWorkspaceService implements PackerWorkspaceSe
|
||||
.toList();
|
||||
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;
|
||||
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.GetAssetActionsRequest;
|
||||
import p.packer.messages.GetAssetActionsResult;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.*;
|
||||
import p.packer.messages.assets.AssetAction;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.models.PackerAssetActionAvailability;
|
||||
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 p.packer.models.*;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.models.PackerAssetDeclaration;
|
||||
@ -12,11 +13,7 @@ import p.packer.models.PackerDiagnostic;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
public final class PackerAssetDeclarationParser {
|
||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||
@ -43,7 +40,7 @@ public final class PackerAssetDeclarationParser {
|
||||
final String name = requiredText(root, "name", diagnostics, manifestPath);
|
||||
final AssetFamilyCatalog assetFamily = requiredAssetFamily(root, 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 Boolean preloadEnabled = requiredBoolean(root.path("preload"), "enabled", diagnostics, manifestPath);
|
||||
|
||||
@ -118,6 +115,24 @@ public final class PackerAssetDeclarationParser {
|
||||
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) {
|
||||
final String codecValue = requiredText(node, "codec", diagnostics, manifestPath);
|
||||
if (codecValue == null) {
|
||||
@ -128,7 +143,7 @@ public final class PackerAssetDeclarationParser {
|
||||
diagnostics.add(new PackerDiagnostic(
|
||||
PackerDiagnosticSeverity.ERROR,
|
||||
PackerDiagnosticCategory.STRUCTURAL,
|
||||
"Field 'codec' must be one of: NONE.",
|
||||
"Field 'codec' must have a valid value.",
|
||||
manifestPath,
|
||||
true));
|
||||
return null;
|
||||
|
||||
@ -1,34 +1,13 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
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.*;
|
||||
import p.packer.messages.assets.*;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.messages.GetAssetDetailsRequest;
|
||||
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 p.packer.models.*;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
|
||||
public final class PackerAssetDetailsService {
|
||||
private final PackerRuntimeRegistry runtimeRegistry;
|
||||
@ -126,7 +105,7 @@ public final class PackerAssetDetailsService {
|
||||
true);
|
||||
final PackerAssetDetails details = new PackerAssetDetails(
|
||||
summary,
|
||||
"unknown",
|
||||
OutputFormatCatalog.UNKNOWN,
|
||||
OutputCodecCatalog.UNKNOWN,
|
||||
List.of(OutputCodecCatalog.NONE),
|
||||
Map.of(OutputCodecCatalog.NONE, List.of()),
|
||||
|
||||
@ -4,11 +4,7 @@ import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
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 p.packer.models.*;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.events.PackerEvent;
|
||||
import p.packer.events.PackerEventKind;
|
||||
import p.packer.events.PackerEventSink;
|
||||
import p.packer.events.PackerProgress;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@ -3,18 +3,14 @@ package p.packer.services;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
import p.packer.models.PackerCodecConfigurationField;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
final class PackerOutputContractCatalog {
|
||||
private PackerOutputContractCatalog() {
|
||||
}
|
||||
|
||||
static OutputContractDefinition definitionFor(String outputFormat, OutputCodecCatalog selectedCodec) {
|
||||
static OutputContractDefinition definitionFor(OutputFormatCatalog outputFormat, OutputCodecCatalog selectedCodec) {
|
||||
final List<OutputCodecCatalog> availableCodecs = availableCodecsFor(outputFormat, selectedCodec);
|
||||
return new OutputContractDefinition(
|
||||
availableCodecs,
|
||||
@ -25,13 +21,12 @@ final class PackerOutputContractCatalog {
|
||||
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 OutputFormatCatalog formatCatalog = OutputFormatCatalog.fromManifestValue(outputFormat);
|
||||
if (formatCatalog != OutputFormatCatalog.UNKNOWN) {
|
||||
codecs.addAll(formatCatalog.availableCodecs());
|
||||
if (outputFormat != OutputFormatCatalog.UNKNOWN) {
|
||||
codecs.addAll(outputFormat.availableCodecs());
|
||||
} else {
|
||||
final String normalizedFormat = Objects.requireNonNullElse(outputFormat, "").trim().toUpperCase(Locale.ROOT);
|
||||
final String normalizedFormat = outputFormat.manifestValue().trim().toUpperCase(Locale.ROOT);
|
||||
if (normalizedFormat.startsWith("TILES/")
|
||||
|| normalizedFormat.startsWith("PALETTE/")
|
||||
|| normalizedFormat.startsWith("SOUND/")
|
||||
@ -51,7 +46,7 @@ final class PackerOutputContractCatalog {
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@ -5,15 +5,7 @@ import p.packer.messages.PackerProjectContext;
|
||||
import java.io.Closeable;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.Callable;
|
||||
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.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public final class PackerProjectWriteCoordinator implements Closeable {
|
||||
|
||||
@ -1,18 +1,8 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.dtos.PackerAssetDetailsDTO;
|
||||
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.dtos.*;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.models.PackerAssetActionAvailability;
|
||||
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 p.packer.models.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.InitWorkspaceRequest;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
import p.packer.models.PackerRuntimeAsset;
|
||||
@ -10,12 +10,7 @@ import p.packer.models.PackerRuntimeSnapshot;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
|
||||
@ -1,17 +1,9 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.models.PackerAssetDeclarationParseResult;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
import p.packer.models.PackerRuntimeAsset;
|
||||
import p.packer.models.PackerRuntimeSnapshot;
|
||||
import p.packer.models.*;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
|
||||
public final class PackerRuntimePatchService {
|
||||
private final PackerAssetDeclarationParser declarationParser;
|
||||
@ -81,7 +73,7 @@ public final class PackerRuntimePatchService {
|
||||
PackerRuntimeSnapshot snapshot,
|
||||
long generation,
|
||||
PackerRegistryState updatedRegistry,
|
||||
java.util.Optional<PackerRegistryEntry> updatedRegistryEntry,
|
||||
Optional<PackerRegistryEntry> updatedRegistryEntry,
|
||||
Path sourceRoot,
|
||||
Path targetRoot,
|
||||
Path targetManifestPath) {
|
||||
@ -106,4 +98,36 @@ public final class PackerRuntimePatchService {
|
||||
updatedAssets.sort(Comparator.comparing(asset -> asset.assetRoot().toString(), String.CASE_INSENSITIVE_ORDER));
|
||||
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 java.nio.file.Path;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
public final class PackerRuntimeRegistry {
|
||||
private final PackerRuntimeSnapshotLoader loader;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.InitWorkspaceRequest;
|
||||
import p.packer.messages.InitWorkspaceResult;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
|
||||
|
||||
@ -1,29 +1,12 @@
|
||||
package p.packer.services;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
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.PackerEventKind;
|
||||
import p.packer.messages.CreateAssetRequest;
|
||||
import p.packer.messages.CreateAssetResult;
|
||||
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.messages.*;
|
||||
import p.packer.messages.assets.*;
|
||||
import p.packer.testing.PackerFixtureLocator;
|
||||
|
||||
import java.nio.file.Files;
|
||||
@ -31,6 +14,7 @@ import java.nio.file.Path;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
@ -38,6 +22,8 @@ import java.util.concurrent.Future;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
final class FileSystemPackerWorkspaceServiceTest {
|
||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||
|
||||
@TempDir
|
||||
Path tempDir;
|
||||
|
||||
@ -193,6 +179,77 @@ final class FileSystemPackerWorkspaceServiceTest {
|
||||
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
|
||||
void exposesRegisterActionForValidUnregisteredAsset() throws Exception {
|
||||
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("ui_atlas", result.declaration().name());
|
||||
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());
|
||||
assertTrue(result.declaration().preloadEnabled());
|
||||
}
|
||||
|
||||
@ -2,13 +2,13 @@ package p.packer.services;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
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.PackerProjectContext;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.PackerAssetState;
|
||||
import p.packer.messages.GetAssetDetailsRequest;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
import p.packer.testing.PackerFixtureLocator;
|
||||
|
||||
import java.nio.file.Files;
|
||||
@ -34,7 +34,7 @@ final class PackerAssetDetailsServiceTest {
|
||||
assertEquals(PackerBuildParticipation.INCLUDED, result.details().summary().buildParticipation());
|
||||
assertEquals("fixture-uuid-1", result.details().summary().identity().assetUuid());
|
||||
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(), result.details().codecConfigurationFieldsByCodec().get(OutputCodecCatalog.NONE));
|
||||
assertTrue(result.diagnostics().isEmpty());
|
||||
|
||||
@ -2,8 +2,8 @@ package p.packer.services;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.InitWorkspaceRequest;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
|
||||
|
||||
@ -55,4 +55,10 @@ public final class StudioFormSession<T> {
|
||||
resetDraft();
|
||||
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.events.*;
|
||||
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.StudioAssetsWorkspaceRefreshStartedEvent;
|
||||
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.List;
|
||||
|
||||
@ -5,12 +5,7 @@ import java.io.UncheckedIOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public final class KnownProjectsService {
|
||||
private final Path storageFile;
|
||||
|
||||
@ -15,20 +15,12 @@ import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.Window;
|
||||
import p.studio.Container;
|
||||
import p.studio.projects.ProjectCatalogService;
|
||||
import p.studio.projects.ProjectCreationRequest;
|
||||
import p.studio.projects.ProjectLanguageCatalogService;
|
||||
import p.studio.projects.ProjectLanguageTemplate;
|
||||
import p.studio.projects.ProjectReference;
|
||||
import p.studio.projects.*;
|
||||
import p.studio.utilities.i18n.I18n;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
public final class NewProjectWizard {
|
||||
|
||||
@ -7,12 +7,8 @@ import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ListCell;
|
||||
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.layout.*;
|
||||
import javafx.stage.FileChooser;
|
||||
import p.studio.Container;
|
||||
import p.studio.projects.KnownProjectsService;
|
||||
|
||||
@ -6,13 +6,7 @@ import javafx.stage.Stage;
|
||||
import javafx.stage.StageStyle;
|
||||
import p.packer.messages.InitWorkspaceRequest;
|
||||
import p.studio.Container;
|
||||
import p.studio.events.StudioProjectLoadingCompletedEvent;
|
||||
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.events.*;
|
||||
import p.studio.projects.KnownProjectsService;
|
||||
import p.studio.projects.ProjectCatalogService;
|
||||
import p.studio.projects.ProjectReference;
|
||||
|
||||
@ -5,6 +5,7 @@ import p.studio.events.StudioPackerOperationEvent;
|
||||
import p.studio.events.StudioWorkspaceEventBus;
|
||||
import p.studio.utilities.i18n.I18n;
|
||||
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.StudioAssetsWorkspaceRefreshStartedEvent;
|
||||
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceRefreshedEvent;
|
||||
@ -29,6 +30,9 @@ public final class AssetLogsPane extends LogsPane implements StudioEventAware {
|
||||
|
||||
@Override
|
||||
public void registerEventSubscriptions() {
|
||||
eventBindings.listen(workspaceBus, StudioAssetLogEvent.class).handle(event -> {
|
||||
appendLine("[" + event.source() + "] " + event.message());
|
||||
});
|
||||
eventBindings.listen(workspaceBus, StudioAssetsWorkspaceRefreshStartedEvent.class).handle(event -> {
|
||||
appendLine("[refresh] Asset scan started.");
|
||||
});
|
||||
|
||||
@ -60,7 +60,7 @@ public final class AssetDetailsControl extends VBox implements StudioEventAware
|
||||
this.projectReference = Objects.requireNonNull(projectReference, "projectReference");
|
||||
this.workspaceBus = Objects.requireNonNull(workspaceBus, "workspaceBus");
|
||||
this.summaryControl = new AssetDetailsSummaryControl(projectReference, workspaceBus);
|
||||
this.contractControl = new AssetDetailsContractControl(workspaceBus);
|
||||
this.contractControl = new AssetDetailsContractControl(projectReference, workspaceBus);
|
||||
this.actionsSection = createActionsSection();
|
||||
|
||||
getStyleClass().add("assets-workspace-pane");
|
||||
|
||||
@ -9,6 +9,7 @@ import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import p.packer.messages.assets.AssetAction;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
import p.studio.Container;
|
||||
import p.studio.projects.ProjectReference;
|
||||
import p.studio.utilities.i18n.I18n;
|
||||
@ -44,6 +45,13 @@ public final class AssetDetailsUiSupport {
|
||||
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) {
|
||||
final HBox row = new HBox(12);
|
||||
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