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();