package org.simantics.scl.osgi.internal;
-import gnu.trove.procedure.TObjectProcedure;
+import java.util.ArrayList;
+import java.util.Collection;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
import org.simantics.scl.compiler.source.ModuleSource;
import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
+import gnu.trove.procedure.TObjectProcedure;
+
public class ServiceBasedModuleSourceRepository implements ModuleSourceRepository {
ServiceTracker<ModuleSourceRepository, ModuleSourceRepository> sourceRepositories;
@Override
public String getDocumentation(String documentationName) {
+ // getServices is internally synchronized, so no need to synchronize here
Object[] services = sourceRepositories.getServices();
if(services != null)
for(Object sourceRepository_ : services) {
@Override
public void forAllModules(TObjectProcedure<String> procedure) {
- for(Object sourceRepository_ : sourceRepositories.getServices()) {
- ModuleSourceRepository sourceLoader = (ModuleSourceRepository)sourceRepository_;
- sourceLoader.forAllModules(procedure);
- }
+ // getServices is internally synchronized, so no need to synchronize here
+ Object[] services = sourceRepositories.getServices();
+ if(services != null)
+ for(Object sourceRepository_ : services) {
+ ModuleSourceRepository sourceLoader = (ModuleSourceRepository)sourceRepository_;
+ sourceLoader.forAllModules(procedure);
+ }
+ }
+
+ @Override
+ public Collection<String> getModuleNames() {
+ ArrayList<String> result = new ArrayList<>();
+ forAllModules((String name) -> {
+ result.add(name);
+ return true;
+ });
+ return result;
}
@Override
public void forAllDocumentations(TObjectProcedure<String> procedure) {
- for(Object sourceRepository_ : sourceRepositories.getServices()) {
- ModuleSourceRepository sourceLoader = (ModuleSourceRepository)sourceRepository_;
- sourceLoader.forAllDocumentations(procedure);
- }
+ Object[] services = sourceRepositories.getServices();
+ if(services != null)
+ for(Object sourceRepository_ : services) {
+ ModuleSourceRepository sourceLoader = (ModuleSourceRepository)sourceRepository_;
+ sourceLoader.forAllDocumentations(procedure);
+ }
+ }
+
+ @Override
+ public Collection<String> getDocumentationNames() {
+ ArrayList<String> result = new ArrayList<>();
+ forAllDocumentations((String name) -> {
+ result.add(name);
+ return true;
+ });
+ return result;
}
@Override
}
}
- @Override
- public void clear() {
- }
-
}