Skip to content

Commit d5e0167

Browse files
author
willie
committed
#101 Do not calculate flag everywhere, do it only once while building the resultMap
1 parent 70dfaa9 commit d5e0167

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

src/main/java/org/apache/ibatis/mapping/ResultMap.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public class ResultMap {
4646
private Set<String> mappedColumns;
4747
private Set<String> mappedProperties;
4848
private Discriminator discriminator;
49+
private boolean hasResultMapsUsingConstructorCollection;
4950
private boolean hasNestedResultMaps;
5051
private boolean hasNestedQueries;
5152
private Boolean autoMapping;
@@ -63,7 +64,7 @@ public Builder(Configuration configuration, String id, Class<?> type, List<Resul
6364
}
6465

6566
public Builder(Configuration configuration, String id, Class<?> type, List<ResultMapping> resultMappings,
66-
Boolean autoMapping) {
67+
Boolean autoMapping) {
6768
resultMap.configuration = configuration;
6869
resultMap.id = id;
6970
resultMap.type = type;
@@ -111,6 +112,14 @@ public ResultMap build() {
111112
}
112113
if (resultMapping.getFlags().contains(ResultFlag.CONSTRUCTOR)) {
113114
resultMap.constructorResultMappings.add(resultMapping);
115+
116+
//#101
117+
if (resultMap.configuration.isExperimentalConstructorCollectionMappingEnabled()) {
118+
Class<?> javaType = resultMapping.getJavaType();
119+
resultMap.hasResultMapsUsingConstructorCollection = resultMap.hasResultMapsUsingConstructorCollection
120+
|| (javaType != null && resultMap.configuration.getObjectFactory().isCollection(javaType));
121+
}
122+
114123
if (resultMapping.getProperty() != null) {
115124
constructorArgNames.add(resultMapping.getProperty());
116125
}
@@ -136,6 +145,12 @@ public ResultMap build() {
136145
int paramIdx2 = actualArgNames.indexOf(o2.getProperty());
137146
return paramIdx1 - paramIdx2;
138147
});
148+
149+
//#101
150+
if (resultMap.configuration.isExperimentalConstructorCollectionMappingEnabled()) {
151+
resultMap.hasResultMapsUsingConstructorCollection = resultMap.constructorResultMappings.stream()
152+
.map(ResultMapping::getJavaType).anyMatch(resultMap.configuration.getObjectFactory()::isCollection);
153+
}
139154
}
140155
// lock down collections
141156
resultMap.resultMappings = Collections.unmodifiableList(resultMap.resultMappings);
@@ -211,9 +226,7 @@ public String getId() {
211226
}
212227

213228
public boolean hasResultMapsUsingConstructorCollection() {
214-
return configuration.isExperimentalConstructorCollectionMappingEnabled()
215-
&& this.constructorResultMappings.stream().filter(crm -> crm.getNestedQueryId() == null)
216-
.map(ResultMapping::getJavaType).anyMatch(configuration.getObjectFactory()::isCollection);
229+
return hasResultMapsUsingConstructorCollection;
217230
}
218231

219232
public boolean hasNestedResultMaps() {

0 commit comments

Comments
 (0)