blob: 99acb49b4ce5e37deb40feb38dadd36fd1dd21e8 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.packageDependencies;
import com.intellij.analysis.AnalysisScopeBundle;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.packageSet.ComplementPackageSet;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.PackageSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class DependencyRule {
private NamedScope myFromScope;
private NamedScope myToScope;
private boolean myDenyRule = true;
public DependencyRule(NamedScope fromPackageSet, NamedScope toPackageSet, boolean isDenyRule) {
myFromScope = fromPackageSet;
myToScope = toPackageSet;
myDenyRule = isDenyRule;
}
public boolean isForbiddenToUse(@NotNull PsiFile from, @NotNull PsiFile to) {
if (myFromScope == null || myToScope == null) return false;
final PackageSet fromSet = myFromScope.getValue();
final PackageSet toSet = myToScope.getValue();
if (fromSet == null || toSet == null) return false;
DependencyValidationManager holder = DependencyValidationManager.getInstance(from.getProject());
return (myDenyRule
? fromSet.contains(from, holder)
: new ComplementPackageSet(fromSet).contains(from, holder))
&& toSet.contains(to, holder);
}
public boolean isApplicable(@NotNull PsiFile file){
if (myFromScope == null || myToScope == null) return false;
final PackageSet fromSet = myFromScope.getValue();
if (fromSet == null) return false;
DependencyValidationManager holder = DependencyValidationManager.getInstance(file.getProject());
return myDenyRule
? fromSet.contains(file, holder)
: new ComplementPackageSet(fromSet).contains(file, holder);
}
public String getDisplayText() {
String toScopeName = myToScope == null ? "" : myToScope.getName();
String fromScopeName = myFromScope == null ? "" : myFromScope.getName();
return myDenyRule
? AnalysisScopeBundle.message("scope.display.name.deny.scope", toScopeName, fromScopeName)
: AnalysisScopeBundle.message("scope.display.name.allow.scope", toScopeName, fromScopeName);
}
public boolean equals(Object o) {
if (!(o instanceof DependencyRule)) return false;
DependencyRule other = (DependencyRule)o;
return getDisplayText().equals(other.getDisplayText()) &&
Comparing.strEqual(getPackageSetPresentation(myFromScope), getPackageSetPresentation(other.myFromScope)) &&
Comparing.strEqual(getPackageSetPresentation(myToScope), getPackageSetPresentation(other.myToScope));
}
@Nullable
private static String getPackageSetPresentation(NamedScope scope) {
if (scope != null) {
final PackageSet packageSet = scope.getValue();
if (packageSet != null) {
return packageSet.getText();
}
}
return null;
}
public int hashCode() {
return getDisplayText().hashCode();
}
public DependencyRule createCopy() {
return new DependencyRule(myFromScope == null ? null : myFromScope.createCopy(),
myToScope == null ? null : myToScope.createCopy(),
myDenyRule);
}
public boolean isDenyRule() {
return myDenyRule;
}
public NamedScope getFromScope() {
return myFromScope;
}
public void setFromScope(NamedScope fromScope) {
myFromScope = fromScope;
}
public NamedScope getToScope() {
return myToScope;
}
public void setToScope(NamedScope toScope) {
myToScope = toScope;
}
}