Skip to content

Commit 98cdf67

Browse files
Rawi01rspilker
authored andcommitted
Javadoc support for eclipse 2024-03
1 parent e4824cb commit 98cdf67

File tree

4 files changed

+46
-15
lines changed

4 files changed

+46
-15
lines changed

src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -967,6 +967,14 @@ private static void patchNullCheck(ScriptManager sm) {
967967
}
968968

969969
private static void patchJavadoc(ScriptManager sm) {
970+
// Moved to new package and changed to instance method in 2024-03
971+
sm.addScriptIfWitness(OSGI_TYPES, ScriptBuilder.wrapMethodCall()
972+
.target(new MethodTarget("org.eclipse.jdt.core.manipulation.internal.javadoc.CoreJavadocAccess", "getHTMLContent", "java.lang.String", "org.eclipse.jdt.core.IJavaElement", "boolean"))
973+
.methodToWrap(new Hook("org.eclipse.jdt.core.manipulation.internal.javadoc.CoreJavadocAccess", "getHTMLContentFromSource", "java.lang.String", "org.eclipse.jdt.core.IJavaElement"))
974+
.wrapMethod(new Hook("lombok.launch.PatchFixesHider$Javadoc", "getHTMLContentFromSource", "java.lang.String", "java.lang.String", "java.lang.Object", "org.eclipse.jdt.core.IJavaElement"))
975+
.requestExtra(StackRequest.THIS, StackRequest.PARAM1)
976+
.build());
977+
970978
sm.addScriptIfWitness(OSGI_TYPES, ScriptBuilder.wrapMethodCall()
971979
.target(new MethodTarget("org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2", "getHTMLContent", "java.lang.String", "org.eclipse.jdt.core.IJavaElement", "boolean"))
972980
.methodToWrap(new Hook("org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2", "getHTMLContentFromSource", "java.lang.String", "org.eclipse.jdt.core.IJavaElement"))

src/eclipseAgent/lombok/eclipse/agent/PatchJavadoc.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838
public class PatchJavadoc {
3939

40-
public static String getHTMLContentFromSource(String original, Object member) {
40+
public static String getHTMLContentFromSource(Object instance, String original, Object member) {
4141
if (original != null) {
4242
return original;
4343
}
@@ -54,7 +54,7 @@ public static String getHTMLContentFromSource(String original, Object member) {
5454
String rawJavadoc = docs.get(signature);
5555
if (rawJavadoc == null) return null;
5656

57-
return Reflection.javadoc2HTML((IMember) member, (IJavaElement) member, rawJavadoc);
57+
return Reflection.javadoc2HTML(instance, (IMember) member, (IJavaElement) member, rawJavadoc);
5858
}
5959
}
6060

@@ -85,9 +85,10 @@ static final String getSignature(SourceMethod sourceMethod) {
8585
private static class Reflection {
8686
private static final Method javadoc2HTML;
8787
private static final Method oldJavadoc2HTML;
88+
private static final Method reallyOldJavadoc2HTML;
8889
private static final Method lsJavadoc2HTML;
8990
static {
90-
Method a = null, b = null, c = null;
91+
Method a = null, b = null, c = null, d = null;
9192

9293
try {
9394
a = Permit.getMethod(JavadocContentAccess2.class, "javadoc2HTML", IMember.class, IJavaElement.class, String.class);
@@ -98,30 +99,41 @@ private static class Reflection {
9899
try {
99100
c = Permit.getMethod(Class.forName("org.eclipse.jdt.ls.core.internal.javadoc.JavadocContentAccess2"), "javadoc2HTML", IMember.class, IJavaElement.class, String.class);
100101
} catch (Throwable t) {}
102+
try {
103+
d = Permit.getMethod(Class.forName("org.eclipse.jdt.core.manipulation.internal.javadoc.CoreJavadocAccess"), "javadoc2HTML", IMember.class, IJavaElement.class, String.class);
104+
} catch (Throwable t) {}
101105

102-
javadoc2HTML = a;
103-
oldJavadoc2HTML = b;
106+
oldJavadoc2HTML = a;
107+
reallyOldJavadoc2HTML = b;
104108
lsJavadoc2HTML = c;
109+
javadoc2HTML = d;
105110
}
106111

107-
private static String javadoc2HTML(IMember member, IJavaElement element, String rawJavadoc) {
112+
private static String javadoc2HTML(Object instance, IMember member, IJavaElement element, String rawJavadoc) {
108113
if (javadoc2HTML != null) {
109114
try {
110-
return (String) javadoc2HTML.invoke(null, member, element, rawJavadoc);
115+
return (String) javadoc2HTML.invoke(instance, member, element, rawJavadoc);
116+
} catch (Throwable t) {
117+
return null;
118+
}
119+
}
120+
if (oldJavadoc2HTML != null) {
121+
try {
122+
return (String) oldJavadoc2HTML.invoke(instance, member, element, rawJavadoc);
111123
} catch (Throwable t) {
112124
return null;
113125
}
114126
}
115127
if (lsJavadoc2HTML != null) {
116128
try {
117-
return (String) lsJavadoc2HTML.invoke(null, member, element, rawJavadoc);
129+
return (String) lsJavadoc2HTML.invoke(instance, member, element, rawJavadoc);
118130
} catch (Throwable t) {
119131
return null;
120132
}
121133
}
122-
if (oldJavadoc2HTML != null) {
134+
if (reallyOldJavadoc2HTML != null) {
123135
try {
124-
return (String) oldJavadoc2HTML.invoke(null, member, rawJavadoc);
136+
return (String) reallyOldJavadoc2HTML.invoke(instance, member, rawJavadoc);
125137
} catch (Throwable t) {
126138
return null;
127139
}

src/eclipseAgent/lombok/launch/PatchFixesHider.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,11 +435,15 @@ public static final class Javadoc {
435435

436436
static {
437437
Class<?> shadowed = Util.shadowLoadClass("lombok.eclipse.agent.PatchJavadoc");
438-
GET_HTML = Util.findMethod(shadowed, "getHTMLContentFromSource", String.class, Object.class);
438+
GET_HTML = Util.findMethod(shadowed, "getHTMLContentFromSource", Object.class, String.class, Object.class);
439439
}
440440

441441
public static String getHTMLContentFromSource(String original, IJavaElement member) {
442-
return (String) Util.invokeMethod(GET_HTML, original, member);
442+
return (String) Util.invokeMethod(GET_HTML, null, original, member);
443+
}
444+
445+
public static String getHTMLContentFromSource(String original, Object instance, IJavaElement member) {
446+
return (String) Util.invokeMethod(GET_HTML, instance, original, member);
443447
}
444448
}
445449

test/eclipse/src/lombok/eclipse/misc/JavadocTest.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@
2121
*/
2222
package lombok.eclipse.misc;
2323

24-
import static org.junit.Assert.assertEquals;
24+
import static org.junit.Assert.assertThat;
2525

2626
import org.eclipse.jdt.core.ICompilationUnit;
2727
import org.eclipse.jdt.core.IJavaElement;
2828
import org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2;
29+
import org.hamcrest.CoreMatchers;
2930
import org.junit.Rule;
3031
import org.junit.Test;
3132
import org.junit.runner.RunWith;
@@ -45,10 +46,16 @@ public void getterSetter() throws Exception {
4546

4647
IJavaElement getterInvocation = cu.codeSelect(306, 0)[0];
4748
String getterHtmlContent = JavadocContentAccess2.getHTMLContent(getterInvocation, true);
48-
assertEquals("Getter section<dl><dt>Returns:</dt><dd> Sky is blue3</dd></dl>", getterHtmlContent);
49+
assertThat(getterHtmlContent, CoreMatchers.containsString("Getter section"));
50+
assertThat(getterHtmlContent, CoreMatchers.containsString("Returns:"));
51+
assertThat(getterHtmlContent, CoreMatchers.containsString("Sky is blue3"));
4952

5053
IJavaElement setterInvocation = cu.codeSelect(320, 0)[0];
5154
String setterHtmlContent = JavadocContentAccess2.getHTMLContent(setterInvocation, true);
52-
assertEquals("Setter section<dl><dt>Parameters:</dt><dd><b>fieldName</b> Hello, World3</dd><dd><b>field</b> </dd></dl>", setterHtmlContent);
55+
assertThat(setterHtmlContent, CoreMatchers.containsString("Setter section"));
56+
assertThat(setterHtmlContent, CoreMatchers.containsString("Parameters:"));
57+
assertThat(setterHtmlContent, CoreMatchers.containsString("fieldName"));
58+
assertThat(setterHtmlContent, CoreMatchers.containsString("Hello, World3"));
59+
assertThat(setterHtmlContent, CoreMatchers.containsString("field"));
5360
}
5461
}

0 commit comments

Comments
 (0)