mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
separate pattern from scopes holders when possible: this would allow to use default patterns e.g. production with application level inspection profile (IDEA-107786)
This commit is contained in:
@@ -73,7 +73,11 @@ public class PatternPackageSet extends PatternBasedPackageSet {
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
Project project = holder.getProject();
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
return matchesScope(file, holder.getProject(), fileIndex) && (myPattern == null || myPattern.matcher(getPackageName(file, fileIndex)).matches());
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ public class GlobalSearchScopes {
|
||||
NamedScopesHolder holder = NamedScopeManager.getInstance(getProject());
|
||||
final PackageSet packageSet = mySet.getValue();
|
||||
if (packageSet != null) {
|
||||
if (packageSet instanceof PackageSetBase) return ((PackageSetBase)packageSet).contains(file, holder);
|
||||
if (packageSet instanceof PackageSetBase) return ((PackageSetBase)packageSet).contains(file, getProject(), holder);
|
||||
PsiFile psiFile = myManager.findFile(file);
|
||||
return psiFile != null && packageSet.contains(psiFile, holder);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.intellij.psi.search.scope.packageSet.NamedScope;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
|
||||
import com.intellij.ui.Colored;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
@@ -37,10 +38,15 @@ public class NonProjectFilesScope extends NamedScope {
|
||||
super(NAME, new AbstractPackageSet("NonProject") {
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
if (file == null) return true;
|
||||
if (file.getFileSystem() != LocalFileSystem.getInstance()) return true;
|
||||
if (isInsideProjectContent(holder.getProject(), file)) return false;
|
||||
return !ProjectScope.getProjectScope(holder.getProject()).contains(file);
|
||||
if (isInsideProjectContent(project, file)) return false;
|
||||
return !ProjectScope.getProjectScope(project).contains(file);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -15,12 +15,14 @@
|
||||
*/
|
||||
package com.intellij.psi.search.scope;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.search.scope.packageSet.AbstractPackageSet;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScope;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
@@ -31,8 +33,13 @@ public class ProjectFilesScope extends NamedScope {
|
||||
super(NAME, new AbstractPackageSet("ProjectFiles") {
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
if (file == null) return false;
|
||||
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
|
||||
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
return holder.getProject().isInitialized()
|
||||
&& !fileIndex.isIgnored(file)
|
||||
&& fileIndex.getContentRootForFile(file) != null;
|
||||
|
||||
@@ -16,12 +16,14 @@
|
||||
package com.intellij.psi.search.scope;
|
||||
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.search.scope.packageSet.AbstractPackageSet;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScope;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
@@ -31,7 +33,12 @@ public class ProjectProductionScope extends NamedScope {
|
||||
super(IdeBundle.message("predefined.scope.production.name"), new AbstractPackageSet("src:*..*") {
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
final ProjectFileIndex index = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
return file != null
|
||||
&& !index.isInTestSourceContent(file)
|
||||
&& !index.isInLibraryClasses(file)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.psi.search.scope;
|
||||
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -23,6 +24,7 @@ import com.intellij.psi.search.scope.packageSet.AbstractPackageSet;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScope;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
|
||||
import com.intellij.ui.Colored;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
@@ -32,9 +34,15 @@ public class TestsScope extends NamedScope {
|
||||
public static final String NAME = IdeBundle.message("predefined.scope.tests.name");
|
||||
public TestsScope() {
|
||||
super(NAME, new AbstractPackageSet("test:*..*") {
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
final ProjectFileIndex index = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
return file != null && index.isInTestSourceContent(file);
|
||||
}
|
||||
});
|
||||
|
||||
+9
-2
@@ -15,8 +15,10 @@
|
||||
*/
|
||||
package com.intellij.psi.search.scope.packageSet;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class ComplementPackageSet extends PackageSetBase {
|
||||
private final PackageSet myComplementarySet;
|
||||
@@ -27,8 +29,13 @@ public class ComplementPackageSet extends PackageSetBase {
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
return myComplementarySet instanceof PackageSetBase ? !((PackageSetBase)myComplementarySet).contains(file, holder)
|
||||
: myComplementarySet.contains(getPsiFile(file, holder), holder);
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
return myComplementarySet instanceof PackageSetBase ? !((PackageSetBase)myComplementarySet).contains(file, project, holder)
|
||||
: myComplementarySet.contains(getPsiFile(file, project), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-1
@@ -69,7 +69,11 @@ public class FilePatternPackageSet extends PatternBasedPackageSet {
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
Project project = holder.getProject();
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
return file != null && fileMatcher(file, fileIndex, holder.getProjectBaseDir()) &&
|
||||
matchesModule(myModuleGroupPattern, myModulePattern, file, fileIndex);
|
||||
|
||||
+9
-2
@@ -15,8 +15,10 @@
|
||||
*/
|
||||
package com.intellij.psi.search.scope.packageSet;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class IntersectionPackageSet extends PackageSetBase {
|
||||
private final PackageSet myFirstSet;
|
||||
@@ -29,8 +31,13 @@ public class IntersectionPackageSet extends PackageSetBase {
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
if (myFirstSet instanceof PackageSetBase ? ((PackageSetBase)myFirstSet).contains(file, holder) : myFirstSet.contains(getPsiFile(file, holder), holder)) {
|
||||
if (mySecondSet instanceof PackageSetBase ? ((PackageSetBase)mySecondSet).contains(file, holder) : mySecondSet.contains(getPsiFile(file, holder), holder)) {
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
if (myFirstSet instanceof PackageSetBase ? ((PackageSetBase)myFirstSet).contains(file, project, holder) : myFirstSet.contains(getPsiFile(file, project), holder)) {
|
||||
if (mySecondSet instanceof PackageSetBase ? ((PackageSetBase)mySecondSet).contains(file, project, holder) : mySecondSet.contains(getPsiFile(file, project), holder)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -27,11 +27,12 @@ public class NamedPackageSetReference extends PackageSetBase {
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
if (holder == null) return false;
|
||||
final NamedScope scope = holder.getScope(myName);
|
||||
if (scope != null) {
|
||||
final PackageSet packageSet = scope.getValue();
|
||||
if (packageSet != null) {
|
||||
return packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, holder) : packageSet.contains(getPsiFile(file, holder), holder);
|
||||
return packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, holder) : packageSet.contains(getPsiFile(file, holder.getProject()), holder);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.psi.search.scope.packageSet;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
@@ -24,15 +25,31 @@ import org.jetbrains.annotations.Nullable;
|
||||
* User: anna
|
||||
*/
|
||||
public abstract class PackageSetBase implements PackageSet {
|
||||
/**
|
||||
* @see PackageSetBase#contains(com.intellij.openapi.vfs.VirtualFile, com.intellij.psi.search.scope.packageSet.NamedScopesHolder)
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract boolean contains(VirtualFile file, NamedScopesHolder holder);
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
return contains(file, holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(PsiFile file, NamedScopesHolder holder) {
|
||||
return contains(file.getVirtualFile(), holder);
|
||||
return contains(file.getVirtualFile(), file.getProject(), holder);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see PackageSetBase#getPsiFile(com.intellij.openapi.vfs.VirtualFile, com.intellij.psi.search.scope.packageSet.NamedScopesHolder)
|
||||
*/
|
||||
@Deprecated
|
||||
@Nullable
|
||||
public static PsiFile getPsiFile(VirtualFile file, NamedScopesHolder holder) {
|
||||
return PsiManager.getInstance(holder.getProject()).findFile(file);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiFile getPsiFile(VirtualFile file, Project project) {
|
||||
return PsiManager.getInstance(project).findFile(file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,10 @@
|
||||
*/
|
||||
package com.intellij.psi.search.scope.packageSet;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class UnionPackageSet extends PackageSetBase {
|
||||
private final PackageSet myFirstSet;
|
||||
@@ -29,8 +31,13 @@ public class UnionPackageSet extends PackageSetBase {
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
return (myFirstSet instanceof PackageSetBase ? ((PackageSetBase)myFirstSet).contains(file, holder) : myFirstSet.contains(getPsiFile(file, holder), holder)) ||
|
||||
(mySecondSet instanceof PackageSetBase ? ((PackageSetBase)mySecondSet).contains(file, holder) : mySecondSet.contains(getPsiFile(file, holder), holder));
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
return (myFirstSet instanceof PackageSetBase ? ((PackageSetBase)myFirstSet).contains(file, project, holder) : myFirstSet.contains(getPsiFile(file, project), holder)) ||
|
||||
(mySecondSet instanceof PackageSetBase ? ((PackageSetBase)mySecondSet).contains(file, project, holder) : mySecondSet.contains(getPsiFile(file, project), holder));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -79,7 +79,7 @@ public class ScopePaneSelectInTarget extends ProjectViewSelectInTarget {
|
||||
final VirtualFile virtualFile = context.getVirtualFile();
|
||||
if (packageSet != null) {
|
||||
final NamedScopesHolder holder = NamedScopesHolder.getHolder(myProject, subId, DependencyValidationManager.getInstance(myProject));
|
||||
if (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(virtualFile, holder) : packageSet.contains(PackageSetBase.getPsiFile(virtualFile, holder), holder)) {
|
||||
if (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(virtualFile, myProject, holder) : packageSet.contains(PackageSetBase.getPsiFile(virtualFile, myProject), holder)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,7 +332,7 @@ public class ScopeTreeViewPanel extends JPanel implements Disposable {
|
||||
myBuilder = new FileTreeModelBuilder(myProject, new Marker() {
|
||||
@Override
|
||||
public boolean isMarked(VirtualFile file) {
|
||||
return packageSet != null && (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, holder) : packageSet.contains(PackageSetBase.getPsiFile(file, holder), holder));
|
||||
return packageSet != null && (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, myProject, holder) : packageSet.contains(PackageSetBase.getPsiFile(file, myProject), holder));
|
||||
}
|
||||
}, settings);
|
||||
myTree.setPaintBusy(true);
|
||||
@@ -812,7 +812,7 @@ public class ScopeTreeViewPanel extends JPanel implements Disposable {
|
||||
if (virtualFile != null) {
|
||||
final ProjectView projectView = ProjectView.getInstance(myProject);
|
||||
final NamedScopesHolder holder = NamedScopesHolder.getHolder(myProject, CURRENT_SCOPE_NAME, myDependencyValidationManager);
|
||||
if (packageSet instanceof PackageSetBase && !((PackageSetBase)packageSet).contains(virtualFile, holder) ||
|
||||
if (packageSet instanceof PackageSetBase && !((PackageSetBase)packageSet).contains(virtualFile, myProject, holder) ||
|
||||
psiFile != null && !packageSet.contains(psiFile, holder)) {
|
||||
projectView.changeView(ProjectViewPane.ID);
|
||||
}
|
||||
|
||||
@@ -203,7 +203,7 @@ public class ScopeViewPane extends AbstractProjectViewPane {
|
||||
|
||||
private boolean changeView(final PackageSet packageSet, final PsiElement element, final PsiFileSystemItem psiFileSystemItem, final String name, final NamedScopesHolder holder,
|
||||
boolean requestFocus) {
|
||||
if ((packageSet instanceof PackageSetBase && ((PackageSetBase)packageSet).contains(psiFileSystemItem.getVirtualFile(), holder)) ||
|
||||
if ((packageSet instanceof PackageSetBase && ((PackageSetBase)packageSet).contains(psiFileSystemItem.getVirtualFile(), myProject, holder)) ||
|
||||
(psiFileSystemItem instanceof PsiFile && packageSet.contains((PsiFile)psiFileSystemItem, holder))) {
|
||||
if (!name.equals(getSubId())) {
|
||||
myProjectView.changeView(getId(), name);
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ScopeEditorPanel {
|
||||
private PanelProgressIndicator myCurrentProgress;
|
||||
private NamedScopesHolder myHolder;
|
||||
|
||||
public ScopeEditorPanel(Project project, final NamedScopesHolder holder) {
|
||||
public ScopeEditorPanel(final Project project, final NamedScopesHolder holder) {
|
||||
myProject = project;
|
||||
myHolder = holder;
|
||||
|
||||
@@ -105,8 +105,8 @@ public class ScopeEditorPanel {
|
||||
myTreeMarker = new Marker() {
|
||||
@Override
|
||||
public boolean isMarked(VirtualFile file) {
|
||||
return myCurrentScope != null && (myCurrentScope instanceof PackageSetBase ? ((PackageSetBase)myCurrentScope).contains(file, myHolder)
|
||||
: myCurrentScope.contains(PackageSetBase.getPsiFile(file, myHolder), myHolder));
|
||||
return myCurrentScope != null && (myCurrentScope instanceof PackageSetBase ? ((PackageSetBase)myCurrentScope).contains(file, project, myHolder)
|
||||
: myCurrentScope.contains(PackageSetBase.getPsiFile(file, myProject), myHolder));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -52,7 +52,12 @@ public class DefaultScopesProvider extends CustomScopesProviderEx {
|
||||
myProblemsScope = new NamedScope(IdeBundle.message("predefined.scope.problems.name"), new AbstractPackageSet(text) {
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
|
||||
return holder.getProject() == myProject
|
||||
return contains(file, holder.getProject(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
|
||||
return project == myProject
|
||||
&& WolfTheProblemSolver.getInstance(myProject).isProblemFile(file);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -250,7 +250,7 @@ public class FileColorsModel implements Cloneable {
|
||||
if (scope != null) {
|
||||
final NamedScopesHolder namedScopesHolder = NamedScopesHolder.getHolder(myProject, configuration.getScopeName(), null);
|
||||
final PackageSet packageSet = scope.getValue();
|
||||
if (packageSet instanceof PackageSetBase && namedScopesHolder != null && ((PackageSetBase)packageSet).contains(colored, namedScopesHolder)) {
|
||||
if (packageSet instanceof PackageSetBase && namedScopesHolder != null && ((PackageSetBase)packageSet).contains(colored, myProject, namedScopesHolder)) {
|
||||
return configuration;
|
||||
}
|
||||
}
|
||||
@@ -261,7 +261,7 @@ public class FileColorsModel implements Cloneable {
|
||||
if (scope != null) {
|
||||
final NamedScopesHolder namedScopesHolder = NamedScopesHolder.getHolder(myProject, configuration.getScopeName(), null);
|
||||
final PackageSet packageSet = scope.getValue();
|
||||
if (packageSet instanceof PackageSetBase && namedScopesHolder != null && ((PackageSetBase)packageSet).contains(colored, namedScopesHolder)) {
|
||||
if (packageSet instanceof PackageSetBase && namedScopesHolder != null && ((PackageSetBase)packageSet).contains(colored, myProject, namedScopesHolder)) {
|
||||
return configuration;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,4 +139,8 @@ public abstract class FileOrDirectoryTreeNode extends AbstractTreeNode implement
|
||||
@Override
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
public Project getProject() {
|
||||
return myProject;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ public class FileTreeNode extends FileOrDirectoryTreeNode {
|
||||
return false;
|
||||
}
|
||||
VirtualFile file = filePointer.getFile();
|
||||
if (file != null && file.isValid() && filter.first.contains(file, filter.second)) {
|
||||
if (file != null && file.isValid() && filter.first.contains(file, getProject(), filter.second)) {
|
||||
applyFilter(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user