### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core diff --git model/org/eclipse/jdt/internal/core/JavaElement.java model/org/eclipse/jdt/internal/core/JavaElement.java index 36ec69e..7f4d377 100644 --- model/org/eclipse/jdt/internal/core/JavaElement.java +++ model/org/eclipse/jdt/internal/core/JavaElement.java @@ -14,8 +14,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; +import java.net.HttpURLConnection; import java.net.JarURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; @@ -30,9 +29,32 @@ import java.util.Set; import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.*; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.PlatformObject; import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jdt.core.*; +import org.eclipse.jdt.core.IClassFile; +import org.eclipse.jdt.core.IClasspathAttribute; +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jdt.core.IField; +import org.eclipse.jdt.core.IJavaElement; +import org.eclipse.jdt.core.IJavaModel; +import org.eclipse.jdt.core.IJavaModelStatus; +import org.eclipse.jdt.core.IJavaModelStatusConstants; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IMember; +import org.eclipse.jdt.core.IOpenable; +import org.eclipse.jdt.core.IPackageFragmentRoot; +import org.eclipse.jdt.core.IParent; +import org.eclipse.jdt.core.ISourceRange; +import org.eclipse.jdt.core.ISourceReference; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.core.WorkingCopyOwner; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.internal.compiler.lookup.Binding; @@ -806,42 +828,36 @@ } } - /* - * We don't use getContentEncoding() on the URL connection, because it might leave open streams behind. - * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=117890 - */ protected String getURLContents(URL baseLoc, String docUrlValue) throws JavaModelException { InputStream stream = null; JarURLConnection connection2 = null; try { - URL docUrl = new URL(docUrlValue); - URLConnection connection = docUrl.openConnection(); - Class[] parameterTypes = new Class[]{int.class}; - Integer timeoutVal = new Integer(10000); - // set the connect and read timeouts using reflection since these methods are not available in java 1.4 - Class URLClass = connection.getClass(); - try { - Method connectTimeoutMethod = URLClass.getDeclaredMethod("setConnectTimeout", parameterTypes); //$NON-NLS-1$ - Method readTimeoutMethod = URLClass.getDeclaredMethod("setReadTimeout", parameterTypes); //$NON-NLS-1$ - connectTimeoutMethod.invoke(connection, new Object[]{timeoutVal}); - readTimeoutMethod.invoke(connection, new Object[]{timeoutVal}); - } catch (SecurityException e) { - // ignore - } catch (IllegalArgumentException e) { - // ignore - } catch (NoSuchMethodException e) { - // ignore - } catch (IllegalAccessException e) { - // ignore - } catch (InvocationTargetException e) { - // ignore + URL docUrl = null; + URLConnection connection = null; + redirect: for (int i= 0; i < 5; i++) { // avoid endless redirects... + docUrl = new URL(docUrlValue); + connection = docUrl.openConnection(); + + int timeoutVal = 10000; + connection.setConnectTimeout(timeoutVal); + connection.setReadTimeout(timeoutVal); + + if (connection instanceof HttpURLConnection) { + HttpURLConnection httpCon = (HttpURLConnection) connection; + if (httpCon.getResponseCode() == 301) { + docUrlValue = httpCon.getHeaderField("location"); //$NON-NLS-1$ + if (docUrlValue != null) { + continue redirect; + } + } + } else if (connection instanceof JarURLConnection) { + connection2 = (JarURLConnection) connection; + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=156307 + connection.setUseCaches(false); + } + break; } - if (connection instanceof JarURLConnection) { - connection2 = (JarURLConnection) connection; - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=156307 - connection.setUseCaches(false); - } try { stream = new BufferedInputStream(connection.getInputStream()); } catch (IllegalArgumentException e) {