Revert "Revert "feat: upgrade to Gestalt 8 (#5267)" (#5270)" (#5271)

This reverts commit 1cabdb369d.
This commit is contained in:
jdrueckert 2024-08-04 13:12:26 +02:00 committed by GitHub
parent 1cabdb369d
commit 96e8a783d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
305 changed files with 442 additions and 312 deletions

View file

@ -44,7 +44,7 @@ dependencies {
implementation("org.jgrapht:jgrapht-core:1.5.0")
// for inspecting modules
implementation("org.terasology.gestalt:gestalt-module:7.2.0")
implementation("org.terasology.gestalt:gestalt-module:8.0.0-SNAPSHOT")
// plugins we configure
implementation("com.github.spotbugs.snom:spotbugs-gradle-plugin:5.2.3")

View file

@ -66,8 +66,8 @@ class ModuleMetadataForGradle(private val moduleConfig: ModuleMetadata) {
}
private fun versionStringFromGestaltDependency(gestaltDependency: DependencyInfo): String {
val version = if (gestaltDependency.versionPredicate() is VersionRange) {
gestaltDependency.versionPredicate().toString()
val version = if (gestaltDependency.versionRange() is VersionRange) {
gestaltDependency.versionRange().toString()
} else {
// TODO: gradle-compatible version expressions for gestalt dependencies
// https://github.com/MovingBlocks/gestalt/issues/114

View file

@ -54,6 +54,8 @@ dependencies {
implementation(group = "org.terasology.engine", name = "engine", version = moduleMetadata.engineVersion())
testImplementation(group = "org.terasology.engine", name = "engine-tests", version = moduleMetadata.engineVersion())
annotationProcessor("org.terasology.gestalt:gestalt-inject-java:8.0.0-SNAPSHOT")
for ((gradleDep, optional) in moduleMetadata.moduleDependencies()) {
if (optional) {
// `optional` module dependencies are ones it does not require for runtime
@ -144,8 +146,17 @@ tasks.named("processResources") {
dependsOn("syncAssets", "syncOverrides", "syncDeltas", "syncModuleInfo")
}
tasks.named("compileJava") {
tasks.named<JavaCompile>("compileJava") {
dependsOn("processResources")
// Create an asset list during compilation (needed for Gestalt 8)
inputs.files(sourceSets.main.get().resources.srcDirs)
options.compilerArgs = arrayListOf("-Aresource=${sourceSets.main.get().resources.srcDirs.joinToString(File.pathSeparator)}")
}
tasks.named<JavaCompile>("compileTestJava") {
dependsOn("processResources")
// Create an asset list during compilation (needed for Gestalt 8)
inputs.files(sourceSets.test.get().resources.srcDirs)
options.compilerArgs = arrayListOf("-Aresource=${sourceSets.test.get().resources.srcDirs.joinToString(File.pathSeparator)}")
}
tasks.named<Test>("test") {

View file

@ -56,6 +56,11 @@ dependencies {
implementation("com.google.protobuf:protobuf-java:3.16.1")
implementation("org.terasology:reflections:0.9.12-MB")
implementation("com.github.zafarkhaja:java-semver:0.10.2")
annotationProcessor("org.terasology.gestalt:gestalt-inject-java:8.0.0-SNAPSHOT")
testAnnotationProcessor("org.terasology.gestalt:gestalt-inject-java:8.0.0-SNAPSHOT")
implementation("org.terasology.joml-ext:joml-test:0.1.0")
testImplementation("ch.qos.logback:logback-classic:1.4.14") {
@ -91,8 +96,17 @@ tasks.register<Copy>("copyResourcesToClasses") {
into(sourceSets["main"].output.classesDirs.first())
}
tasks.named("compileJava") {
tasks.named<JavaCompile>("compileJava") {
dependsOn("copyResourcesToClasses")
// Create an asset list during compilation (needed for Gestalt 8)
inputs.files(sourceSets.main.get().resources.srcDirs)
options.compilerArgs = arrayListOf("-Aresource=${sourceSets.main.get().resources.srcDirs.joinToString(File.pathSeparator)}")
}
tasks.named<JavaCompile>("compileTestJava") {
dependsOn("copyResourcesToClasses")
// Create an asset list during compilation (needed for Gestalt 8)
inputs.files(sourceSets.test.get().resources.srcDirs)
options.compilerArgs = arrayListOf("-Aresource=${sourceSets.test.get().resources.srcDirs.joinToString(File.pathSeparator)}")
}
tasks.withType<Jar> {

View file

@ -3,7 +3,7 @@
package org.terasology.unittest;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
@API
public class ExampleClass implements ExampleInterface {

View file

@ -3,8 +3,10 @@
package org.terasology.unittest;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.context.annotation.IndexInherited;
@API
@IndexInherited
public interface ExampleInterface {
}

View file

@ -4,4 +4,4 @@
@API
package org.terasology.unittest.stubs;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -4,4 +4,4 @@
@API
package org.terasology.unittest.worlds;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -10,7 +10,7 @@
import org.terasology.engine.core.module.ModuleManager;
import org.terasology.engine.testUtil.ModuleManagerFactory;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.net.URL;
import java.util.HashMap;

View file

@ -10,7 +10,7 @@
import org.terasology.engine.core.module.ModuleManager;
import org.terasology.engine.testUtil.ModuleManagerFactory;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

View file

@ -8,7 +8,7 @@
import org.junit.jupiter.api.Test;
import org.terasology.gestalt.module.Module;
import org.terasology.gestalt.module.ModuleMetadata;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.gestalt.naming.Name;
import org.terasology.gestalt.naming.Version;
import org.terasology.unittest.ExampleClass;
@ -56,9 +56,13 @@ public void directoryModuleContainsClass() {
public void archiveModuleContainsClass() throws IOException {
Module module = factory.createArchiveModule(new File("FIXME.jar"));
Class<?> someClassInTheModule = module.getModuleManifest().getTypesAnnotatedWith(API.class).iterator().next();
String someClassInTheModule = module.getClassIndex().getTypesAnnotatedWith(API.class.getName()).iterator().next();
assertTrue(module.getClassPredicate().test(someClassInTheModule));
try {
assertTrue(module.getClassPredicate().test(Class.forName(someClassInTheModule)));
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
assertFalse(module.getClassPredicate().test(SOME_CLASS_OUTSIDE_THE_MODULE));
}

View file

@ -4,8 +4,8 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.reflections.Reflections;
import org.terasology.engine.core.TerasologyConstants;
import org.terasology.gestalt.di.index.CompoundClassIndex;
import org.terasology.gestalt.module.Module;
import org.terasology.gestalt.module.ModuleMetadata;
import org.terasology.gestalt.module.ModuleRegistry;
@ -86,7 +86,7 @@ private Module buildSimpleModule(String id, String version) {
if (version != null) {
metadata.setVersion(new Version(version));
}
return new Module(metadata, new EmptyFileSource(), Collections.emptyList(), new Reflections(), (c) -> false);
return new Module(metadata, new EmptyFileSource(), Collections.emptyList(), new CompoundClassIndex(), (c) -> false);
}
private Module buildEngineModule(String version) {
return buildSimpleModule(TerasologyConstants.ENGINE_MODULE.toString(), version);

View file

@ -9,13 +9,13 @@
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.junit.jupiter.MockitoExtension;
import org.reflections.Reflections;
import org.terasology.engine.config.flexible.AutoConfig;
import org.terasology.engine.core.PathManager;
import org.terasology.engine.core.PathManagerProvider;
import org.terasology.engine.core.subsystem.EngineSubsystem;
import org.terasology.engine.logic.permission.PermissionSetComponent;
import org.terasology.engine.world.block.structure.AttachSupportRequiredComponent;
import org.terasology.gestalt.di.index.CompoundClassIndex;
import org.terasology.gestalt.module.Module;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.gestalt.module.ModuleMetadata;
@ -59,7 +59,7 @@ private Module getEmptyTestModule() {
new ModuleMetadata(new Name("EmptyTestModule"), new Version("0.0.1")),
new EmptyFileSource(),
Collections.emptyList(),
new Reflections(),
new CompoundClassIndex(),
(clazz) -> false
);
}
@ -127,7 +127,7 @@ public void engineModuleContainsSubsystems() {
environment = manager.getEnvironment();
engineModule = environment.get(ENGINE_MODULE);
assertThat(engineModule.getModuleManifest().getSubTypesOf(EngineSubsystem.class)).contains(subsystem);
assertThat(engineModule.getClassIndex().getSubtypesOf(EngineSubsystem.class.getName())).contains(subsystem.getName());
assertThat(environment.getSubtypesOf(EngineSubsystem.class)).contains(subsystem);

View file

@ -7,6 +7,7 @@
import com.google.gson.Gson;
import org.joml.Vector3f;
import org.junit.jupiter.api.Test;
import org.terasology.context.annotation.IndexInherited;
import org.terasology.engine.ModuleEnvironmentTest;
import org.terasology.engine.core.TerasologyConstants;
import org.terasology.engine.core.module.ModuleContext;
@ -31,7 +32,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.terasology.engine.testUtil.Assertions.assertNotEmpty;
class TypeSerializerTest extends ModuleEnvironmentTest {
public class TypeSerializerTest extends ModuleEnvironmentTest {
private static final SomeClass<Integer> INSTANCE = new SomeClass<>(0xdeadbeef);
private static final String INSTANCE_JSON = "{\"generic-t\":-559038737,\"list\":[50,51,-52,-53]," +
"\"animals\":[{\"class\":\"org.terasology.engine.persistence.serializers.TypeSerializerTest$Dog\"," +
@ -155,6 +156,7 @@ public String toString() {
}
@SuppressWarnings("checkstyle:FinalClass")
@IndexInherited
public static class Animal<T> {
public T data;
@ -178,6 +180,11 @@ public boolean equals(Object o) {
public int hashCode() {
return Objects.hash(data);
}
@Override
public String toString() {
return "Animal(data = " + data.toString() + ")";
}
}
public static final class Dog<T> extends Animal<T> {

View file

@ -120,19 +120,25 @@ dependencies {
}
implementation("net.logstash.logback:logstash-logback-encoder:7.4")
// JSemVer (Semantic Versioning) - A dependency of Gestalt
implementation("com.github.zafarkhaja:java-semver:0.10.2")
// Our developed libs
api("org.terasology.gestalt:gestalt-asset-core:7.2.1-SNAPSHOT")
api("org.terasology.gestalt:gestalt-module:7.2.1-SNAPSHOT")
api("org.terasology.gestalt:gestalt-entity-system:7.2.1-SNAPSHOT")
api("org.terasology.gestalt:gestalt-util:7.2.1-SNAPSHOT")
api("org.terasology.gestalt:gestalt-asset-core:8.0.0-SNAPSHOT")
api("org.terasology.gestalt:gestalt-module:8.0.0-SNAPSHOT")
api("org.terasology.gestalt:gestalt-entity-system:8.0.0-SNAPSHOT")
api("org.terasology.gestalt:gestalt-util:8.0.0-SNAPSHOT")
api("org.terasology.gestalt:gestalt-inject:8.0.0-SNAPSHOT")
annotationProcessor("org.terasology.gestalt:gestalt-inject-java:8.0.0-SNAPSHOT")
api("org.terasology:TeraMath:1.5.0")
api("org.terasology:splash-screen:1.1.1")
api("org.terasology.jnlua:JNLua:0.1.0-SNAPSHOT")
api("org.terasology.jnbullet:JNBullet:1.0.4")
api("org.terasology.nui:nui:3.0.0")
api("org.terasology.nui:nui-reflect:3.0.0")
api("org.terasology.nui:nui-gestalt7:3.0.0")
api("org.terasology.nui:nui:4.0.0-SNAPSHOT")
api("org.terasology.nui:nui-reflect:4.0.0-SNAPSHOT")
api("org.terasology.nui:nui-gestalt:4.0.0-SNAPSHOT")
// Wildcard dependency to catch any libs provided with the project (remote repo preferred instead)
@ -206,11 +212,23 @@ tasks.register<Copy>("copyResourcesToClasses") {
into(sourceSets["main"].output.classesDirs.first())
}
tasks.named("compileJava") {
tasks.named<JavaCompile>("compileJava") {
dependsOn(
tasks.named("copyResourcesToClasses"),
tasks.named("createVersionInfoFile")
)
// Create an asset list during compilation (needed for Gestalt 8)
inputs.files(sourceSets.main.get().resources.srcDirs)
options.compilerArgs = arrayListOf("-Aresource=${sourceSets.main.get().resources.srcDirs.joinToString(File.pathSeparator)}")
}
tasks.named<JavaCompile>("compileTestJava") {
dependsOn(
tasks.named("copyResourcesToClasses"),
tasks.named("createVersionInfoFile")
)
// Create an asset list during compilation (needed for Gestalt 8)
inputs.files(sourceSets.test.get().resources.srcDirs)
options.compilerArgs = arrayListOf("-Aresource=${sourceSets.test.get().resources.srcDirs.joinToString(File.pathSeparator)}")
}
// Instructions for packaging a jar file for the engine

View file

@ -22,7 +22,8 @@ public abstract class Sound<T extends AssetData> extends Asset<T> implements org
* @param assetType The asset type this asset belongs to.
*/
protected Sound(ResourceUrn urn, AssetType<?, T> assetType, DisposableResource resource) {
super(urn, assetType, resource);
super(urn, assetType);
setDisposableResource(resource);
}
/**

View file

@ -17,4 +17,4 @@
*/
@API package org.terasology.engine.audio.events;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.audio;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -23,7 +23,7 @@
import org.terasology.engine.utilities.gson.SetMultimapTypeAdapter;
import org.terasology.engine.utilities.gson.UriTypeAdapterFactory;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.gestalt.naming.Name;
import org.terasology.gestalt.naming.Version;
import org.terasology.gestalt.naming.gson.NameTypeAdapter;

View file

@ -4,7 +4,7 @@
package org.terasology.engine.config;
import org.terasology.engine.core.subsystem.Resolution;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.engine.rendering.cameras.PerspectiveCameraSettings;
import org.terasology.engine.rendering.nui.layers.mainMenu.videoSettings.DisplayModeSetting;
import org.terasology.engine.rendering.nui.layers.mainMenu.videoSettings.ScreenshotSize;

View file

@ -5,7 +5,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.engine.utilities.subscribables.AbstractSubscribable;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.config.facade;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* TelemetryConfiguration is a wrapper for {@link org.terasology.engine.config.TelemetryConfig}.

View file

@ -4,6 +4,7 @@
import com.google.common.collect.ImmutableList;
import org.reflections.ReflectionUtils;
import org.terasology.context.annotation.IndexInherited;
import org.terasology.engine.config.flexible.internal.SettingBuilder;
import org.terasology.engine.config.flexible.internal.SettingImplBuilder;
import org.terasology.engine.core.SimpleUri;
@ -18,6 +19,7 @@
* Represents a config class that will be automatically initialized and rendered by the engine.
* All settings must be contained in {@code public static} fields of type {@link Setting}.
*/
@IndexInherited
public abstract class AutoConfig {
private SimpleUri id;

View file

@ -3,7 +3,7 @@
package org.terasology.engine.config.flexible;
import org.terasology.engine.config.flexible.constraints.SettingConstraint;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.reflection.TypeInfo;
/**

View file

@ -2,4 +2,4 @@
// SPDX-License-Identifier: Apache-2.0
@API package org.terasology.engine.config.flexible.constraints;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.config.flexible.ui;
import org.terasology.context.annotation.IndexInherited;
import org.terasology.engine.config.flexible.Setting;
import org.terasology.engine.config.flexible.constraints.SettingConstraint;
import org.terasology.nui.UIWidget;
@ -17,6 +18,7 @@
* @param <T> type of setting
* @param <C> concrete type of {@link SettingConstraint}
*/
@IndexInherited
public abstract class ConstraintWidgetFactory<T, C extends SettingConstraint<T>> {
private Setting<T> setting;

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.context;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.util.NoSuchElementException;
import java.util.Optional;

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.core;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.gestalt.naming.Name;
import java.util.Objects;

View file

@ -21,7 +21,7 @@
import org.terasology.engine.registry.InjectionHelper;
import org.terasology.gestalt.module.Module;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.gestalt.naming.Name;
import java.util.List;

View file

@ -5,7 +5,7 @@
import org.terasology.engine.monitoring.ThreadActivity;
import org.terasology.engine.monitoring.ThreadMonitor;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import reactor.core.Disposable;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

View file

@ -3,7 +3,7 @@
package org.terasology.engine.core;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* A general interface for observers

View file

@ -4,7 +4,7 @@
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.gestalt.naming.Name;
/**

View file

@ -487,7 +487,12 @@ public boolean tick() {
}
if (assetTypeManager instanceof AutoReloadAssetTypeManager) {
((AutoReloadAssetTypeManager) assetTypeManager).reloadChangedAssets();
try {
((AutoReloadAssetTypeManager) assetTypeManager).reloadChangedAssets();
} catch (IllegalStateException ignore) {
// ignore: This can happen if a module environment switch is happening in a different thread.
return true;
}
}
processPendingState();

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.core;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* The timer manages all time in the game.

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.core;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.gestalt.naming.Name;
/**

View file

@ -3,7 +3,7 @@
package org.terasology.engine.core.bootstrap;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.gestalt.naming.Name;
import java.lang.annotation.Annotation;

View file

@ -4,7 +4,7 @@
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* Event which is triggered when LocalPlayer is setup with a character entity. Allows for detection of when LocalPlayer is

View file

@ -50,7 +50,7 @@ public Module createDirectoryModule(ModuleMetadata metadata, File directory) {
Module module = super.createDirectoryModule(metadata, directory);
return new Module(
module.getMetadata(), module.getResources(),
module.getClasspaths(), module.getModuleManifest(),
module.getClasspaths(), module.getClassIndex(),
new ClassesInModule(module));
}
@ -59,7 +59,7 @@ public Module createArchiveModule(ModuleMetadata metadata, File archive) throws
Module module = super.createArchiveModule(metadata, archive);
return new Module(
module.getMetadata(), module.getResources(),
module.getClasspaths(), module.getModuleManifest(),
module.getClasspaths(), module.getClassIndex(),
new ClassesInModule(module));
}
@ -158,7 +158,6 @@ private static Path fromUrl(URL url) {
static class ClassesInModule implements Predicate<Class<?>> {
private final Set<URL> classpaths;
private final ClassLoader[] classLoaders;
private final String name;
ClassesInModule(Module module) {
@ -174,13 +173,12 @@ static class ClassesInModule implements Predicate<Class<?>> {
throw new RuntimeException(e);
}
}).collect(ImmutableSet.toImmutableSet());
classLoaders = module.getModuleManifest().getConfiguration().getClassLoaders();
name = module.getId().toString();
}
@Override
public boolean test(Class<?> aClass) {
URL classUrl = ClasspathHelper.forClass(aClass, classLoaders);
URL classUrl = ClasspathHelper.forClass(aClass);
return classpaths.contains(classUrl);
}

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.core.module;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.io.IOException;
import java.io.InputStream;

View file

@ -6,10 +6,10 @@
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.engine.core.TerasologyConstants;
import org.terasology.gestalt.di.index.CompoundClassIndex;
import org.terasology.gestalt.module.Module;
import org.terasology.gestalt.module.ModuleMetadata;
import org.terasology.gestalt.module.ModuleMetadataJsonAdapter;
@ -60,7 +60,7 @@ public ModuleRegistry call() throws IOException {
ModuleMetadata meta = metaReader.read(new StringReader(json));
logger.debug("Read module {} - {}", meta.getId(), meta.getVersion()); //NOPMD
modules.add(new Module(meta, new EmptyFileSource(), Collections.emptyList(), new Reflections(),
modules.add(new Module(meta, new EmptyFileSource(), Collections.emptyList(), new CompoundClassIndex(),
(c) -> false));
}

View file

@ -15,6 +15,9 @@
import org.terasology.engine.core.PathManager;
import org.terasology.engine.core.TerasologyConstants;
import org.terasology.engine.utilities.Jvm;
import org.terasology.gestalt.di.DefaultBeanContext;
import org.terasology.gestalt.di.index.CompoundClassIndex;
import org.terasology.gestalt.di.index.UrlClassIndex;
import org.terasology.gestalt.module.Module;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.gestalt.module.ModuleFactory;
@ -198,7 +201,10 @@ static Module loadAndConfigureEngineModule(ModuleFactory moduleFactory, List<Cla
Module packageModule = moduleFactory.createPackageModule("org.terasology.engine");
// We need to add reflections from our subsystems and other classes.
Reflections packageReflections = packageModule.getModuleManifest();
CompoundClassIndex packageClassIndex = new CompoundClassIndex();
packageClassIndex.add(packageModule.getClassIndex());
Reflections packageReflections = new Reflections();
ConfigurationBuilder config = reflectionsConfigurationFrom(packageReflections);
Collection<File> classPaths = new HashSet<>(packageModule.getClasspaths());
@ -206,6 +212,7 @@ static Module loadAndConfigureEngineModule(ModuleFactory moduleFactory, List<Cla
URL url = ClasspathHelper.forClass(aClass);
config.addUrls(url); // include this in reflections scan
classPaths.add(urlToFile(url)); // also include in Module.moduleClasspaths
packageClassIndex.add(UrlClassIndex.byClassLoader(aClass.getClassLoader()));
logger.debug("Adding path to engine module for class: {} {}", url, aClass);
}
@ -221,7 +228,7 @@ static Module loadAndConfigureEngineModule(ModuleFactory moduleFactory, List<Cla
packageModule.getMetadata(),
packageModule.getResources(),
classPaths,
packageReflections,
packageClassIndex,
clazz ->
packageModule.getClassPredicate().test(clazz)
|| config.getUrls().contains(ClasspathHelper.forClass(clazz))
@ -253,7 +260,9 @@ private void setupSandbox() {
ExternalApiWhitelist.PACKAGES.forEach(permissionSet::addAPIPackage);
APIScanner apiScanner = new APIScanner(permissionProviderFactory);
registry.stream().map(Module::getModuleManifest).forEach(apiScanner::scan);
for (Module module : registry) {
apiScanner.scan(module.getClassIndex());
}
permissionSet.grantPermission("com.google.gson", ReflectPermission.class);
permissionSet.grantPermission("com.google.gson.internal", ReflectPermission.class);
@ -366,9 +375,9 @@ public ModuleEnvironment loadEnvironment(Set<Module> modules, boolean asPrimary)
ModuleEnvironment newEnvironment;
boolean permissiveSecurityEnabled = Boolean.parseBoolean(System.getProperty(SystemConfig.PERMISSIVE_SECURITY_ENABLED_PROPERTY));
if (permissiveSecurityEnabled) {
newEnvironment = new ModuleEnvironment(finalModules, wrappingPermissionProviderFactory);
newEnvironment = new ModuleEnvironment(new DefaultBeanContext(), finalModules, wrappingPermissionProviderFactory);
} else {
newEnvironment = new ModuleEnvironment(finalModules, permissionProviderFactory);
newEnvironment = new ModuleEnvironment(new DefaultBeanContext(), finalModules, permissionProviderFactory);
}
if (asPrimary) {
environment = newEnvironment;

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.core.module;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.io.IOException;
import java.io.OutputStream;

View file

@ -5,7 +5,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.engine.core.PathManager;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.io.FileInputStream;
import java.io.FileOutputStream;

View file

@ -5,7 +5,7 @@
import org.terasology.engine.context.Context;
import org.terasology.engine.rendering.dag.ModuleRendering;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.gestalt.naming.Name;
import javax.annotation.Nullable;

View file

@ -4,4 +4,4 @@
@API
package org.terasology.engine.core.module.rendering;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -4,7 +4,7 @@
import org.terasology.engine.rendering.nui.layers.mainMenu.videoSettings.DisplayModeSetting;
import org.terasology.engine.utilities.subscribables.Subscribable;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.util.List;

View file

@ -2,12 +2,14 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.core.subsystem;
import org.terasology.context.annotation.IndexInherited;
import org.terasology.engine.context.Context;
import org.terasology.engine.core.ComponentSystemManager;
import org.terasology.engine.core.GameEngine;
import org.terasology.engine.core.modes.GameState;
import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager;
@IndexInherited
public interface EngineSubsystem {
/**

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.core.subsystem.common.hibernation;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
@API

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.entity.internal;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
@API
public enum EntityScope {

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.entitySystem.entity.lifecycleEvents;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.entitySystem.entity;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.entitySystem.event;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -24,7 +24,7 @@ public class ComponentLibrary extends ModuleClassLibrary<Component> {
private static final Logger logger = LoggerFactory.getLogger(ComponentLibrary.class);
public ComponentLibrary(ModuleEnvironment environment, ReflectFactory reflectFactory, CopyStrategyLibrary copyStrategyLibrary) {
super(environment, reflectFactory, copyStrategyLibrary);
super(() -> environment, reflectFactory, copyStrategyLibrary);
}
private ComponentLibrary(ComponentLibrary componentLibrary, CopyStrategyLibrary newCopyStrategies) {

View file

@ -21,7 +21,7 @@ public class EventLibrary extends ModuleClassLibrary<Event> {
private static final Logger logger = LoggerFactory.getLogger(EventLibrary.class);
public EventLibrary(ModuleEnvironment environment, ReflectFactory reflectFactory, CopyStrategyLibrary copyStrategyLibrary) {
super(environment, reflectFactory, copyStrategyLibrary);
super(() -> environment, reflectFactory, copyStrategyLibrary);
}
@Override

View file

@ -8,4 +8,4 @@
@API
package org.terasology.engine.entitySystem.metadata;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.entitySystem;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.entitySystem.prefab;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -4,7 +4,7 @@
import org.joml.Vector3i;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.util.Set;

View file

@ -5,7 +5,7 @@
import org.joml.Vector3i;
import org.terasology.engine.world.chunks.Chunk;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.util.HashSet;
import java.util.Set;

View file

@ -6,7 +6,7 @@
import org.terasology.engine.entitySystem.entity.internal.BaseEntityRef;
import org.terasology.engine.entitySystem.entity.internal.EntityScope;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* The component that allows the {@link SectorSimulationSystem} to send simulation events to a sector-scope entity.

View file

@ -4,7 +4,7 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* This is the event sent to all sector-level entities by the {@link SectorSimulationSystem}, allowing them to do simulation. It

View file

@ -7,7 +7,7 @@
import org.joml.Vector3ic;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.logic.location.LocationComponent;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.engine.world.chunks.Chunk;
import org.terasology.engine.world.chunks.ChunkProvider;
import org.terasology.engine.world.chunks.Chunks;

View file

@ -3,6 +3,8 @@
package org.terasology.engine.entitySystem.systems;
import org.terasology.context.annotation.Index;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@ -22,6 +24,7 @@
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Index
public @interface RegisterSystem {
String[] requiresOptional() default {};

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.entitySystem.systems;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -4,7 +4,7 @@
package org.terasology.engine.i18n;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.nui.translate.Translator;
import java.util.Locale;

View file

@ -36,7 +36,8 @@ public class Translation extends Asset<TranslationData> {
* @param data The actual translation data. Never <code>null</code>.
*/
public Translation(ResourceUrn urn, AssetType<?, TranslationData> assetType, TranslationData data, Translation.DisposalAction disposalAction) {
super(urn, assetType, disposalAction);
super(urn, assetType);
setDisposableResource(disposalAction);
this.disposalAction = disposalAction;
this.disposalAction.setAsset(this);
reload(data);

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.i18n.assets;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,6 +3,8 @@
package org.terasology.engine.input;
import org.terasology.context.annotation.Index;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@ -10,6 +12,7 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Index
public @interface RegisterBindAxis {
String id();

View file

@ -3,6 +3,7 @@
package org.terasology.engine.input;
import org.terasology.context.annotation.Index;
import org.terasology.input.ActivateMode;
import java.lang.annotation.ElementType;
@ -12,6 +13,7 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Index
public @interface RegisterBindButton {
String id();

View file

@ -3,6 +3,8 @@
package org.terasology.engine.input;
import org.terasology.context.annotation.Index;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@ -10,6 +12,7 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Index
public @interface RegisterRealBindAxis {
String id();

View file

@ -7,5 +7,5 @@
displayName = "${engine:menu#category-general}"
) package org.terasology.engine.input.binds.general;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.input.InputCategory;

View file

@ -10,5 +10,5 @@
"engine:frob"
}) package org.terasology.engine.input.binds.interaction;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.input.InputCategory;

View file

@ -6,7 +6,7 @@
import org.terasology.engine.input.BindButtonEvent;
import org.terasology.engine.input.DefaultBinding;
import org.terasology.engine.input.RegisterBindButton;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.input.ControllerId;
import org.terasology.input.InputType;

View file

@ -18,5 +18,5 @@
"engine:crouch"
}) package org.terasology.engine.input.binds.movement;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.input.InputCategory;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.input.cameraTarget;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.input.events;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.input;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.logic.actions;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.autoCreate;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* This component is used to mark prefabs that should automatically created when a game begins or is loaded, if one does not already exist.

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.behavior;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View file

@ -4,7 +4,7 @@
import org.terasology.engine.logic.behavior.asset.BehaviorTree;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* Entities with this component are handled by a behavior tree. Default tree to fetch may be set.

View file

@ -4,7 +4,7 @@
import org.terasology.engine.logic.behavior.asset.BehaviorTree;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* Entities with this component are handled by a behavior tree. Default tree to fetch may be set.

View file

@ -6,7 +6,7 @@
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.CollectiveBehaviorTreeRunner;
import org.terasology.engine.logic.common.DisplayNameComponent;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import java.util.Set;

View file

@ -6,7 +6,7 @@
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.BehaviorTreeRunner;
import org.terasology.engine.logic.common.DisplayNameComponent;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* An interpreter evaluates a behavior tree. Uses BehaviorTreeRunner to actually evaluate the tree. The runner

View file

@ -6,7 +6,7 @@
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.BaseAction;
import org.terasology.engine.logic.behavior.core.BehaviorState;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.nui.properties.Range;
/**

View file

@ -6,7 +6,7 @@
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.BaseAction;
import org.terasology.engine.logic.behavior.core.BehaviorState;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* Inverts the child's return value. Doesn't change RUNNING.

View file

@ -8,7 +8,7 @@
import org.terasology.engine.logic.behavior.core.BaseAction;
import org.terasology.engine.logic.behavior.core.BehaviorNode;
import org.terasology.engine.logic.behavior.core.BehaviorState;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.nui.properties.OneOf;
/**

View file

@ -6,7 +6,7 @@
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.BaseAction;
import org.terasology.engine.logic.behavior.core.BehaviorState;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* Node, that loops its child forever

View file

@ -6,7 +6,7 @@
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.BaseAction;
import org.terasology.engine.logic.behavior.core.BehaviorState;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.nui.properties.Range;
/**

View file

@ -8,7 +8,7 @@
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.BaseAction;
import org.terasology.engine.logic.behavior.core.BehaviorState;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.nui.properties.Range;
/**

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.logic.behavior.actions;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -6,7 +6,7 @@
import org.terasology.gestalt.assets.AssetType;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.engine.logic.behavior.core.BehaviorNode;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* Behavior tree asset. Can be loaded and saved into json. Actors should never run the nodes behind a asset directly.

View file

@ -5,7 +5,7 @@
import com.google.gson.Gson;
import com.google.gson.JsonIOException;
import com.google.gson.JsonSyntaxException;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.engine.registry.In;
import java.io.InputStream;

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.logic.behavior.asset;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -2,7 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.behavior.core;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.context.annotation.IndexInherited;
/**
* The action that is used by an action or decorator node. Every action node of a behavior tree has its own action
@ -12,6 +13,7 @@
* Action instances are shown in the property panel of the behavior editor.
*/
@API
@IndexInherited
public interface Action {
/**

View file

@ -13,7 +13,7 @@
import org.terasology.engine.registry.CoreRegistry;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.reflection.metadata.FieldMetadata;
import java.lang.reflect.Field;

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.behavior.core;
import org.terasology.engine.logic.behavior.BehaviorAction;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
/**
* BaseAction that uses BehaviorAction annotation as its name.

View file

@ -3,4 +3,4 @@
@API package org.terasology.engine.logic.behavior.core;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.behavior.nui;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.nui.Color;
/**

View file

@ -6,5 +6,5 @@
displayName = "${engine:menu#category-behavior}"
) package org.terasology.engine.logic.behavior.nui;
import org.terasology.gestalt.module.sandbox.API;
import org.terasology.context.annotation.API;
import org.terasology.input.InputCategory;

Some files were not shown because too many files have changed in this diff Show more