From fccc2162f6f530f1c4019d2a120c9d86554e0f40 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 23 May 2023 00:09:11 +0900 Subject: [PATCH] quick and dirty but working linter --- .idea/libraries/android_lint.xml | 10 -- .idea/libraries/io_github_classgraph.xml | 14 +++ ModuleComputers/ModuleComputers.iml | 2 +- TerrarumBuild.iml | 2 +- lib/classgraph-4.8.157-javadoc.jar | 3 + lib/classgraph-4.8.157-sources.jar | 3 + lib/classgraph-4.8.157.jar | 3 + src/net/torvald/terrarum/QuickDirtyLint.kt | 114 ++++++++++++++++++ .../UnserialisableTypeIssueRegistry.kt | 4 +- src/net/torvald/terrarum/gameactors/Actor.kt | 5 + .../torvald/terrarum/gameitems/GameItem.kt | 3 + .../gameactors/ActorHumanoid.kt | 4 +- .../gameitems/ItemSwingingDoorOak.kt | 8 +- .../modulebasegame/gameitems/ItemTapestry.kt | 2 +- 14 files changed, 156 insertions(+), 21 deletions(-) delete mode 100644 .idea/libraries/android_lint.xml create mode 100644 .idea/libraries/io_github_classgraph.xml create mode 100644 lib/classgraph-4.8.157-javadoc.jar create mode 100644 lib/classgraph-4.8.157-sources.jar create mode 100644 lib/classgraph-4.8.157.jar create mode 100644 src/net/torvald/terrarum/QuickDirtyLint.kt diff --git a/.idea/libraries/android_lint.xml b/.idea/libraries/android_lint.xml deleted file mode 100644 index 6e3e4b9b0..000000000 --- a/.idea/libraries/android_lint.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/io_github_classgraph.xml b/.idea/libraries/io_github_classgraph.xml new file mode 100644 index 000000000..938254d35 --- /dev/null +++ b/.idea/libraries/io_github_classgraph.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ModuleComputers/ModuleComputers.iml b/ModuleComputers/ModuleComputers.iml index 71633623d..b6f9df865 100644 --- a/ModuleComputers/ModuleComputers.iml +++ b/ModuleComputers/ModuleComputers.iml @@ -16,6 +16,6 @@ - + \ No newline at end of file diff --git a/TerrarumBuild.iml b/TerrarumBuild.iml index d564708a8..0bad4ebf2 100644 --- a/TerrarumBuild.iml +++ b/TerrarumBuild.iml @@ -24,6 +24,6 @@ - + \ No newline at end of file diff --git a/lib/classgraph-4.8.157-javadoc.jar b/lib/classgraph-4.8.157-javadoc.jar new file mode 100644 index 000000000..34f5934f4 --- /dev/null +++ b/lib/classgraph-4.8.157-javadoc.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34a1fdfa7fe17598754e2adabbdc619b6c4db77e1a76357470d676383bb29d90 +size 926644 diff --git a/lib/classgraph-4.8.157-sources.jar b/lib/classgraph-4.8.157-sources.jar new file mode 100644 index 000000000..8e8652a8d --- /dev/null +++ b/lib/classgraph-4.8.157-sources.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a74301da9a729a2cb614b2350fcb5d782b3e75ef305a0a107847481966cb128 +size 512990 diff --git a/lib/classgraph-4.8.157.jar b/lib/classgraph-4.8.157.jar new file mode 100644 index 000000000..328339e76 --- /dev/null +++ b/lib/classgraph-4.8.157.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38be6bbbbb06110f7683dc4b04964d9ca4d32fdeeace58169aab8f16b592aabe +size 564333 diff --git a/src/net/torvald/terrarum/QuickDirtyLint.kt b/src/net/torvald/terrarum/QuickDirtyLint.kt new file mode 100644 index 000000000..0978c6251 --- /dev/null +++ b/src/net/torvald/terrarum/QuickDirtyLint.kt @@ -0,0 +1,114 @@ +package net.torvald.terrarum + +import io.github.classgraph.ClassGraph +import io.github.classgraph.ClassInfo +import net.torvald.random.HQRNG +import net.torvald.terrarum.gameactors.Actor +import net.torvald.terrarum.gameitems.GameItem +import java.util.* + +/** + * Created by minjaesong on 2023-05-22. + */ +fun main() { + + val superClasses = listOf( + Actor::class.java, + GameItem::class.java + ) + + val serialisablePrimitives = listOf( + // comparison: exact match + "Z", + "B", + "S", + "I", + "J", + "F", + "D", + ).flatMap { listOf(it, "[$it") } + + val serialisableTypes = listOf( + // arrays: has '[' prepended + // comparison: startsWith + + // primitives + "Ljava/lang/String", // includes ZipCodedStr + "Ljava/lang/Boolean", + "Ljava/lang/Byte", + "Ljava/lang/Short", + "Ljava/lang/Integer", + "Ljava/lang/Long", + "Ljava/lang/Float", + "Ljava/lang/Double", + // has serialiser on net.torvald.terrarum.serialise.Common + "Ljava/math/BigInteger", + "Ljava/util/UUID", + "Ljava/util/HashMap", + "Ljava/util/HashSet", + "Ljava/util/ArrayList", + "Lnet/torvald/terrarum/gameworld/BlockLayer", + "Lnet/torvald/terrarum/gameworld/WorldTime", + // complex types + "Lnet/torvald/gdx/graphics/Cvec", + "Lnet/torvald/random/HQRNG", + "Lnet/torvald/spriteanimation/SpriteAnimation", + "Lnet/torvald/terrarum/Codex", + "Lnet/torvald/terrarum/Point2d", + "Lnet/torvald/terrarum/Point2i", + "Lnet/torvald/terrarum/KVHashMap", + "Lnet/torvald/terrarum/gameactors/Actor\$RenderOrder", + "Lnet/torvald/terrarum/gameactors/ActorValue", + "Lnet/torvald/terrarum/gameactors/Hitbox", + "Lnet/torvald/terrarum/gameactors/Lightbox", + "Lnet/torvald/terrarum/gameactors/PhysProperties", + "Lnet/torvald/terrarum/gameitems/GameItem", + "Lnet/torvald/terrarum/utils/HashArray", + "Lnet/torvald/terrarum/utils/HashedWirings", + "Lnet/torvald/terrarum/utils/HashedWiringGraph", + "Lnet/torvald/terrarum/utils/WiringGraphMap", + "Lnet/torvald/terrarum/savegame/ByteArray64", + "Lnet/torvald/terrarum/modulebasegame/gameactors/ActorInventory", + "Lnet/torvald/terrarum/modulebasegame/gameactors/BlockBox", + "Lnet/torvald/terrarum/modulebasegame/gameactors/FixtureInventory", + "Lkotlin/ranges/IntRange", + "Lorg/dyn4j/geometry/Vector2", + "Lcom/badlogic/gdx/graphics/Color", + // subclasses + "Lnet/torvald/terrarum/gameactors/BlockMarkerActor", + "Lnet/torvald/terrarum/gameactors/Actor", + "Lnet/torvald/terrarum/gameactors/ActorWithBody", + "Lnet/torvald/terrarum/gameactors/ActorHumanoid", + // composite types + "Lkotlin/Pair" + ).flatMap { listOf(it, "[$it") } + + val classaNonGrata = listOf( + "net.torvald.terrarum.modulebasegame.MovableWorldCamera" + ) + + ClassGraph().acceptPackages("net.torvald.terrarum")/*.verbose()*/.enableAllInfo().scan().let { scan -> + val offendingFields = scan.allClasses.filter { classinfo -> + superClasses.any { classinfo.extendsSuperclass(it) || classinfo.name == it.canonicalName } && + !classaNonGrata.contains(classinfo.name) + }.flatMap { clazz -> + clazz.declaredFieldInfo.filter { field -> + !field.isTransient && + !field.isEnum && + !serialisablePrimitives.contains(field.typeSignatureOrTypeDescriptorStr) && + serialisableTypes.none { field.typeSignatureOrTypeDescriptorStr.startsWith(it) } && + !field.typeSignatureOrTypeDescriptorStr.endsWith("\$Companion;") && + !field.className.contains("$") && + !field.name.contains("$") + } + } + +// println(offendingFields) + + offendingFields.forEach { + println("\u001B[1m${it.name}\u001B[m\n\t\u001B[32mfrom: \u001B[m${it.className}\n\t\u001B[32mtype: \u001B[m${it.typeSignatureOrTypeDescriptorStr}") + } + } + + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/UnserialisableTypeIssueRegistry.kt b/src/net/torvald/terrarum/UnserialisableTypeIssueRegistry.kt index 4ea2b02d4..ce8ac0b44 100644 --- a/src/net/torvald/terrarum/UnserialisableTypeIssueRegistry.kt +++ b/src/net/torvald/terrarum/UnserialisableTypeIssueRegistry.kt @@ -1,6 +1,6 @@ package net.torvald.terrarum -import com.android.tools.lint.client.api.IssueRegistry +/*import com.android.tools.lint.client.api.IssueRegistry import com.android.tools.lint.client.api.UElementHandler import com.android.tools.lint.detector.api.* import net.torvald.random.HQRNG @@ -94,4 +94,4 @@ class TerrarumNonTransientUnserialisableType : Detector(), Detector.UastScanner } } } -} +}*/ diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt index e2d46f56f..ed974d2af 100644 --- a/src/net/torvald/terrarum/gameactors/Actor.kt +++ b/src/net/torvald/terrarum/gameactors/Actor.kt @@ -1,8 +1,10 @@ package net.torvald.terrarum.gameactors import net.torvald.random.HQRNG +import net.torvald.terrarum.INGAME import net.torvald.terrarum.ReferencingRanges import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid import net.torvald.terrarum.modulebasegame.gameactors.Pocketed import net.torvald.terrarum.savegame.toBigEndian import net.torvald.terrarum.utils.PasswordBase32 @@ -82,6 +84,9 @@ abstract class Actor : Comparable, Runnable { if (this is Pocketed) inventory.actor = this + if (this is ActorHumanoid && vehicleRidingActorID != null) { + vehicleRiding = INGAME.getActorByID(vehicleRidingActorID!!) as Controllable + } } /** diff --git a/src/net/torvald/terrarum/gameitems/GameItem.kt b/src/net/torvald/terrarum/gameitems/GameItem.kt index b4c9a54b3..28a90c286 100644 --- a/src/net/torvald/terrarum/gameitems/GameItem.kt +++ b/src/net/torvald/terrarum/gameitems/GameItem.kt @@ -13,6 +13,9 @@ import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory import net.torvald.terrarum.modulebasegame.gameactors.Pocketed +import net.torvald.terrarum.savegame.ByteArray64 +import net.torvald.terrarum.utils.HashArray +import net.torvald.terrarum.utils.ZipCodedStr import org.dyn4j.geometry.Vector2 typealias ItemID = String diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt index 270031882..097fa6872 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt @@ -37,8 +37,8 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L this.physProp = physProp } - var vehicleRiding: Controllable? = null // usually player only - + @Transient internal var vehicleRiding: Controllable? = null // usually player only + var vehicleRidingActorID: ActorID? = null /** Must be set by PlayerFactory */ diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSwingingDoorOak.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSwingingDoorOak.kt index f02c43ca6..ec13367d0 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSwingingDoorOak.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSwingingDoorOak.kt @@ -28,7 +28,7 @@ class ItemSwingingDoorOak(originalID: ItemID) : equipPosition = EquipPosition.HAND_GRIP } - override val makeFixture: () -> FixtureBase = { + @Transient override val makeFixture: () -> FixtureBase = { FixtureSwingingDoorOak() } @@ -53,7 +53,7 @@ class ItemSwingingDoorEbony(originalID: ItemID) : equipPosition = EquipPosition.HAND_GRIP } - override val makeFixture: () -> FixtureBase = { + @Transient override val makeFixture: () -> FixtureBase = { FixtureSwingingDoorEbony() } @@ -78,7 +78,7 @@ class ItemSwingingDoorBirch(originalID: ItemID) : equipPosition = EquipPosition.HAND_GRIP } - override val makeFixture: () -> FixtureBase = { + @Transient override val makeFixture: () -> FixtureBase = { FixtureSwingingDoorBirch() } @@ -103,7 +103,7 @@ class ItemSwingingDoorRosewood(originalID: ItemID) : equipPosition = EquipPosition.HAND_GRIP } - override val makeFixture: () -> FixtureBase = { + @Transient override val makeFixture: () -> FixtureBase = { FixtureSwingingDoorRosewood() } diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt index ec20ca483..b7110804e 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt @@ -30,7 +30,7 @@ class ItemTapestry(originalID: ItemID) : FixtureItemBase(originalID, "net.torval equipPosition = EquipPosition.HAND_GRIP } - override val makeFixture: () -> FixtureBase = { + @Transient override val makeFixture: () -> FixtureBase = { FixtureTapestry( Gdx.files.internal("assets/monkey_island").readBytes(), Block.PLANK_NORMAL