Make query parser and rewriter request scoped
Because these need access to the CurrentUser in order to implement the is:starred or is:visible operators they need to be request scope and obtained on demand. Change-Id: Id9f677744c6201176455b15320b8ce45edd75504 Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
@@ -89,16 +89,16 @@ public class ChangeListServiceImpl extends BaseServiceImplementation implements
|
||||
private final ChangeControl.Factory changeControlFactory;
|
||||
private final AccountInfoCacheFactory.Factory accountInfoCacheFactory;
|
||||
|
||||
private final ChangeQueryBuilder queryBuilder;
|
||||
private final ChangeQueryRewriter queryRewriter;
|
||||
private final Provider<ChangeQueryBuilder> queryBuilder;
|
||||
private final Provider<ChangeQueryRewriter> queryRewriter;
|
||||
|
||||
@Inject
|
||||
ChangeListServiceImpl(final Provider<ReviewDb> schema,
|
||||
final Provider<CurrentUser> currentUser,
|
||||
final ChangeControl.Factory changeControlFactory,
|
||||
final AccountInfoCacheFactory.Factory accountInfoCacheFactory,
|
||||
final ChangeQueryBuilder queryBuilder,
|
||||
final ChangeQueryRewriter queryRewriter) {
|
||||
final Provider<ChangeQueryBuilder> queryBuilder,
|
||||
final Provider<ChangeQueryRewriter> queryRewriter) {
|
||||
super(schema, currentUser);
|
||||
this.currentUser = currentUser;
|
||||
this.changeControlFactory = changeControlFactory;
|
||||
@@ -144,18 +144,19 @@ public class ChangeListServiceImpl extends BaseServiceImplementation implements
|
||||
final int limit, final String key, final Comparator<Change> cmp)
|
||||
throws OrmException, InvalidQueryException {
|
||||
try {
|
||||
final ChangeQueryBuilder builder = queryBuilder.get();
|
||||
final Predicate<ChangeData> visibleToMe =
|
||||
queryBuilder.visibleto(currentUser.get());
|
||||
builder.visibleto(currentUser.get());
|
||||
|
||||
Predicate<ChangeData> q = queryBuilder.parse(query);
|
||||
Predicate<ChangeData> q = builder.parse(query);
|
||||
q = Predicate.and(q, //
|
||||
cmp == QUERY_PREV //
|
||||
? queryBuilder.sortkey_after(key) //
|
||||
: queryBuilder.sortkey_before(key), //
|
||||
queryBuilder.limit(limit), //
|
||||
? builder.sortkey_after(key) //
|
||||
: builder.sortkey_before(key), //
|
||||
builder.limit(limit), //
|
||||
visibleToMe //
|
||||
);
|
||||
q = queryRewriter.rewrite(q);
|
||||
q = queryRewriter.get().rewrite(q);
|
||||
if (q instanceof ChangeDataSource) {
|
||||
ChangeDataSource ds = (ChangeDataSource) q;
|
||||
ArrayList<Change> r = new ArrayList();
|
||||
|
||||
@@ -28,6 +28,8 @@ import com.google.gerrit.server.mail.ReplacePatchSetSender;
|
||||
import com.google.gerrit.server.patch.PublishComments;
|
||||
import com.google.gerrit.server.project.ChangeControl;
|
||||
import com.google.gerrit.server.project.ProjectControl;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryRewriter;
|
||||
import com.google.inject.servlet.RequestScoped;
|
||||
|
||||
/** Bindings for {@link RequestScoped} entities. */
|
||||
@@ -39,6 +41,8 @@ public class GerritRequestModule extends FactoryModule {
|
||||
RequestScoped.class);
|
||||
bind(IdentifiedUser.RequestFactory.class).in(SINGLETON);
|
||||
bind(AccountResolver.class);
|
||||
bind(ChangeQueryBuilder.class);
|
||||
bind(ChangeQueryRewriter.class);
|
||||
|
||||
bind(ChangeControl.Factory.class).in(SINGLETON);
|
||||
bind(GroupControl.Factory.class).in(SINGLETON);
|
||||
|
||||
@@ -35,6 +35,7 @@ import com.google.gerrit.server.query.QueryParseException;
|
||||
import com.google.gwtorm.client.OrmException;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.servlet.RequestScoped;
|
||||
|
||||
import org.eclipse.jgit.lib.AbbreviatedObjectId;
|
||||
|
||||
@@ -45,6 +46,7 @@ import java.util.regex.Pattern;
|
||||
/**
|
||||
* Parses a query string meant to be applied to change objects.
|
||||
*/
|
||||
@RequestScoped
|
||||
public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
||||
private static final Pattern PAT_LEGACY_ID = Pattern.compile("^[1-9][0-9]*$");
|
||||
private static final Pattern PAT_CHANGE_ID =
|
||||
|
||||
@@ -28,9 +28,11 @@ import com.google.inject.Inject;
|
||||
import com.google.inject.OutOfScopeException;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.name.Named;
|
||||
import com.google.inject.servlet.RequestScoped;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
@RequestScoped
|
||||
public class ChangeQueryRewriter extends QueryRewriter<ChangeData> {
|
||||
private static final QueryRewriter.Definition<ChangeData, ChangeQueryRewriter> mydef =
|
||||
new QueryRewriter.Definition<ChangeData, ChangeQueryRewriter>(
|
||||
|
||||
Reference in New Issue
Block a user