@@ -142,9 +142,9 @@ public void transform(ClassNode targetClass, Collection<MethodTransform> transfo
142142 TransformRedirects transformRedirects = new TransformRedirects (transform .redirectSets (), this .mappingsProvider );
143143 try {
144144 if (transform .inPlace ()) {
145- applyRedirects (srcClass , transform .srcMethod (), transformRedirects , transform .transformChanges (), true );
145+ applyRedirects (srcClass , transform .srcMethod (), transformRedirects , transform .transformChanges (), transform . originalTransformData (), true );
146146 } else {
147- cloneAndApplyRedirects (srcClass , targetClass , transform .srcMethod (), transform .dstMethodName (), transformRedirects , transform .transformChanges (), true );
147+ cloneAndApplyRedirects (srcClass , targetClass , transform .srcMethod (), transform .dstMethodName (), transformRedirects , transform .transformChanges (), transform . originalTransformData (), true );
148148 }
149149
150150 } catch (SrcMethodNotFound e ) {
@@ -163,8 +163,9 @@ private MethodNode cloneAndApplyRedirects(ClassNode srcClass, ClassNode targetCl
163163 ClassMethod srcMethod , String dstMethodName ,
164164 TransformRedirects redirects ,
165165 MethodTransform .TransformChanges transformChanges ,
166+ MethodTransform .OriginalTransformData originalTransformData ,
166167 boolean debugLogging ) throws DasmTransformException {
167- return redirects (srcClass , targetClass , srcMethod , dstMethodName , redirects , transformChanges , debugLogging ,
168+ return redirects (srcClass , targetClass , srcMethod , dstMethodName , redirects , transformChanges , originalTransformData , debugLogging ,
168169 (srcMethodNode , dstMethodNode , existingMethodNode ) -> {
169170 cloneAndApplyLambdaRedirects (srcClass , targetClass , srcMethodNode , redirects , debugLogging );
170171 if (debugLogging && existingMethodNode != null && (existingMethodNode .access & ACC_NATIVE ) == 0 ) {
@@ -179,8 +180,9 @@ private MethodNode cloneAndApplyRedirects(ClassNode srcClass, ClassNode targetCl
179180 private void applyRedirects (ClassNode srcClass , ClassMethod srcMethod ,
180181 TransformRedirects redirects ,
181182 MethodTransform .TransformChanges transformChanges ,
183+ MethodTransform .OriginalTransformData originalTransformData ,
182184 boolean debugLogging ) throws DasmTransformException {
183- redirects (srcClass , srcClass , srcMethod , srcMethod .method ().getName (), redirects , transformChanges , debugLogging ,
185+ redirects (srcClass , srcClass , srcMethod , srcMethod .method ().getName (), redirects , transformChanges , originalTransformData , debugLogging ,
184186 (srcMethodNode , dstMethodNode , existingMethodNode ) -> {
185187 applyLambdaRedirects (srcClass , srcMethodNode , redirects , debugLogging );
186188 if (debugLogging && existingMethodNode != null && (existingMethodNode .access & ACC_NATIVE ) == 0 && !srcMethodNode .desc .equals (dstMethodNode .desc )) {
@@ -202,6 +204,7 @@ private MethodNode redirects(ClassNode srcClass, ClassNode targetClass,
202204 ClassMethod srcMethod , String dstMethodName ,
203205 TransformRedirects redirects ,
204206 MethodTransform .TransformChanges transformChanges ,
207+ MethodTransform .OriginalTransformData originalTransformData ,
205208 boolean debugLogging ,
206209 RedirectsFunction f ) throws DasmTransformException {
207210 Method existingMethod = srcMethod .remap (this .mappingsProvider ).method ();
@@ -213,7 +216,7 @@ private MethodNode redirects(ClassNode srcClass, ClassNode targetClass,
213216 String dstMethodDescriptor = applyTransformsToMethodDescriptor (srcMethodNode .desc , redirects , transformChanges .addedParameters ());
214217 MethodNode existingMethodNode = removeExistingMethod (targetClass , dstMethodName , dstMethodDescriptor );
215218
216- transformChanges .throwIfInvalidAccess (Visibility .fromAccess (srcMethodNode .access ));
219+ transformChanges .throwIfInvalidAccess (originalTransformData , Visibility .fromAccess (srcMethodNode .access ));
217220 // FIXME: transform exceptions
218221 int access = transformChanges .dstMethodVisibility ().access | (srcMethodNode .access & ~(ACC_PUBLIC | ACC_PROTECTED | ACC_PRIVATE ));
219222 MethodNode dstMethodNode = new MethodNode (access , dstMethodName , dstMethodDescriptor , null , srcMethodNode .exceptions .toArray (new String [0 ]));
@@ -287,6 +290,7 @@ private void cloneAndApplyLambdaRedirects(ClassNode srcClass, ClassNode targetCl
287290 newName ,
288291 redirects ,
289292 new MethodTransform .TransformChanges (Collections .emptyList (), Visibility .PRIVATE , Visibility .SAME_AS_TARGET ),
293+ new MethodTransform .OriginalTransformData (srcClass .name , method ),
290294 debugLogging
291295 );
292296 });
@@ -311,6 +315,7 @@ private void applyLambdaRedirects(ClassNode srcClass, MethodNode method, Transfo
311315 classMethod ,
312316 redirects ,
313317 new MethodTransform .TransformChanges (Collections .emptyList (), Visibility .PRIVATE , Visibility .SAME_AS_TARGET ),
318+ new MethodTransform .OriginalTransformData (srcClass .name , method ), // Assume lambas are always private, the passed in method here is therefore irrelevant
314319 debugLogging
315320 ));
316321 }
0 commit comments