code: protected AbstractNestedFeatureScopeSession tryCreateNestedSessionWithVisibilityContext(Map<QualifiedName, JvmIdentifiableElement> elements, ITypeReferenceOwner owner,
  			QualifiedName thisName) {
  		if (elements.containsKey(thisName)) {
  			JvmIdentifiableElement associatedWithThis = elements.get(thisName);
  			if (associatedWithThis instanceof JvmType) {
  				if (IFeatureNames.SELF.equals(thisName)) {
  					IEObjectDescription thisDescription = getLocalElement(IFeatureNames.THIS);
  					if (thisDescription != null && thisDescription.getEObjectOrProxy() instanceof JvmDeclaredType) {
  						JvmDeclaredType thisType = (JvmDeclaredType) thisDescription.getEObjectOrProxy();
  						LightweightTypeReference context = owner.toPlainTypeReference((JvmType) associatedWithThis);
  						FeatureScopeSessionWithContext contextSession = new FeatureScopeSessionWithContext(this, context, thisType.getPackageName());
  						AbstractNestedFeatureScopeSession result = new FeatureScopeSessionWithLocalElements(contextSession, elements);
  						return result;
  					}
  				}
  				LightweightTypeReference context = owner.toPlainTypeReference((JvmType) associatedWithThis);
  				FeatureScopeSessionWithContext contextSession = new FeatureScopeSessionWithContext(this, context);
  				AbstractNestedFeatureScopeSession result = new FeatureScopeSessionWithLocalElements(contextSession, elements);
  				return result;
  			}
  		}
  		return null;
  	}
docs: /* @Nullable