Blob Blame History Raw
diff -up ./org.eclipse.linuxtools.cdt.libhover/META-INF/MANIFEST.MF.fix2 ./org.eclipse.linuxtools.cdt.libhover/META-INF/MANIFEST.MF
--- ./org.eclipse.linuxtools.cdt.libhover/META-INF/MANIFEST.MF.fix2	2009-09-23 17:15:45.000000000 -0400
+++ ./org.eclipse.linuxtools.cdt.libhover/META-INF/MANIFEST.MF	2009-09-23 17:08:47.000000000 -0400
@@ -18,3 +18,4 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.jface.text;bundle-version="3.4.1"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.eclipse.linuxtools.cdt.libhover
+Bundle-ActivationPolicy: lazy
diff -up ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/cdt/libhover/LibhoverPlugin.java.fix2 ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/cdt/libhover/LibhoverPlugin.java
--- ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/cdt/libhover/LibhoverPlugin.java.fix2	2009-09-23 17:16:59.000000000 -0400
+++ ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/cdt/libhover/LibhoverPlugin.java	2009-09-23 17:09:54.000000000 -0400
@@ -29,6 +29,7 @@ public class LibhoverPlugin extends Abst
 	 * The constructor
 	 */
 	public LibhoverPlugin() {
+		plugin = this;
 	}
 
 	/*
diff -up ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/internal/cdt/libhover/LibHover.java.fix2 ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/internal/cdt/libhover/LibHover.java
--- ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/internal/cdt/libhover/LibHover.java.fix2	2009-09-23 17:11:05.000000000 -0400
+++ ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/internal/cdt/libhover/LibHover.java	2009-09-23 17:11:21.000000000 -0400
@@ -451,7 +451,7 @@ public class LibHover implements ICHelpP
 			return null;
 		if (methodType != null) {
 			try {
-				args = resolveArgs(info, methodType.getParameterTypes());
+				args = resolveArgs(info, methodType.getParameterTypes(), templateTypes);
 				returnType = methodType.getReturnType();
 			} catch (DOMException e) {
 				// TODO Auto-generated catch block
@@ -465,11 +465,11 @@ public class LibHover implements ICHelpP
 		MemberInfo member = info.getMember(memberName);
 		if (member != null) {
 			MemberInfo m = null;
-			if (!isParmMatch(member, args)) {
+			if (!isParmMatch(member, args, templateTypes, info)) {
 				ArrayList<MemberInfo> members = member.getChildren();
 				for (int i = 0; i < members.size(); ++i) {
 					MemberInfo k = members.get(i);
-					if (isParmMatch(k, args)) {
+					if (isParmMatch(k, args, templateTypes, info)) {
 						m = k;
 						break;
 					}
@@ -513,12 +513,18 @@ public class LibHover implements ICHelpP
 	}
      
  	
-	private boolean isParmMatch(MemberInfo m, String[] args) {
+	private boolean isParmMatch(MemberInfo m, String[] args, ArrayList<String> templateTypes, ClassInfo info) {
 		String[] memberParms = m.getParamTypes();
+		for (int i = 0; i < memberParms.length; ++i) {
+			String[] templateParms = info.getTemplateParms();
+			for (int j = 0; j < templateTypes.size(); ++j) {
+				memberParms[i] = memberParms[i].replaceAll(templateParms[j], templateTypes.get(j));
+			}
+		}
 		return Arrays.equals(memberParms, args);
 	}
 
-	private String[] resolveArgs(ClassInfo info, IType[] parameterTypes) {
+	private String[] resolveArgs(ClassInfo info, IType[] parameterTypes, ArrayList<String> templateTypes) {
 		String[] templateParms = info.getTemplateParms();
 		String[] result = new String[parameterTypes.length];
 		for (int i = 0; i < parameterTypes.length; ++i) {
@@ -529,7 +535,11 @@ public class LibHover implements ICHelpP
 			while (index >= 0) {
 				// We assume no class has more than 9 template parms.
 				int digit = param.charAt(index + 1) - '0';
-				param = param.replaceFirst(param.substring(index, index + 2), templateParms[digit]);
+				// where possible, replace template parms with real values
+				if (digit < templateTypes.size())
+					param = param.replaceFirst(param.substring(index, index + 2), templateTypes.get(digit));
+				else
+					param = param.replaceFirst(param.substring(index, index + 2), templateParms[digit]);
 				index = param.indexOf("#");
 			}
 			result[i] = param;
diff -up ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/internal/cdt/libhover/LibHoverLibrary.java.fix2 ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/internal/cdt/libhover/LibHoverLibrary.java
--- ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/internal/cdt/libhover/LibHoverLibrary.java.fix2	2009-09-23 17:10:32.000000000 -0400
+++ ./org.eclipse.linuxtools.cdt.libhover/src/org/eclipse/linuxtools/internal/cdt/libhover/LibHoverLibrary.java	2009-09-23 17:10:55.000000000 -0400
@@ -21,10 +21,12 @@ import java.net.URL;
 import java.util.ArrayList;
 
 import org.eclipse.core.filesystem.URIUtil;
+import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.linuxtools.cdt.libhover.ClassInfo;
 import org.eclipse.linuxtools.cdt.libhover.FunctionInfo;
 import org.eclipse.linuxtools.cdt.libhover.LibHoverInfo;
+import org.eclipse.linuxtools.cdt.libhover.LibhoverPlugin;
 import org.eclipse.linuxtools.cdt.libhover.TypedefInfo;
 
 public class LibHoverLibrary {
@@ -98,7 +100,13 @@ public class LibHoverLibrary {
 					URL url = acDoc.toURL();
 					docStream = url.openStream();
 				} else {
-					docStream = new FileInputStream(p.toFile());
+					try {
+						// Try to open the file as local to this plug-in.
+						docStream = FileLocator.openStream(LibhoverPlugin.getDefault().getBundle(), p, false);
+					} catch (IOException e) {
+						// File is not local to plug-in, try file system.
+						docStream = new FileInputStream(p.toFile());
+					}
 				}
 				ObjectInputStream input = new ObjectInputStream(docStream);
 				hoverInfo = (LibHoverInfo)input.readObject();