/*
* Copyright 2003-2015 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 jetbrains.mps.core.aspects.behaviour;
import jetbrains.mps.core.aspects.behaviour.api.SModifiers;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.annotations.Immutable;
@Immutable
public final class SModifiersImpl implements SModifiers {
public static final int STATIC = 1;
public static final int FINAL = 2;
public static final int ABSTRACT = 4;
public static final int VIRTUAL = 8;
private final int myMask;
private final AccessPrivileges myAccessPrivileges;
private SModifiersImpl(int mask, @NotNull AccessPrivileges accessPrivileges) {
myMask = mask;
myAccessPrivileges = accessPrivileges;
}
@Override
public boolean isPublic() {
return myAccessPrivileges == AccessPrivileges.PUBLIC;
}
@Override
public boolean isPrivate() {
return myAccessPrivileges == AccessPrivileges.PRIVATE;
}
@Override
public boolean isProtected() {
return myAccessPrivileges == AccessPrivileges.PROTECTED;
}
@Override
public boolean isPackage() {
return myAccessPrivileges == AccessPrivileges.PACKAGE;
}
public boolean isStatic() {
return (myMask & STATIC) != 0;
}
@Override
public boolean isFinal() {
return (myMask & FINAL) != 0;
}
public boolean isVirtual() {
return (myMask & VIRTUAL) != 0;
}
@Override
public boolean isAbstract() {
return (myMask & ABSTRACT) != 0;
}
@NotNull
public static SModifiersImpl create(boolean aStatic, boolean aFinal, boolean aVirtual, boolean aAbstract, @NotNull AccessPrivileges accessPrivileges) {
int mask = 0;
if (aStatic) mask |= STATIC;
if (aFinal) mask |= FINAL;
if (aVirtual) mask |= VIRTUAL;
if (aAbstract) mask |= ABSTRACT;
return new SModifiersImpl(mask, accessPrivileges);
}
@NotNull
public static SModifiersImpl create(int mask, @NotNull AccessPrivileges accessPrivileges) {
return new SModifiersImpl(mask, accessPrivileges);
}
@Override
public boolean equals(Object o) {
if (o instanceof SModifiersImpl) {
SModifiersImpl another = (SModifiersImpl) o;
return myMask == another.myMask;
}
return false;
}
@Override
public int hashCode() {
return myMask;
}
@Override
public String toString() {
return (isVirtual() ? "V" : "") +
(isStatic() ? "S" : "") +
(isFinal() ? "F" : "") +
"[" + myAccessPrivileges + "]";
}
}