Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use ImmutableList where applicable #2483

Open
hatyo opened this issue Feb 5, 2024 · 1 comment
Open

Use ImmutableList where applicable #2483

hatyo opened this issue Feb 5, 2024 · 1 comment
Assignees
Labels
performance Performance issues

Comments

@hatyo
Copy link
Contributor

hatyo commented Feb 5, 2024

We're using List.of in many places in the code, this is inefficient as it could cause unnecessary copies when used in conjunction with ImmutableList as in ImmutableList.copyOf.

Here is a excerpt of a simple grep command that shows such instantiations:

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/provider/foundationdb/IndexingMerger.java:        return List.of(
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/PreOrderIterator.java:        stack.push(MutablePair.of(List.of(traversable.getThis()), INITIAL_POSITION));
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/expressions/GroupByExpression.java:                            List.of("AGG {{agg}}"),
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/expressions/GroupByExpression.java:                            List.of("AGG {{agg}}", "GROUP BY {{grouping}}"),
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/typing/Type.java:                Type wrapperType = Record.fromFields(List.of(Record.Field.of(new Array(elementType), Optional.of(NullableArrayTypeUtils.getRepeatedFieldName()))));
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/typing/Type.java:                Type wrapperType = Record.fromFields(List.of(Record.Field.of(new Array(elementType), Optional.of(NullableArrayTypeUtils.getRepeatedFieldName()))));
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/AndOrValue.java:                    List.of(Type.primitiveType(Type.TypeCode.BOOLEAN), Type.primitiveType(Type.TypeCode.BOOLEAN)),
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/InOpValue.java:                    List.of(new Type.Any(), new Type.Array()), (builtInFunc, args) -> encapsulateInternal(args));
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/JavaCallFunction.java:        super("java_call", List.of(Type.primitiveType(Type.TypeCode.STRING)), new Type.Any(), JavaCallFunction::findFunction);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java:                    List.of(new Type.Any(), new Type.Any()), EqualsFn::encapsulate);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java:                    List.of(new Type.Any(), new Type.Any()), NotEqualsFn::encapsulate);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java:                    List.of(new Type.Any(), new Type.Any()), LtFn::encapsulate);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java:                    List.of(new Type.Any(), new Type.Any()), LteFn::encapsulate);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java:                    List.of(new Type.Any(), new Type.Any()), GtFn::encapsulate);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java:                    List.of(new Type.Any(), new Type.Any()), GteFn::encapsulate);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java:                    List.of(new Type.Any()), IsNullFn::encapsulate);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java:                    List.of(new Type.Any()), NotNullFn::encapsulate);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/UdfFunction.java:        super("", List.of(), (builtInFunction, arguments) -> null);
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/plans/RecordQueryComparatorPlan.java:                        List.of("COMPARE BY {{comparisonKey}}"),
fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/plans/RecordQuerySelectorPlan.java:                        List.of("SELECT BY {{planSelector}}"),
fdb-record-layer-core/src/test/java/com/apple/foundationdb/record/metadata/expressions/AbsoluteValueFunctionKeyExpression.java:            return List.of(Key.Evaluated.scalar(value), Key.Evaluated.scalar(-1L * value));
fdb-record-layer-core/src/test/java/com/apple/foundationdb/record/metadata/expressions/AbsoluteValueFunctionKeyExpression.java:            return List.of(new Builder());
fdb-record-layer-core/src/test/java/com/apple/foundationdb/record/metadata/expressions/IntWrappingFunction.java:            return List.of(new Builder());
fdb-record-layer-core/src/test/java/com/apple/foundationdb/record/provider/foundationdb/query/DualPlannerExtension.java:            this.extensions = List.of(setPlannerExtension(useCascadesPlanner));
fdb-record-layer-lucene/src/main/java/com/apple/foundationdb/record/lucene/LuceneScanSpellCheckParameters.java:            fields = List.of(fieldAndWord[0]);
fdb-record-layer-lucene/src/main/java/com/apple/foundationdb/record/lucene/directory/FieldInfosStorage.java:        wrappingDirectory.sync(List.of(fileName));
fdb-record-layer-lucene/src/main/java/com/apple/foundationdb/record/lucene/idformat/RecordIdFormat.java:            return new TupleElement(List.of(children));
@hatyo hatyo added the performance Performance issues label Feb 5, 2024
@hatyo hatyo self-assigned this Feb 5, 2024
@hatyo
Copy link
Contributor Author

hatyo commented Feb 6, 2024

We should cover Set.of -> ImmutableSet.of() as pointed at here #2464 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
performance Performance issues
Projects
None yet
Development

No branches or pull requests

1 participant