Skip to content

Commit 2642609

Browse files
leeyohan93mp911de
authored andcommitted
Enhance Kotlin Class Conversion by Minimizing Equals Comparisons.
Closes #3000
1 parent d1e97c7 commit 2642609

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/main/java/org/springframework/data/mapping/model/KotlinInstantiationDelegate.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
import java.lang.reflect.Constructor;
2323
import java.util.ArrayList;
2424
import java.util.List;
25+
import java.util.Map;
2526
import java.util.function.Function;
27+
import java.util.stream.Collectors;
2628
import java.util.stream.IntStream;
2729

2830
import org.springframework.data.mapping.InstanceCreatorMetadata;
@@ -40,12 +42,14 @@
4042
* constructor argument extraction.
4143
*
4244
* @author Mark Paluch
45+
* @author Yohan Lee
4346
* @since 3.1
4447
*/
4548
class KotlinInstantiationDelegate {
4649

4750
private final KFunction<?> constructor;
4851
private final List<KParameter> kParameters;
52+
private final Map<KParameter, Integer> indexByKParameter;
4953
private final List<Function<Object, Object>> wrappers = new ArrayList<>();
5054
private final Constructor<?> constructorToInvoke;
5155
private final boolean hasDefaultConstructorMarker;
@@ -62,6 +66,8 @@ public KotlinInstantiationDelegate(PreferredConstructor<?, ?> preferredConstruct
6266

6367
this.constructor = kotlinConstructor;
6468
this.kParameters = kotlinConstructor.getParameters();
69+
this.indexByKParameter = IntStream.range(0, kParameters.size()).boxed()
70+
.collect(Collectors.toMap(kParameters::get, Function.identity()));
6571
this.constructorToInvoke = constructorToInvoke;
6672
this.hasDefaultConstructorMarker = hasDefaultConstructorMarker(constructorToInvoke.getParameters());
6773

@@ -118,7 +124,7 @@ public <P extends PersistentProperty<P>> Object[] extractInvocationArguments(Obj
118124

119125
KotlinDefaultMask defaultMask = KotlinDefaultMask.forConstructor(constructor, it -> {
120126

121-
int index = kParameters.indexOf(it);
127+
int index = indexByKParameter.get(it);
122128

123129
Parameter<Object, P> parameter = parameters.get(index);
124130
Class<Object> type = parameter.getType().getType();

0 commit comments

Comments
 (0)