master Changelog 1.0-pre ======= - 0.0-pre-132 Attempt to inform consumer if transformation failed Exceptions that are thrown in artifact transforms are swallowed by Gradle unless it's necessary for a task execution. This means that artifact transforms that are run as part of IDE sync may have its exceptions silently ignored, while the dependency fails to resolve. The workaround for now is simply to try and log the thrown exception before throwing it, by wrapping the transform process in a try/catch. - 0.0-pre-131 Stabilize 5.0, fix defaults for a few things - 0.0-pre-130 Use JVM Aggregate Testing plugin to cleanup buildscript - 0.0-pre-129 Add `ArtifactAccessTransformer.Parameters#defaults` This helper method can be used when registering the transformer to set some defaults used by the default AccessTransformers tool. WARNING: Some of the parameters will not have their defaults set if the transform is registered after project evaluation! See the relevant JavaDoc comment for more details. - 0.0-pre-128 Revert "Lift sealed restriction from AccessTransformersConfiguration" This reverts commit ec5a418028efa7305cf39a7da0e99e5b2c706c03. I decided it was unnecessary for my use-case, and I don't want to expose or make extensible public API without reason. - 0.0-pre-127 Lift sealed restriction from AccessTransformersConfiguration This interface is not sealed since it is implemented by Forge Gradle for consumers to set the config file for the Minecraft dependency. Implementing this interface yourself is still highly discouraged. - 0.0-pre-126 Finalize API and define clear limitations In order to play nice with Gradle's design and the concept of reproduceable builds, I've decided to set a limit on how much the API can help consumers with. Moving forward, there are two clearly defined ways you can use this plugin: 1. Use the API, which is quicker and does a lot of set up. The trade-off is that it is limited to using incoming dependency subtitutions, which can be problematic for complex setups. 2. Use the `ArtifactAccessTransformer` artifact transform class, which is public. Advanced Gradle users can use the transformer how they see fit. JavaDocs have been written to help with its usage, and the responsibility of how it is used rests solely on them. Additionally, here are some following rules when defining dependencies to be queued: - Dependencies *must* have a version specified, as per the requirement of dependency subtitutions. - Dependency constraints can be unversioned *if and only if* there exists a (transitive) dependency that can fulfill it. - 0.0-pre-125 Fix ATs causing IDEs to lose source jars This was done by making the access transformer only target dependencies of type Usage: "library". Sources are of type Usage: "documentation". This problem is two-fold: 1. Gradle would access transform the sources, but wouldn't select it as an auxiliary artifact for the IDE. 2. IntelliJ would look for the auxiliary artifact but can't find it due to the variant change from Gradle transforming the artifact. This is a problem that would be fixed by gradle/gradle#35131. When it is, we can theoretically add support in AccessTransformers itself to transform `.java` files as well as `.class` files. - 0.0-pre-124 Slightly optimize configuration resolution for ATs When a configuration is queried for resolution, it only checks its hierarchy for dependencies that have requested transformation instead of searching the entire project's configuration set. Note: This performance enhancement does not affect the configuration cache. - 0.0-pre-123 Use dependency substitution rules instead of constraints Dependency substitutions are only considered and applied for incoming configurations. Consumable configurations are not affected and thus the attributes used to enforce AccessTransformers will not pollute the Gradle Module Metadata. This is important because it is theoretically possible for stray AccessTransformer attributes to either: 1. Cause a dependency lock-up for dependencies that have weird variants or complex resolutions. 2. Cause an incoming dependency with those attributes to have unwanted AccessTransformers applied to them. - 0.0-pre-122 Update GradleUtils Shared to fix classpath issues - 0.0-pre-121 Redesign API to be more like JarJar - 0.0-pre-120 Added AccessTransformersContainer#getOptions Meant to do this in the last commit but completely forgot to re-apply the stash. Sorry about that. - 0.0-pre-119 Clean up code complexity Needs another major version bump due to aggressive API changes, especially in `AccessTransformerContainer`. Buildscript authors do not need to make any changes as Gradle generates the DSL for property setters. - 0.0-pre-118 Relativize config file path in errors - 0.0-pre-117 Fail build on missing or empty config To enforce the usage of AccessTransformers when requested, the build will now fail if the requested AccessTransformers config file is not defined, cannot be found, or is empty. This validation will happen after project evaluation rather than at artifact transformation, because exceptions thrown by artifact transforms are consumed and don't fail the build. Also, added `AccessTransformerContainer#setLogLevel` to allow for viewing the output stream of AccessTransformers using a different log level. - 0.0-pre-116 Ignore at-gradle for workflow and fix build, fixes #25 - 0.0-pre-115 Support bundles, keep provider dependencies lazy Version bumped to 3.0.0 due to the heavily breaking binary and API changes. This was necessarily to progress ForgeGradle 7's development. - 0.0-pre-114 gradle-2.0 - Update the plugin to use Java 17 and Gradle 9 - Modernize buildscript, Gradle 9, GradleUtils 3 - Require :at-gradle-demo:assemble to pass before publishing - 0.0-pre-113 Fix gradle plugin failing when no toolchain version is declared - 0.0-pre-112 Port FG7's ATs to its own Gradle plugin Also: - Modernize buildscripts - Demo project (disabled for now) - 0.0-pre-111 Debump JOpt Simple to 5.0.4 (#22) - 0.0-pre-110 Replace `IntFunction` with `IntUnaryOperator` in `FinalState` (#20) - 0.0-pre-109 Bump dependencies - 0.0-pre-108 Minor code cleanup. Closes #19 - 0.0-pre-107 Skip RegEx for tokenize - 0.0-pre-106 Add benchmarks, Closes #18 - 0.0-pre-105 Remove buildSrc from gitignore - 0.0-pre-104 Remove antlr - 0.0-pre-103 Fix linux not including service definitions. - 0.0-pre-102 Update gradle Move to Github Actions Migrate to proper module based sub-project design. Move modloader service to sub-project as well to keep proper dependency management. - 0.0-pre-101 disable tests for now, since they're not properly functional - 0.0-pre-100 teamcity - 0.0-pre-99 Fix fatjar to not require J16 (#14) - 0.0-pre-98 Update to Gradle 7 and use GradleUtils - 0.0-pre-97 Disable tests on jenkins. - 0.0-pre-96 Update modlauncher, jenkinsfile, and ignore shared lib changelog. - 0.0-pre-95 Update Jenkinsfile - 0.0-pre-94 Fix up jenkinsfile and merge in lex's build changes - 0.0-pre-93 Update to modlauncher 9.0 and J16, as well as tidy up antlr building - 0.0-pre-92 Fix shadow jar duplication, it automatically adds itself to publishings. Lock dep versions to publish valid pom. - 0.0-pre-91 Remove shadowed jar Update dependencies Fix jars not having correct manifest Update Gradle wrapper. - 0.0-pre-90 Remove service jar. Unnecessary - 0.0-pre-89 Unmask shadowed jar as multi-release. Antlr runtime is not multi-release. - 0.0-pre-88 Merge branch 'pull/11' into master - 0.0-pre-87 Update to modlauncher 6.1. Closes #10. - 0.0-pre-86 Merge pull request #12 from DaemonUmbra/patch-1 Update FMLAT.md - 0.0-pre-85 Update FMLAT.md Shotgun ATs are bad, mmkay? - 0.0-pre-84 remap class names for method and field ATs - 0.0-pre-83 Fix volume name for gradle - 0.0-pre-82 Update dependencies, tweak jenkinsfile and update gradle to 6.3 - 0.0-pre-81 Fix fatjar not setting multi-release properly and breaking log4j on J11. Cleanup warnings. - 0.0-pre-80 Fix AT downgrade issues and add test - 0.0-pre-79 Fix version specification by dropping reckon and using our normal simple system. - 0.0-pre-78 Disallow modifiers from downgrading access that is in the original bytecode. - 0.0-pre-77 Update for asm 7.2, gradle 6.0.1 and other deps.. - 0.0-pre-76 Fix Final flags not merging correctly. Closes #8 - 0.0-pre-75 Update deps for v1.0! - 0.0-pre-74 Update to modlauncher 1.0 API Allow accesstransformers to transform names based on the modlauncher naming scheme currently active. - 0.0-pre-73 Update to modlauncher 0.10 API Update gradle to 5.2.1 - 0.0-pre-72 More tweaks, trying to get signing to work too ;) - 0.0-pre-71 Remove the logger name.. - 0.0-pre-70 fix URI creation with a raw URI containing possible illegal characters fixes: #3 - 0.0-pre-69 Remove the if test completely - it doesn't matter.. - 0.0-pre-68 Missed a patch when merging :( - 0.0-pre-67 Fix AT output file - don't care about previous state. - 0.0-pre-66 Fix shadowjar name - stupid gradle 5.1.1 vs shadow classifier method difference - 0.0-pre-65 Fix up logging - the logFile argument works properly and things behave well with useful log output. - 0.0-pre-64 Output some useful data to the console always. Tweak log file generator to run only when asked for, but contain debug level data. - 0.0-pre-63 Update to gradle 5.1.1, update deps, tweak logging to stop the silly error spam. - 0.0-pre-62 Fix invalid merging of WILDCARD targets. Add InnerClassTarget for fixing the InnerClassAtribute of outer classes for modified inner classes. Should fix decompile. Fix compile warnings. - 0.0-pre-61 Apply access changes to InnerClassAttribute as well for inner classes. - 0.0-pre-60 Move everything into the net.minecraftforge.accesstransformer package. - 0.0-pre-59 Merge pull request #2 from DemonWav/feature/better-lexer Improve AT lexer to handle really bad naming - 0.0-pre-58 Improve AT lexer to handle really bad naming The previous lexer failed in two cases: 1. Classes in the default package wouldn't properly be picked up as class names 2. Names of fields or classes that matched primitive named values would be lexed as primitive type declarations rather than their respective names The previous lexer also lacked support for more extreme class names, such as names that contained Unicode letters or names including non-dollar sign currency symbols, both of which are valid Java in identifiers. This commit fixes all of these issues. All of the changes to accomplish this are in the lexer, the parser is unaffected. Consequently, none of the client code needs modification either. To ensure proper compatibility is maintained, I added test expecations for the forge_at.cfg parse test from before the changes were applied to verify the output is the same after. I also added a unit test with expectations to specifically test the issues described above. - 0.0-pre-57 Make true fatJar, and re-write TransformerProcessor to not break on windows. - 0.0-pre-56 Fix NPE and maven publish. - 0.0-pre-55 Make --atFile accepted multiple times. - 0.0-pre-54 Add --outJar argument. Upoated reckon, and made shadow jar runnable. - 0.0-pre-53 Tweak readme. - 0.0-pre-52 Update gradle, move to forge repo, tweak jenkinsfile - 0.0-pre-51 Update library dependency for new format - 0.0-pre-50 Move the changelog to the build directory. - 0.0-pre-49 Try reckon plugin and new forge-shared-lib for changelog generation - 0.0-pre-48 Try adding semver plugin, see how this works.. - 0.0-pre-47 Try generating a changelog file. - 0.0-pre-46 Try generating a changelog file. - 0.0-pre-45 Try generating a changelog file. - 0.0-pre-44 Try generating a changelog file. - 0.0-pre-43 Try generating a changelog file. - 0.0-pre-42 Fix build script - 0.0-pre-41 Foreground doesn't work - 0.0-pre-40 Improve gradle execution? - 0.0-pre-39 Improve gradle execution? - 0.0-pre-38 Force refresh dependencies - 0.0-pre-37 We never handle empty classes - 0.0-pre-36 Errr, actually publish a real artifact, not just pom files 🤔🤔🤔 - 0.0-pre-35 Inline loggers and marker - 0.0-pre-34 Fix build.gradle for grammar generator - 0.0-pre-33 Tweak build.gradle in line with #1 and delete pom.xml as well. Closes #1 - 0.0-pre-32 Update gradle, tweak for current gradle standards, add Jenkinsfile - 0.0-pre-31 Add a bit of logging - 0.0-pre-30 Need the full manifest in the shadow jar - 0.0-pre-29 Add the shadowed jar to the output - 0.0-pre-28 Let's tidy up our manifest a bit and give a useful implementation number - 0.0-pre-27 Add in Package Version data with package for the service now and bonus / at the end TOO! - 0.0-pre-26 Add in Package Version data with package for the service now and bonus / - 0.0-pre-25 Add in Package Version data with package for the service now. - 0.0-pre-24 Add in Package Version data with package now. - 0.0-pre-23 Add in Package Version data. - 0.0-pre-22 Functional access transformers. Works in both modlauncher and command line scenarios. Tests indicate reasonable performance consistency with existing implementation. The small parsing overhead is offset by the better indexed structure, allowing for application to be much more selective and faster as a result. (Naive tests with forge and an MC JAR file indicate the runtime is ~10x faster at 50ms vs 450ms). - 0.0-pre-21 Tweaks for API - 0.0-pre-20 Fix build. #derp - 0.0-pre-19 Update API, implement some basic API functions. - 0.0-pre-18 Fix build - 0.0-pre-17 Add launch plugin service - 0.0-pre-16 Tweak the build for running on a Jenkins - 0.0-pre-15 Starting to build the transformer itself. - 0.0-pre-14 Add a basic object model for transformers and file loading capability. - 0.0-pre-13 Update README.md - 0.0-pre-12 Update README.md - 0.0-pre-11 Update README.md - 0.0-pre-10 Create README.md - 0.0-pre-9 Add a test to read a contemporary forge Access Transformer file - 0.0-pre-8 Add gradle build and ignore a bunch of stuff - 0.0-pre-7 Fix terrible styling issue - 0.0-pre-6 Remove extraneous rule - 0.0-pre-5 Disambiguate between field and method asterisks - 0.0-pre-4 Fix newline issue..ugh... - 0.0-pre-3 Handle empty lines properly - 0.0-pre-2 Add license - 0.0-pre-1 Initial grammar definition, based on mcdev grammars Haven't figure out how to get this to work without requiring newlines at the end of lines