com.ibm.wala.classLoader.AbstractURLModule Maven / Gradle / Ivy
/*
* Copyright (c) 2002 - 2006 IBM Corporation.
* 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 com.ibm.wala.classLoader;
import com.ibm.wala.core.util.io.FileProvider;
import com.ibm.wala.util.collections.NonNullSingletonIterator;
import com.ibm.wala.util.debug.Assertions;
import com.ibm.wala.util.debug.UnimplementedError;
import java.io.IOException;
import java.io.InputStream;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
public abstract class AbstractURLModule implements Module, ModuleEntry {
private final URL url;
public AbstractURLModule(URL url) {
assert url != null;
this.url = url;
}
public URL getURL() {
return url;
}
@Override
public String getName() {
try {
URLConnection con = url.openConnection();
if (con instanceof JarURLConnection) return ((JarURLConnection) con).getEntryName();
else return new FileProvider().filePathFromURL(url);
} catch (IOException e) {
Assertions.UNREACHABLE();
return null;
}
}
@Override
public InputStream getInputStream() {
try {
return url.openConnection().getInputStream();
} catch (IOException e) {
assert false : "cannot find stream for " + url;
return null;
}
}
@Override
public boolean isModuleFile() {
return false;
}
@Override
public Module asModule() throws UnimplementedError {
Assertions.UNREACHABLE();
return null;
}
@Override
public String getClassName() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@Override
public Iterator getEntries() {
return new NonNullSingletonIterator<>(this);
}
@Override
public Module getContainer() {
// URLs are freestanding, without containers
return null;
}
@Override
public String toString() {
return "module:" + url;
}
}