8198522: Javadoc search broken after output files organization for modules

Reviewed-by: jjg
This commit is contained in:
Bhavesh Patel 2018-02-26 17:18:15 -08:00
parent 4ce3f37ba2
commit 4932677ba4
4 changed files with 88 additions and 15 deletions

View File

@ -426,6 +426,7 @@ public class HtmlDocletWriter {
.setCharset(configuration.charset) .setCharset(configuration.charset)
.addKeywords(metakeywords) .addKeywords(metakeywords)
.setStylesheets(configuration.getMainStylesheet(), configuration.getAdditionalStylesheets()) .setStylesheets(configuration.getMainStylesheet(), configuration.getAdditionalStylesheets())
.setUseModuleDirectories(configuration.useModuleDirectories)
.setIndex(configuration.createindex, mainBodyScript); .setIndex(configuration.createindex, mainBodyScript);
Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(), head.toContent(), body); Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(), head.toContent(), body);

View File

@ -60,6 +60,7 @@ public class Head {
private boolean showTimestamp; private boolean showTimestamp;
private boolean showGeneratedBy; // temporary: for compatibility private boolean showGeneratedBy; // temporary: for compatibility
private boolean showMetaCreated; // temporary: for compatibility private boolean showMetaCreated; // temporary: for compatibility
private boolean useModuleDirectories;
private DocFile mainStylesheetFile; private DocFile mainStylesheetFile;
private List<DocFile> additionalStylesheetFiles = Collections.emptyList(); private List<DocFile> additionalStylesheetFiles = Collections.emptyList();
private boolean index; private boolean index;
@ -174,6 +175,17 @@ public class Head {
return this; return this;
} }
/**
* Sets whether the module directories should be used. This is used to set the JavaScript variable.
*
* @param useModuleDirectories true if the module directories should be used
* @return this object
*/
public Head setUseModuleDirectories(boolean useModuleDirectories) {
this.useModuleDirectories = useModuleDirectories;
return this;
}
/** /**
* Sets whether or not to include the supporting scripts and stylesheets for the * Sets whether or not to include the supporting scripts and stylesheets for the
* "search" feature. * "search" feature.
@ -305,7 +317,9 @@ public class Head {
String ptrPath = pathToRoot.isEmpty() ? "." : pathToRoot.getPath(); String ptrPath = pathToRoot.isEmpty() ? "." : pathToRoot.getPath();
mainBodyScript.append("var pathtoroot = ") mainBodyScript.append("var pathtoroot = ")
.appendStringLiteral(ptrPath + "/") .appendStringLiteral(ptrPath + "/")
.append(";loadScripts(document, \'script\');"); .append(";\n")
.append("var useModuleDirectories = " + useModuleDirectories + ";\n")
.append("loadScripts(document, \'script\');");
} }
addJQueryFile(tree, DocPaths.JSZIP_MIN); addJQueryFile(tree, DocPaths.JSZIP_MIN);
addJQueryFile(tree, DocPaths.JSZIPUTILS_MIN); addJQueryFile(tree, DocPaths.JSZIPUTILS_MIN);

View File

@ -76,6 +76,25 @@ function getHighlightedText(item) {
} }
return label; return label;
} }
function getURLPrefix(ui) {
var urlPrefix="";
if (useModuleDirectories) {
var slash = "/";
if (ui.item.category === catModules) {
return ui.item.l + slash;
} else if (ui.item.category === catPackages) {
return ui.item.m + slash;
} else if (ui.item.category === catTypes || ui.item.category === catMembers) {
$.each(packageSearchIndex, function(index, item) {
if (ui.item.p == item.l) {
urlPrefix = item.m + slash;
}
});
return urlPrefix;
}
}
return urlPrefix;
}
var watermark = 'Search'; var watermark = 'Search';
$(function() { $(function() {
$("#search").val(''); $("#search").val('');
@ -314,22 +333,26 @@ $(function() {
}, },
select: function(event, ui) { select: function(event, ui) {
if (ui.item.l !== noResult.l) { if (ui.item.l !== noResult.l) {
var url = ""; var url = getURLPrefix(ui);
if (ui.item.category === catModules) { if (ui.item.category === catModules) {
if (useModuleDirectories) {
url += "module-summary.html";
} else {
url = ui.item.l + "-summary.html"; url = ui.item.l + "-summary.html";
}
} else if (ui.item.category === catPackages) { } else if (ui.item.category === catPackages) {
url = ui.item.l.replace(/\./g, '/') + "/package-summary.html"; url += ui.item.l.replace(/\./g, '/') + "/package-summary.html";
} else if (ui.item.category === catTypes) { } else if (ui.item.category === catTypes) {
if (ui.item.p === "<Unnamed>") { if (ui.item.p === "<Unnamed>") {
url = ui.item.l + ".html"; url += ui.item.l + ".html";
} else { } else {
url = ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html";
} }
} else if (ui.item.category === catMembers) { } else if (ui.item.category === catMembers) {
if (ui.item.p === "<Unnamed>") { if (ui.item.p === "<Unnamed>") {
url = ui.item.c + ".html" + "#"; url += ui.item.c + ".html" + "#";
} else { } else {
url = ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#";
} }
if (ui.item.url) { if (ui.item.url) {
url += ui.item.url; url += ui.item.url;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -24,7 +24,7 @@
/* /*
* @test * @test
* @bug 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881 * @bug 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881
* 8181622 8182263 8074407 8187521 * 8181622 8182263 8074407 8187521 8198522
* @summary Test the search feature of javadoc. * @summary Test the search feature of javadoc.
* @author bpatel * @author bpatel
* @library ../lib * @library ../lib
@ -43,7 +43,7 @@ public class TestSearch extends JavadocTester {
void test1() { void test1() {
javadoc("-d", "out-1", "-sourcepath", "-use", testSrc("UnnamedPkgClass.java")); javadoc("-d", "out-1", "-sourcepath", "-use", testSrc("UnnamedPkgClass.java"));
checkExit(Exit.OK); checkExit(Exit.OK);
checkSearchOutput("UnnamedPkgClass.html", true); checkSearchOutput("UnnamedPkgClass.html", true, true);
checkJqueryAndImageFiles(true); checkJqueryAndImageFiles(true);
checkSearchJS(); checkSearchJS();
checkFiles(false, checkFiles(false,
@ -249,6 +249,16 @@ public class TestSearch extends JavadocTester {
"type-search-index.js"); "type-search-index.js");
} }
@Test
void testNoModuleDirectories() {
javadoc("-d", "out-noMdlDir", "--no-module-directories", "-Xdoclint:none",
"-sourcepath", testSrc,
"-use", "pkg", "pkg1", "pkg2", "pkg3");
checkExit(Exit.OK);
checkSearchOutput(true, false);
checkSearchJS();
}
void checkDocLintErrors() { void checkDocLintErrors() {
checkOutput(Output.OUT, true, checkOutput(Output.OUT, true,
"A sample method. Testing search tag for {@index \"unclosed quote}.", "A sample method. Testing search tag for {@index \"unclosed quote}.",
@ -258,10 +268,14 @@ public class TestSearch extends JavadocTester {
} }
void checkSearchOutput(boolean expectedOutput) { void checkSearchOutput(boolean expectedOutput) {
checkSearchOutput("overview-summary.html", expectedOutput); checkSearchOutput("overview-summary.html", expectedOutput, true);
} }
void checkSearchOutput(String fileName, boolean expectedOutput) { void checkSearchOutput(boolean expectedOutput, boolean moduleDirectoriesVar) {
checkSearchOutput("overview-summary.html", expectedOutput, moduleDirectoriesVar);
}
void checkSearchOutput(String fileName, boolean expectedOutput, boolean moduleDirectoriesVar) {
// Test for search related markup // Test for search related markup
checkOutput(fileName, expectedOutput, checkOutput(fileName, expectedOutput,
"<link rel=\"stylesheet\" type=\"text/css\" href=\"jquery/jquery-ui.css\" title=\"Style\">\n", "<link rel=\"stylesheet\" type=\"text/css\" href=\"jquery/jquery-ui.css\" title=\"Style\">\n",
@ -272,7 +286,9 @@ public class TestSearch extends JavadocTester {
"<![endif]-->\n", "<![endif]-->\n",
"<script type=\"text/javascript\" src=\"jquery/jquery-1.10.2.js\"></script>\n", "<script type=\"text/javascript\" src=\"jquery/jquery-1.10.2.js\"></script>\n",
"<script type=\"text/javascript\" src=\"jquery/jquery-ui.js\"></script>", "<script type=\"text/javascript\" src=\"jquery/jquery-ui.js\"></script>",
"var pathtoroot = \"./\";loadScripts(document, 'script');", "var pathtoroot = \"./\";\n"
+ "var useModuleDirectories = " + moduleDirectoriesVar + ";\n"
+ "loadScripts(document, 'script');",
"<ul class=\"navListSearch\">\n", "<ul class=\"navListSearch\">\n",
"<li><label for=\"search\">SEARCH:</label>\n" "<li><label for=\"search\">SEARCH:</label>\n"
+ "<input type=\"text\" id=\"search\" value=\"search\" disabled=\"disabled\">\n" + "<input type=\"text\" id=\"search\" value=\"search\" disabled=\"disabled\">\n"
@ -503,7 +519,26 @@ public class TestSearch extends JavadocTester {
+ " if ($(this).val() == watermark) {\n" + " if ($(this).val() == watermark) {\n"
+ " $(this).val('').removeClass('watermark');\n" + " $(this).val('').removeClass('watermark');\n"
+ " }\n" + " }\n"
+ " });"); + " });",
"function getURLPrefix(ui) {\n"
+ " var urlPrefix=\"\";\n"
+ " if (useModuleDirectories) {\n"
+ " var slash = \"/\";\n"
+ " if (ui.item.category === catModules) {\n"
+ " return ui.item.l + slash;\n"
+ " } else if (ui.item.category === catPackages) {\n"
+ " return ui.item.m + slash;\n"
+ " } else if (ui.item.category === catTypes || ui.item.category === catMembers) {\n"
+ " $.each(packageSearchIndex, function(index, item) {\n"
+ " if (ui.item.p == item.l) {\n"
+ " urlPrefix = item.m + slash;\n"
+ " }\n"
+ " });\n"
+ " return urlPrefix;\n"
+ " }\n"
+ " }\n"
+ " return urlPrefix;\n"
+ "}");
} }
void checkSingleIndexSearchTagDuplication() { void checkSingleIndexSearchTagDuplication() {