package org.bundlemaker.core.jtype;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.bundlemaker.core.jtype.internal.Reference;
import org.bundlemaker.core.jtype.internal.Type;
import org.bundlemaker.core.resource.IModuleResource;
public class HelperUtil {
// TODO: clean up!
public static void connectParsedResourceToModel(IModuleResource resource, boolean isSource) {
// set the references
Set<Reference> resourceReferences = new HashSet<Reference>();
for (Reference reference : resource.adaptAs(IParsableTypeResource.class).getModifiableReferences()) {
Reference newReference = new Reference(reference);
newReference.setResource(resource);
resourceReferences.add(newReference);
}
resource.adaptAs(IParsableTypeResource.class).getModifiableReferences().clear();
resource.adaptAs(IParsableTypeResource.class).getModifiableReferences().addAll(resourceReferences);
// set the type-back-references
for (Type type : resource.adaptAs(IParsableTypeResource.class).getModifiableContainedTypes()) {
//
if (isSource) {
type.setSourceResource(resource);
} else {
type.setBinaryResource(resource);
}
// set the references
Map<String, Reference> typeReferences = new HashMap<String, Reference>();
for (Reference reference : type.getModifiableReferences()) {
// TODO
if (reference == null) {
continue;
}
Reference newReference = new Reference(reference);
newReference.setType(type);
if (typeReferences.containsKey(newReference)) {
throw new RuntimeException();
} else {
typeReferences.put(newReference.getFullyQualifiedName(), newReference);
}
}
type.getModifiableReferences().clear();
type.getModifiableReferences().addAll(typeReferences.values());
}
}
}