package org.example.smalljava.validation;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.xbase.lib.Extension;
import org.example.smalljava.smallJava.SJAccessLevel;
import org.example.smalljava.smallJava.SJClass;
import org.example.smalljava.smallJava.SJMember;
import org.example.smalljava.typing.SmallJavaTypeConformance;
import org.example.smalljava.util.SmallJavaModelUtil;
@SuppressWarnings("all")
public class SmallJavaAccessibility {
@Inject
@Extension
private SmallJavaTypeConformance _smallJavaTypeConformance;
public boolean isAccessibleFrom(final SJMember member, final EObject context) {
boolean _xblockexpression = false;
{
final SJClass contextClass = SmallJavaModelUtil.containingClass(context);
final SJClass memberClass = SmallJavaModelUtil.containingClass(member);
boolean _switchResult = false;
boolean _matched = false;
if (!_matched) {
boolean _equals = Objects.equal(contextClass, memberClass);
if (_equals) {
_matched=true;
_switchResult = true;
}
}
if (!_matched) {
boolean _isSubclassOf = this._smallJavaTypeConformance.isSubclassOf(contextClass, memberClass);
if (_isSubclassOf) {
_matched=true;
SJAccessLevel _access = member.getAccess();
_switchResult = (!Objects.equal(_access, SJAccessLevel.PRIVATE));
}
}
if (!_matched) {
SJAccessLevel _access_1 = member.getAccess();
_switchResult = Objects.equal(_access_1, SJAccessLevel.PUBLIC);
}
_xblockexpression = _switchResult;
}
return _xblockexpression;
}
}