blob: 0344d8b7a2d0d0f350eaceab9efceea2a524c211 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2018 IBM Corporation and others.
* 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
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.api.tools.internal.search;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jdt.internal.core.util.ILRUCacheable;
/**
* This class is used by
* {@link org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent}
* for storing its references
*/
public class UseScanReferences implements ILRUCacheable, IReferenceCollection {
Map<String, List<IReferenceDescriptor>> fReferencesMap;
public UseScanReferences() {
fReferencesMap = new LinkedHashMap<>();
}
@Override
public void add(String type, IReferenceDescriptor refDesc) {
List<IReferenceDescriptor> refDescList = fReferencesMap.get(type);
if (refDescList == null) {
refDescList = new ArrayList<>();
fReferencesMap.put(type, refDescList);
}
if (!refDescList.contains(refDesc)) {
refDescList.add(refDesc);
}
}
@Override
public boolean hasReferencesTo(String type) {
List<IReferenceDescriptor> refDescList = fReferencesMap.get(type);
return refDescList != null && refDescList.size() > 0;
}
@Override
public IReferenceDescriptor[] getExternalDependenciesTo(String[] types) {
if (types == null || types.length == 0) {
return new IReferenceDescriptor[0];
}
List<IReferenceDescriptor> referenceDescriptorList = new ArrayList<>();
for (String type : types) {
List<IReferenceDescriptor> refDescs = fReferencesMap.get(type);
if (refDescs == null || refDescs.isEmpty()) {
continue;
}
referenceDescriptorList.addAll(refDescs);
}
return referenceDescriptorList.toArray(new IReferenceDescriptor[referenceDescriptorList.size()]);
}
@Override
public IReferenceDescriptor[] getAllExternalDependencies() {
List<IReferenceDescriptor> allRefDescs = new ArrayList<>();
for (List<IReferenceDescriptor> refDescList : fReferencesMap.values()) {
allRefDescs.addAll(refDescList);
}
return allRefDescs.toArray(new IReferenceDescriptor[allRefDescs.size()]);
}
@Override
public int getCacheFootprint() {
return fReferencesMap.size();
}
@Override
public void clear() {
fReferencesMap.clear();
}
}