Loading...
Comment:
Feature/method signature intersection (#2647 )

* Refactor: Rework expected MethodSignatures.

- ParameterGroups are gone, with every signature now effectively containing a required leading group and an optional vararg trailing group. The prior flexibility made working them easy to get wrong, for example in the matching logic which would have been incorrect for leading vararg groups.
- Inject previously contained 2 optional groups (the target's params and the captured locals) but this was in fact incorrect, since the captured params are required if we want to capture any locals, so it is now (better) represented as 2 separate signature options.
- The distinction between `WARN_IF_ABSENT` and `ERROR_IF_ABSENT` is entirely removed. It was effectively unused since it only applied to captured Inject locals, which are varargs and therefore never "absent" (a separate inspection handles unused LocalCapture).
- ModifyArgs is in fact all-or-nothing wrt capturing the target parameters, and this is now reflected.

* Fix: Disallow non-int int-like types in @ModifyConstant.

Not sure why these are there, Mixin doesn't allow them.

* Fix: Disallow `nullValue` in `@ModifyConstant`.

It does not work and cannot ever work.

* stash

* stash

* finish general intersection

* cleanup

* stash

* stash

* fix general intersection

* stash

* fix tests

* return type only suggestions

* prioritise existing return type in modifier suggestions

* restore BeforeConstant's behaviour of ensuring only 1 discriminator is specified, and supporting wildcard matches

* Fix: Support `.class` constants in `@ModifyConstant`.

* Switch `@ModifyConstant` to a general signature type.

* int coercion kinda fixed ish

* fix int coercion properly

* cleanup

* proper int-like logic

* cleanup

* some docs and fixes

* fix return type solving

* Cache walked supertypes and improve handling of Object as a supertype.

* Cleanup

* Cleanup

* Small fixes

* Small fixes

* Fix: Suggest "ci" for coerced callba...
Status: all builds with this change have finished
Revision: 8539df1c74008cade4a10470748e1794e7dd6277 VCS Roots: minecraft-dev/MinecraftDev (Git), minecraft-dev/MinecraftDev Nightly (Git)
Parent revisions: 739fc17f869706c3e5da886f5258c0e52f9f2d0d  
User: Unknown (none of TeamCity users defined llamalad7 username in their VCS username settings)

Edit change description

Here you can change the description in TeamCity only. You may consider changing it in the VCS as well, to avoid an ambiguity and inconsistency.

Cancel
Changed: 133 files (21 removed, 63 added, 49 edited) in
edited gradle/libs.versions.toml
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInComplex.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInModifyArg.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInModifyConstant.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInModifyExpressionValue.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInModifyReceiver.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInModifyReturnValue.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInModifyVariable.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInRedirect.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInWrapMethod.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInWrapOperation.java
added mixin-test-data/src/main/java/com/demonwav/mcdev/mixintestdata/invalidInjectorMethodSignatureFix/MixedInWrapWithCondition.java
edited src/main/kotlin/platform/mixin/expression/MEExpressionMatchUtil.kt
edited src/main/kotlin/platform/mixin/expression/gui/MEShowFlowAction.kt
edited src/main/kotlin/platform/mixin/handlers/InjectAnnotationHandler.kt
edited src/main/kotlin/platform/mixin/handlers/InjectorAnnotationHandler.kt
added src/main/kotlin/platform/mixin/handlers/InsnInjectorAnnotationHandler.kt
edited src/main/kotlin/platform/mixin/handlers/ModifyArgHandler.kt
edited src/main/kotlin/platform/mixin/handlers/ModifyArgsHandler.kt
edited src/main/kotlin/platform/mixin/handlers/ModifyConstantHandler.kt
edited src/main/kotlin/platform/mixin/handlers/ModifyVariableHandler.kt
edited src/main/kotlin/platform/mixin/handlers/RedirectInjectorHandler.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/AtResolver.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantInjectionPoint.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantStringMethodInjectionPoint.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/FieldInjectionPoint.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/InjectionPoint.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/InvokeAssignInjectionPoint.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/InvokeInjectionPoint.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/LoadInjectionPoint.kt
edited src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt
edited src/main/kotlin/platform/mixin/handlers/mixinextras/MixinExtrasInjectorAnnotationHandler.kt
edited src/main/kotlin/platform/mixin/handlers/mixinextras/ModifyExpressionValueHandler.kt
edited src/main/kotlin/platform/mixin/handlers/mixinextras/ModifyReceiverHandler.kt
edited src/main/kotlin/platform/mixin/handlers/mixinextras/ModifyReturnValueHandler.kt
edited src/main/kotlin/platform/mixin/handlers/mixinextras/ShareUtil.kt
edited src/main/kotlin/platform/mixin/handlers/mixinextras/WrapMethodHandler.kt
edited src/main/kotlin/platform/mixin/handlers/mixinextras/WrapOperationHandler.kt
edited src/main/kotlin/platform/mixin/handlers/mixinextras/WrapWithConditionHandler.kt
edited src/main/kotlin/platform/mixin/inspection/injector/CancellableBeforeSuperCallInspection.kt
edited src/main/kotlin/platform/mixin/inspection/injector/DisallowedTargetInsnInspection.kt
edited src/main/kotlin/platform/mixin/inspection/injector/DiscouragedShiftInspection.kt
edited src/main/kotlin/platform/mixin/inspection/injector/InvalidInjectorMethodSignatureInspection.kt
edited src/main/kotlin/platform/mixin/inspection/injector/MethodSignature.kt
added src/main/kotlin/platform/mixin/inspection/injector/MethodSignatures.kt
edited src/main/kotlin/platform/mixin/inspection/injector/MixinParameterNameInspection.kt
edited src/main/kotlin/platform/mixin/inspection/injector/ModifyVariableArgsOnlyInspection.kt
edited src/main/kotlin/platform/mixin/inspection/injector/ModifyVariableMayUseNameInspection.kt
removed src/main/kotlin/platform/mixin/inspection/injector/ParameterGroup.kt
added src/main/kotlin/platform/mixin/inspection/injector/SuggestedSignature.kt
edited src/main/kotlin/platform/mixin/inspection/mixinextras/InjectLocalCaptureReplaceWithLocalInspection.kt
edited src/main/kotlin/platform/mixin/inspection/mixinextras/LocalArgsOnlyInspection.kt
edited src/main/kotlin/platform/mixin/inspection/mixinextras/LocalMayUseNameInspection.kt
edited src/main/kotlin/platform/mixin/inspection/mixinextras/UnnecessaryMutableLocalInspection.kt
edited src/main/kotlin/platform/mixin/inspection/mixinextras/UnresolvedLocalCaptureInspection.kt
edited src/main/kotlin/platform/mixin/util/AsmUtil.kt
added src/main/kotlin/platform/mixin/util/IntLikeAnchorSolver.kt
edited src/main/kotlin/platform/mixin/util/LocalInfo.kt
edited src/main/kotlin/platform/mixin/util/Mixin.kt
added src/main/kotlin/platform/mixin/util/ReturnTypeSolver.kt
added src/main/kotlin/platform/mixin/util/TypeKind.kt
added src/main/kotlin/util/PrioritySet.kt
added src/main/kotlin/util/sequenced-collections.kt
edited src/main/kotlin/util/sequences.kt
edited src/main/kotlin/util/utils.kt
edited src/test/kotlin/framework/test-util.kt
edited src/test/kotlin/platform/mixin/BaseMixinTest.kt
edited src/test/kotlin/platform/mixin/InvalidInjectorMethodSignatureFixTest.kt
edited src/test/kotlin/platform/mixin/InvalidInjectorMethodSignatureInspectionTest.kt
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/genericCase.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/genericCase.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/genericCaseComplexReturnType.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/genericCaseComplexReturnType.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/genericCase.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/genericCase.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/genericCaseComplexReturnType.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/genericCaseComplexReturnType.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/innerCtorWithLocals.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/innerCtorWithLocals.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/multiTarget.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/multiTarget.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/simpleCase.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/simpleCase.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/simpleCaseWithMixinExtrasSugar.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/simpleCaseWithMixinExtrasSugar.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/simpleInnerCtor.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/simpleInnerCtor.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/simpleMethodWithInnerType.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/simpleMethodWithInnerType.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/withCapturedLocals.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/withCapturedLocals.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/withoutCI.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/inject/withoutCI.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/injectWithoutCI.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/injectWithoutCI.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/innerCtorWithLocals.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/innerCtorWithLocals.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyArg.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyArg.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyArgs.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyArgs.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyConstant.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyConstant.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyExpressionValue.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyExpressionValue.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyReceiver.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyReceiver.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyReturnValue.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyReturnValue.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyVariable.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyVariable.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyargs/returnTypeOnly.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyargs/returnTypeOnly.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyargs/simple.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/modifyargs/simple.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/redirect.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/redirect.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/simpleCase.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/simpleCase.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/simpleCaseWithMixinExtrasSugar.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/simpleCaseWithMixinExtrasSugar.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/simpleInnerCtor.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/simpleInnerCtor.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/simpleMethodWithInnerType.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/simpleMethodWithInnerType.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/withCapturedLocals.after.java
removed src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/withCapturedLocals.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/wrapMethod.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/wrapMethod.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/wrapOperation.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/wrapOperation.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/wrapWithCondition.after.java
added src/test/resources/com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/wrapWithCondition.java

Add build comment

Cancel

Mute test

Server communication failure

Server is unavailable

Server stopped or communication with the server is not possible due to network failure.

Server shutdown started.

Please relogin to continue your work.

Run custom build

TODO

Loading related builds...
Cancel

Responsibility

Edit tags

Cancel

Loading...

Are you sure?

Cancel

Please type to confirm.
Cancel