Skip to content

Commit

Permalink
Replace a list with O(N²) performance by O(N) at least during iteration.
Browse files Browse the repository at this point in the history
  • Loading branch information
desruisseaux committed Feb 7, 2025
1 parent 6aa86c5 commit 3ab95ba
Showing 1 changed file with 22 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@
import java.io.IOException;
import java.io.Writer;
import java.nio.file.Path;
import java.util.AbstractList;
import java.util.AbstractSequentialList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
Expand Down Expand Up @@ -738,56 +739,42 @@ public Build getBuild() {
*/
@Deprecated(since = "4.0.0")
public List<Resource> getResources() {
return new AbstractList<>() {
@Override
public Resource get(int index) {
return toResource(getEnabledSourceRoots(ProjectScope.MAIN, Language.RESOURCES)
.toList()
.get(index));
}

@Override
public int size() {
return (int) getEnabledSourceRoots(ProjectScope.MAIN, Language.RESOURCES)
.count();
}

@Override
public boolean add(Resource resource) {
addResource(resource);
return true;
}
};
return getResources(ProjectScope.MAIN);
}

/**
* @deprecated Replaced by {@code getEnabledSourceRoots(ProjectScope.TEST, Language.RESOURCES)}.
*/
@Deprecated(since = "4.0.0")
public List<Resource> getTestResources() {
return new AbstractList<>() {
return getResources(ProjectScope.TEST);
}

private List<Resource> getResources(final ProjectScope scope) {
return new AbstractSequentialList<>() {
@Override
public Resource get(int index) {
return toResource(getEnabledSourceRoots(ProjectScope.TEST, Language.RESOURCES)
public ListIterator<Resource> listIterator(int index) {
return getEnabledSourceRoots(scope, Language.RESOURCES)
.map(MavenProject::toResource)
.toList()
.get(index));
.listIterator(index);
}

@Override
public int size() {
return (int) getEnabledSourceRoots(ProjectScope.TEST, Language.RESOURCES)
.count();
return Math.toIntExact(
getEnabledSourceRoots(scope, Language.RESOURCES).count());
}

@Override
public boolean add(Resource resource) {
addTestResource(resource);
addResource(resource);
return true;
}
};
}

private Resource toResource(SourceRoot sourceRoot) {
private static Resource toResource(SourceRoot sourceRoot) {
return new Resource(org.apache.maven.api.model.Resource.newBuilder()
.directory(sourceRoot.directory().toString())
.includes(sourceRoot.includes().stream().map(Object::toString).toList())
Expand All @@ -796,20 +783,24 @@ private Resource toResource(SourceRoot sourceRoot) {
.build());
}

private void addResource(ProjectScope scope, Resource resource) {
addSourceRoot(new DefaultSourceRoot(getBaseDirectory(), scope, resource.getDelegate()));
}

/**
* @deprecated {@link Resource} is replaced by {@link SourceRoot}.
*/
@Deprecated(since = "4.0.0")
public void addResource(Resource resource) {
addSourceRoot(new DefaultSourceRoot(getBaseDirectory(), ProjectScope.MAIN, resource.getDelegate()));
addResource(ProjectScope.MAIN, resource);
}

/**
* @deprecated {@link Resource} is replaced by {@link SourceRoot}.
*/
@Deprecated(since = "4.0.0")
public void addTestResource(Resource testResource) {
addSourceRoot(new DefaultSourceRoot(getBaseDirectory(), ProjectScope.TEST, testResource.getDelegate()));
addResource(ProjectScope.TEST, testResource);
}

public void setLicenses(List<License> licenses) {
Expand Down

0 comments on commit 3ab95ba

Please sign in to comment.