/******************************************************************************* * Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html ******************************************************************************/ package org.axdt.asdoc.scoping; import java.util.List; import java.util.Map; import java.util.WeakHashMap; import org.axdt.asdoc.access.AsdocLibrary; import org.axdt.asdoc.access.IDocRootProvider; import org.axdt.asdoc.model.AsdocRoot; import org.axdt.avm.scoping.AvmLibraryScopeProvider; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.xtext.resource.ISelectable; import com.google.common.collect.Lists; import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton public class AsdocLibraryScopeProvider extends AvmLibraryScopeProvider { protected final IDocRootProvider docRootProvider; protected Map<ResourceSet,List<ISelectable>> cache; @Inject public AsdocLibraryScopeProvider(IDocRootProvider docProvider) { this.docRootProvider = docProvider; cache = new WeakHashMap<ResourceSet, List<ISelectable>>(); } protected List<ISelectable> getLibraries(ResourceSet resourceSet) { List<ISelectable> result = cache.get(resourceSet); if (result == null) { result = Lists.newLinkedList(); result.add(globals); for (AsdocRoot root:docRootProvider.getDocRoots(resourceSet)) result.add(new AsdocLibrary(root)); cache.put(resourceSet, result); } return result; } }