Skip to content

Commit 492745b

Browse files
authored
Merge pull request #49526 from gsmet/arc-avoid-unnecessary-methodinfo-copy
Avoid now unnecessary copy of MethodInfo in Methods
2 parents dc2301b + a9120b2 commit 492745b

File tree

2 files changed

+10
-21
lines changed

2 files changed

+10
-21
lines changed

independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/ClientProxyGenerator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -350,19 +350,19 @@ Collection<MethodInfo> getDelegatingMethods(BeanInfo bean, Consumer<BytecodeTran
350350
if (bean.isClassBean()) {
351351
Map<String, Set<MethodKey>> methodsFromWhichToRemoveFinal = new HashMap<>();
352352
ClassInfo classInfo = bean.getTarget().get().asClass();
353-
addDelegatesAndTrasformIfNecessary(bytecodeTransformerConsumer, transformUnproxyableClasses, methods, index,
353+
addDelegatesAndTransformIfNecessary(bytecodeTransformerConsumer, transformUnproxyableClasses, methods, index,
354354
methodsFromWhichToRemoveFinal, classInfo);
355355
} else if (bean.isProducerMethod()) {
356356
Map<String, Set<MethodKey>> methodsFromWhichToRemoveFinal = new HashMap<>();
357357
MethodInfo producerMethod = bean.getTarget().get().asMethod();
358358
ClassInfo returnTypeClass = getClassByName(index, producerMethod.returnType());
359-
addDelegatesAndTrasformIfNecessary(bytecodeTransformerConsumer, transformUnproxyableClasses, methods, index,
359+
addDelegatesAndTransformIfNecessary(bytecodeTransformerConsumer, transformUnproxyableClasses, methods, index,
360360
methodsFromWhichToRemoveFinal, returnTypeClass);
361361
} else if (bean.isProducerField()) {
362362
Map<String, Set<MethodKey>> methodsFromWhichToRemoveFinal = new HashMap<>();
363363
FieldInfo producerField = bean.getTarget().get().asField();
364364
ClassInfo fieldClass = getClassByName(index, producerField.type());
365-
addDelegatesAndTrasformIfNecessary(bytecodeTransformerConsumer, transformUnproxyableClasses, methods, index,
365+
addDelegatesAndTransformIfNecessary(bytecodeTransformerConsumer, transformUnproxyableClasses, methods, index,
366366
methodsFromWhichToRemoveFinal, fieldClass);
367367
} else if (bean.isSynthetic()) {
368368
Methods.addDelegatingMethods(index, bean.getImplClazz(), methods, null,
@@ -372,7 +372,7 @@ Collection<MethodInfo> getDelegatingMethods(BeanInfo bean, Consumer<BytecodeTran
372372
return methods.values();
373373
}
374374

375-
private void addDelegatesAndTrasformIfNecessary(Consumer<BytecodeTransformer> bytecodeTransformerConsumer,
375+
private void addDelegatesAndTransformIfNecessary(Consumer<BytecodeTransformer> bytecodeTransformerConsumer,
376376
boolean transformUnproxyableClasses,
377377
Map<Methods.MethodKey, MethodInfo> methods, IndexView index,
378378
Map<String, Set<MethodKey>> methodsFromWhichToRemoveFinal,

independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/Methods.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.jboss.jandex.MethodInfo;
2626
import org.jboss.jandex.Type;
2727
import org.jboss.jandex.Type.Kind;
28-
import org.jboss.jandex.TypeVariable;
2928
import org.jboss.logging.Logger;
3029
import org.objectweb.asm.ClassVisitor;
3130
import org.objectweb.asm.Opcodes;
@@ -68,18 +67,7 @@ static void addDelegatingMethods(IndexView index, ClassInfo classInfo, Map<Metho
6867
if (skipForClientProxy(method, transformUnproxyableClasses, methodsFromWhichToRemoveFinal)) {
6968
continue;
7069
}
71-
methods.computeIfAbsent(new Methods.MethodKey(method), key -> {
72-
// If parameterized try to resolve the type variables
73-
Type returnType = key.method.returnType();
74-
Type[] params = new Type[key.method.parametersCount()];
75-
for (int i = 0; i < params.length; i++) {
76-
params[i] = key.method.parameterType(i);
77-
}
78-
List<TypeVariable> typeVariables = key.method.typeParameters();
79-
return MethodInfo.create(classInfo, key.method.name(), params, returnType, key.method.flags(),
80-
typeVariables.toArray(new TypeVariable[] {}),
81-
key.method.exceptions().toArray(Type.EMPTY_ARRAY));
82-
});
70+
methods.putIfAbsent(new Methods.MethodKey(method), method);
8371
}
8472
// Methods declared on superclasses
8573
if (classInfo.superClassType() != null) {
@@ -106,11 +94,12 @@ private static boolean skipForClientProxy(MethodInfo method, boolean transformUn
10694
if (Modifier.isStatic(method.flags()) || Modifier.isPrivate(method.flags())) {
10795
return true;
10896
}
109-
if (IGNORED_METHODS.contains(method.name())) {
97+
String methodName = method.name();
98+
if (IGNORED_METHODS.contains(methodName)) {
11099
return true;
111100
}
112101
// skip all Object methods except for toString()
113-
if (method.declaringClass().name().equals(DotNames.OBJECT) && !method.name().equals(TO_STRING)) {
102+
if (method.declaringClass().name().equals(DotNames.OBJECT) && !methodName.equals(TO_STRING)) {
114103
return true;
115104
}
116105
if (Modifier.isFinal(method.flags())) {
@@ -124,13 +113,13 @@ private static boolean skipForClientProxy(MethodInfo method, boolean transformUn
124113
// in case we want to transform classes but are unable to, we log a WARN
125114
LOGGER.warn(String.format(
126115
"Final method %s.%s() is ignored during proxy generation and should never be invoked upon the proxy instance!",
127-
className, method.name()));
116+
className, methodName));
128117
} else {
129118
// JDK classes with final method are not proxyable and not transformable, we skip those methods and log a WARN
130119
LOGGER.warn(String.format(
131120
"JDK class %s with final method %s() cannot be proxied and is not transformable. " +
132121
"This method will be ignored during proxy generation and should never be invoked upon the proxy instance!",
133-
className, method.name()));
122+
className, methodName));
134123
}
135124
return true;
136125
}

0 commit comments

Comments
 (0)