1.1 --- a/javascript2.generatestubs/readme.txt Wed May 04 09:38:38 2016 +0200
1.2 +++ b/javascript2.generatestubs/readme.txt Mon May 30 15:32:51 2016 +0200
1.3 @@ -1,3 +1,13 @@
1.4 +
1.5 +1, run scripts/download_stubs.sh
1.6 +2, change args in src/main/java/org/netbeans/jsstubsgenerator/JsStubsGenerator.java
1.7 +3, run jsStubsGenerator
1.8 +4, copy scripts/output/downloadMethodsAndProperties.sh to scripts folder and run it
1.9 +5, run again jsStubsGenerator
1.10 +
1.11 +
1.12 +
1.13 +
1.14 By doing any new changes in the JavaScript signature files generation you should be sure that you will not make any
1.15 regression. Since we don't want push all processed JavaScript stubs into the repository, one of the way how to watch
1.16 over generated documentation is:
2.1 --- a/javascript2.generatestubs/scripts/download_stubs.sh Wed May 04 09:38:38 2016 +0200
2.2 +++ b/javascript2.generatestubs/scripts/download_stubs.sh Mon May 30 15:32:51 2016 +0200
2.3 @@ -1,30 +1,97 @@
2.4 ##### Core JavaScript - into build
2.5 mkdir core
2.6 -cd core
2.7 -
2.8 -wget http://ecma-international.org/ecma-262/5.1/ -O core.html
2.9 +wget http://www.ecma-international.org/ecma-262/6.0/ -O core/core.html
2.10
2.11 ##### Core JavaScript - for UC
2.12 wget -r -m -k -K -Ddeveloper.mozilla.org --no-parent -e robots=off https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/
2.13 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/arguments/
2.14 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/arguments/arguments
2.15 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/
2.16 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/Array
2.17 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Boolean/
2.18 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Boolean -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Boolean/Boolean
2.19 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/
2.20 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/Date
2.21 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/
2.22 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Error
2.23 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/EvalError/
2.24 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/EvalError -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/EvalError/EvalError
2.25 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/
2.26 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Function
2.27 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/
2.28 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/JSON
2.29 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/
2.30 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/Math
2.31 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/
2.32 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/Number
2.33 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/
2.34 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/Object
2.35 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RangeError/
2.36 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RangeError -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RangeError/RangeError
2.37 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ReferenceError/
2.38 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ReferenceError -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ReferenceError/ReferenceError
2.39 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/
2.40 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/RegExp
2.41 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/
2.42 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/String
2.43 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/SyntaxError/
2.44 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/SyntaxError -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/SyntaxError/SyntaxError
2.45 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/TypeError/
2.46 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/TypeError -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/TypeError/TypeError
2.47 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/URIError/
2.48 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/URIError -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/URIError/URIError
2.49 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/
2.50 rm -rf developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty
2.51 wget -k https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty
2.52 +### new Global Objects ECMA 6
2.53 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ArrayBuffer/
2.54 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ArrayBuffer/ArrayBuffer
2.55 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/DataView/
2.56 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/DataView/DataView
2.57 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Generator/
2.58 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Generator/Generator
2.59 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/GeneratorFunction/
2.60 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/GeneratorFunction/GeneratorFunction
2.61 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Infinity/
2.62 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Infinity/Infinity
2.63 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Map/
2.64 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Map/Map
2.65 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/NaN/
2.66 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/NaN/NaN
2.67 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Promise/
2.68 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Promise/Promise
2.69 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Proxy/
2.70 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Proxy/Proxy
2.71 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Reflect/
2.72 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Reflect/Reflect
2.73 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Set/
2.74 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Set/Set
2.75 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/WeakSet/
2.76 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/WeakSet/WeakSet
2.77 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Symbol/
2.78 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Symbol/Symbol
2.79 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/WeakMap/
2.80 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/WeakMap/WeakMap
2.81 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Float32Array/
2.82 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Float32Array/Float32Array
2.83 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Float64Array/
2.84 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Float64Array/Float64Array
2.85 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Int8Array/
2.86 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Int8Array/Int8Array
2.87 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Int16Array/
2.88 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Int16Array/Int16Array
2.89 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Int32Array/
2.90 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Int32Array/Int32Array
2.91 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Uint8Array/
2.92 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Uint8Array/Uint8Array
2.93 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Uint16Array/
2.94 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Uint16Array/Uint16Array
2.95 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Uint32Array/
2.96 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Uint32Array/Uint32Array
2.97 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Uint8ClampedArray/
2.98 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Uint8ClampedArray/Uint8ClampedArray
2.99 +mkdir -p developer.mozilla.org/en/JavaScript/Reference/Global_Objects/undefined/
2.100 +wget -k https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined -O developer.mozilla.org/en/JavaScript/Reference/Global_Objects/undefined/undefined
2.101
2.102 wget -r -m -k -K -Ddeveloper.mozilla.org --no-parent -e robots=off https://developer.mozilla.org/en/JavaScript_typed_arrays/
2.103
2.104 @@ -61,7 +128,7 @@
2.105 wget http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html -O dom3-doc-Core.html
2.106
2.107 wget http://www.w3.org/TR/2008/REC-ElementTraversal-20081222/ -O dom3-doc-ElementTraversal.html
2.108 -
2.109 +cd ..
2.110 ##### Core JavaScript
2.111 mkdir others
2.112 wget -k https://developer.mozilla.org/en/xmlhttprequest -O others/xmlhttprequest
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/javascript2.generatestubs/scripts/sort.py Mon May 30 15:32:51 2016 +0200
3.3 @@ -0,0 +1,32 @@
3.4 +#!/usr/bin/python
3.5 +import os
3.6 +
3.7 +for file in os.listdir("."):
3.8 + if file.endswith(".js") and file.find("sort") == -1:
3.9 + with open(file) as fin:
3.10 + fout = open("sort_" + file , "w")
3.11 + start = False
3.12 + ecma6 = False
3.13 + mydict = {};
3.14 + commentBuffer = "";
3.15 + for line in fin:
3.16 + if not start:
3.17 + fout.write(line)
3.18 + if line.strip() == "":
3.19 + continue
3.20 + if start and line.find("*") > -1 :
3.21 + if line.find("ECMAScript6") > -1 :
3.22 + ecma6 = True
3.23 + commentBuffer += line
3.24 + elif start:
3.25 + if ecma6:
3.26 + mydict["ZZZZZZ" + line] = commentBuffer + line
3.27 + else:
3.28 + mydict[line] = commentBuffer + line
3.29 + commentBuffer = ""
3.30 + ecma6 = False
3.31 + if line.strip() == "}":
3.32 + start = True
3.33 + for key in sorted(mydict):
3.34 + fout.write(mydict[key])
3.35 + fout.close()
4.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/JsStubsGenerator.java Wed May 04 09:38:38 2016 +0200
4.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/JsStubsGenerator.java Mon May 30 15:32:51 2016 +0200
4.3 @@ -1,5 +1,6 @@
4.4 package org.netbeans.jsstubsgenerator;
4.5
4.6 +import java.io.BufferedWriter;
4.7 import java.io.File;
4.8 import java.io.FileWriter;
4.9 import java.io.FilenameFilter;
4.10 @@ -57,12 +58,13 @@
4.11 private static File ecmaInput;
4.12 private static File w3cInput;
4.13 private static File output;
4.14 + private static File outputDownloadScript;
4.15 private static Map<String, StubObject> allStubs = new HashMap<String, StubObject>();
4.16
4.17 public static void main(String[] args) {
4.18 args = new String[3];
4.19 - args[0] = "/home/marfous/Work/NetBeans/Javascript2/jsstubs2";
4.20 - args[1] = "/home/marfous/Work/NetBeans/Javascript2/jsstubs2/allstubs";
4.21 + args[0] = "/home/mito/nb/misc/javascript2.generatestubs/scripts/";
4.22 + args[1] = "/home/mito/nb/misc/javascript2.generatestubs/scripts/output";
4.23
4.24 if (args.length < 2) {
4.25 LOGGER.log(Level.SEVERE, "Usage: {0} <inputdir> <outputdir>", JsStubsGenerator.class.getName());
4.26 @@ -103,6 +105,11 @@
4.27 LOGGER.log(Level.WARNING, "Is this a valid input directory? See the javadoc header for\ninstructions on how to generate it.\n");
4.28 System.exit(2);
4.29 }
4.30 +
4.31 + outputDownloadScript = new File(args[1], "downloadMethodsAndProperties.sh");
4.32 + if (outputDownloadScript.exists()) {
4.33 + outputDownloadScript.delete();
4.34 + }
4.35
4.36 output = new File(args[1]);
4.37 if (output.exists() && output.isFile()) {
4.38 @@ -115,7 +122,7 @@
4.39 // the order of the generator calls is important since in case of docs pruning we must have place where to prune
4.40 try {
4.41 // JavaScript core APIs - from MDN
4.42 - allStubs.putAll(MdnGenerator.parseCoreDocs(mdnInput));
4.43 + allStubs.putAll(MdnGenerator.parseCoreDocs(mdnInput, new BufferedWriter(new FileWriter(outputDownloadScript))));
4.44
4.45 // should it create full or pruned doc
4.46 if (!GENERATE_FULL) {
5.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/ecma/EcmaCoreGenerator.java Wed May 04 09:38:38 2016 +0200
5.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/ecma/EcmaCoreGenerator.java Mon May 30 15:32:51 2016 +0200
5.3 @@ -54,7 +54,7 @@
5.4 }
5.5
5.6 // complete missing attributes like escape, unescape - issue #215917
5.7 - for (Element element : getAllEcmaObjects(doc, new String[]{"B.2.", "15.1."})) {
5.8 + for (Element element : getAllEcmaObjects(doc, new String[]{"additional-properties-of-the-global-object", "function-properties-of-the-global-object"})) {
5.9 String elementName = element.ownText().indexOf(" ") > 0 ? element.ownText().substring(0, element.ownText().indexOf(" ")) : element.ownText();
5.10 if (!ecmaStubs.containsKey(elementName)) {
5.11 if (isEcmaMethod(element.ownText())) {
5.12 @@ -131,7 +131,7 @@
5.13 }
5.14
5.15 private static Elements getEcmaObjectOfSection(Document doc, String section) {
5.16 - return doc.select("section[id^=sec-" + section + "] > h1");
5.17 + return doc.select("section[id^=sec-" + section + "] h1");
5.18 }
5.19
5.20 private static void updateSyntax(StubObject attr, Element element) {
5.21 @@ -178,14 +178,15 @@
5.22 }
5.23
5.24 private static boolean isDefinedInGlobalScope(Document doc, String name) {
5.25 - Elements section15ElementHeaders = doc.select("section[id^=sec-15.1.] > h1");
5.26 - for (Element header : section15ElementHeaders) {
5.27 - String headerText = header.ownText();
5.28 - // chapter headers
5.29 - if (headerText.split("[ ]").length >= 2 && !headerText.contains("(")) {
5.30 - continue;
5.31 - } else {
5.32 - // check for name (ignore brackets, etc.)
5.33 + String[] sections = new String[]{"global-object", "generatorfunction-objects", "generator-objects", "arguments-exotic-objects"};
5.34 + for (String sectionName : sections) {
5.35 + Elements section15ElementHeaders = doc.select("section[id=sec-" + sectionName + "] h1");
5.36 + for (Element header : section15ElementHeaders) {
5.37 + String headerText = header.ownText();
5.38 + // chapter headers
5.39 + if (headerText.split("[ ]").length >= 2 && !headerText.contains("(")) {
5.40 + continue;
5.41 + } else // check for name (ignore brackets, etc.)
5.42 if (headerText.contains(name)) {
5.43 return true;
5.44 }
6.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/mdn/MdnGenerator.java Wed May 04 09:38:38 2016 +0200
6.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/mdn/MdnGenerator.java Mon May 30 15:32:51 2016 +0200
6.3 @@ -3,6 +3,7 @@
6.4 import java.io.File;
6.5 import java.io.FilenameFilter;
6.6 import java.io.IOException;
6.7 +import java.io.Writer;
6.8 import java.util.HashMap;
6.9 import java.util.LinkedList;
6.10 import java.util.List;
6.11 @@ -27,14 +28,14 @@
6.12 private static final String JS_CORE_DIR = "JavaScript/Reference/Global_Objects";
6.13 private static final String JS_DOM_DIR = "DOM";
6.14
6.15 - public static Map<String, StubObject> parseCoreDocs(File inputDir) throws IOException {
6.16 + public static Map<String, StubObject> parseCoreDocs(File inputDir, Writer outputDownloadScript) throws IOException {
6.17 Map<String, StubObject> stubs = new HashMap<String, StubObject>();
6.18 File dirWithCoreStubs = new File(inputDir, JS_CORE_DIR);
6.19 if (!dirWithCoreStubs.exists()) {
6.20 LOGGER.log(Level.WARNING, "Dir with core docs {0} doesn''t exist!", dirWithCoreStubs.getPath());
6.21 }
6.22
6.23 - loadCoreStubs(dirWithCoreStubs, stubs);
6.24 + loadCoreStubs(dirWithCoreStubs, stubs, outputDownloadScript);
6.25 enhanceReturnTypes(stubs);
6.26 return stubs;
6.27 }
6.28 @@ -51,7 +52,205 @@
6.29 return stubs;
6.30 }
6.31
6.32 - private static void attachSummary(StubObject stubObject, File summaryFile, boolean object) throws IOException {
6.33 + private static void attachSummary2016(StubObject stubObject, File summaryFile, boolean object, Writer outputDownloadScript) throws IOException {
6.34 + Document summaryDoc = Jsoup.parse(summaryFile, "UTF-8");
6.35 + Element article = summaryDoc.select("div[id=quick-links]").first();
6.36 +
6.37 + for (Element li : article.select("ol").first().children()) {
6.38 + if (!li.select("a").isEmpty()) {
6.39 + if ("Properties".equals(li.select("a").first().text())) {
6.40 + List<String> properties = getAttributes(li, summaryFile.getPath(), outputDownloadScript);
6.41 + outputDownloadScript.flush();
6.42 + stubObject.putProperties(properties);
6.43 + } else if ("Methods".equals(li.select("a").first().text())) {
6.44 + List<String> methods = getAttributes(li, summaryFile.getPath(), outputDownloadScript);
6.45 + outputDownloadScript.flush();
6.46 + stubObject.putMethods(methods);
6.47 + }
6.48 + } else if ("Inheritance:".equals(li.text())) {
6.49 + break;
6.50 + }
6.51 + }
6.52 +
6.53 + extractSyntaxParameters(summaryDoc, stubObject);
6.54 +
6.55 + String path = summaryFile.getPath().substring(0, summaryFile.getPath().lastIndexOf("/") + 1);
6.56 + for (String key : stubObject.getAttributes().keySet()) {
6.57 + StubObject methodOrProp = stubObject.getAttributes().get(key);
6.58 + File methodOrPropFile = new File(path + methodOrProp.getName().toLowerCase());
6.59 + if (methodOrPropFile.exists()) {
6.60 + attachSummaryForMethodsAndProperties(methodOrProp, methodOrPropFile, false, outputDownloadScript);
6.61 + }
6.62 + }
6.63 +
6.64 + }
6.65 +
6.66 +
6.67 + private static void attachSummaryForMethodsAndProperties(StubObject stubObject, File summaryFile, boolean object, Writer outputDownloadScript) throws IOException {
6.68 + Document summaryDoc = Jsoup.parse(summaryFile, "UTF-8");
6.69 + if ((!summaryDoc.select("div.nonStandardHeader").isEmpty()
6.70 + || (!summaryDoc.select("div.warning").isEmpty() && summaryDoc.select("div.warning").get(0).text().startsWith("Warning"))
6.71 + || !summaryDoc.select("div.experimental").isEmpty())) {
6.72 + stubObject.setNonStandard(true);
6.73 + }
6.74 + if (!summaryDoc.select("div.deprecatedHeader").isEmpty()) {
6.75 + stubObject.setDeprecated(true);
6.76 + }
6.77 +
6.78 + extractSyntaxParameters(summaryDoc, stubObject);
6.79 + }
6.80 +
6.81 + private static void extractSyntaxParameters(Document summaryDoc, StubObject stubObject) {
6.82 + Element article = summaryDoc.select("article[id=wikiArticle]").first();
6.83 + for (Element header : article.select("h2")) {
6.84 + if ("Syntax".equals(header.text())) {
6.85 + String syntax = header.nextElementSibling().html();
6.86 + Element nextSibling = header.nextElementSibling();
6.87 + while (nextSibling != null && !"h2".equals(nextSibling.nodeName()) && !"h3".equals(nextSibling.nodeName())) {
6.88 + if (!nextSibling.select("pre.syntaxbox").isEmpty()) {
6.89 + syntax = nextSibling.select("pre.syntaxbox").first().html();
6.90 + break;
6.91 + }
6.92 + nextSibling = nextSibling.nextElementSibling();
6.93 + }
6.94 +
6.95 + syntax = syntax.replace(";", "");
6.96 + syntax = syntax.replaceAll("/\\*[^\\*]+\\*/", "");
6.97 + syntax = syntax.replace("<br>", "NNNNN");
6.98 + syntax = syntax.replace("<br/>", "NNNNN");
6.99 + syntax = syntax.replace("<br >", "NNNNN");
6.100 + syntax = syntax.replace("<br />", "NNNNN");
6.101 + syntax = Jsoup.parse(syntax).text().trim();
6.102 + syntax = syntax.replace("NNNNN", "<br>");
6.103 + if ("Promise".equals(stubObject.getName())) {
6.104 + stubObject.setSyntax("new Promise(executor)");
6.105 + } else {
6.106 + stubObject.setSyntax(syntax);
6.107 + }
6.108 + } else if ("Specifications".equals(header.text())) {
6.109 + Element nextSibling = header.nextElementSibling();
6.110 + while (!"h2".equals(nextSibling.nodeName())) {
6.111 + if (!nextSibling.select("td").isEmpty()) {
6.112 + if (nextSibling.select("td").first().html().contains("6th Edition") || nextSibling.select("td").first().html().contains("ECMAScript 2016")) {
6.113 + stubObject.addSince("ECMAScript6");
6.114 + }
6.115 + break;
6.116 + }
6.117 + nextSibling = nextSibling.nextElementSibling();
6.118 + }
6.119 + } else if ("Parameters".equals(header.text())) {
6.120 + Element nextSibling = header.nextElementSibling();
6.121 + while (!"h2".equals(nextSibling.nodeName()) && !"h3".equals(nextSibling.nodeName())) {
6.122 + if (!nextSibling.select("dt").isEmpty()) {
6.123 + extractParameters(nextSibling, stubObject);
6.124 + break;
6.125 + }
6.126 + nextSibling = nextSibling.nextElementSibling();
6.127 + }
6.128 + }
6.129 + }
6.130 + for (Element header : article.select("h3")) {
6.131 + if ("Parameters".equals(header.text())) {
6.132 + Element nextSibling = header.nextElementSibling();
6.133 + while (!"h2".equals(nextSibling.nodeName()) && !"h3".equals(nextSibling.nodeName())) {
6.134 + if (!nextSibling.select("dt").isEmpty()) {
6.135 + extractParameters(nextSibling, stubObject);
6.136 + break;
6.137 + }
6.138 + nextSibling = nextSibling.nextElementSibling();
6.139 + }
6.140 + }
6.141 + }
6.142 + }
6.143 +
6.144 + private static void extractParameters(Element element, StubObject stubObject) {
6.145 + Element listOfParams = element.select("dl").first();
6.146 + for (Element dt : listOfParams.children()) {
6.147 + if (!"dt".equals(dt.nodeName())) {
6.148 + continue;
6.149 + }
6.150 + if (dt.children().size() > 0 && "h3".equals(dt.child(0).nodeName())) {
6.151 + break;
6.152 + }
6.153 +
6.154 + String name = dt.select("code").text().trim().replace("Â ", "");
6.155 + if (name.isEmpty()) {
6.156 + name = dt.text().trim().replace("Â ", "");
6.157 + }
6.158 + if (name.contains(",")) {
6.159 + continue;
6.160 + }
6.161 + if (!dt.select("i.icon-warning-sign").isEmpty()) {
6.162 + LOGGER.warning(stubObject.getName() + ":" + name + " is probably obsolete");
6.163 + stubObject.setSyntax(stubObject.getSyntax().replace(name, ""));
6.164 + continue;
6.165 + }
6.166 + String description = dt.nextElementSibling() == null ? "" : dt.nextElementSibling().text();
6.167 + if (stubObject.getName().equals("Reduce")) {
6.168 + if (!"callback".equals(name) && !"initialValue".equals(name)) {
6.169 + continue;
6.170 + }
6.171 + } else if (stubObject.getName().equals("test") || stubObject.getName().equals("exec")) {
6.172 + if ("regexp".equals(name)) {
6.173 + continue;
6.174 + }
6.175 + } else if (stubObject.getName().equals("pow")) {
6.176 + if ("exponents".equals(name)) {
6.177 + name = "exponent";
6.178 + }
6.179 + } else if (stubObject.getName().equals("atan2")) {
6.180 + if ("y, x".equals(name)) {
6.181 + stubObject.addParameter(new Parameter(
6.182 + "y",
6.183 + ReturnType.guessReturns(stubObject.getName(), name, description),
6.184 + description));
6.185 + stubObject.addParameter(new Parameter(
6.186 + "x",
6.187 + ReturnType.guessReturns(stubObject.getName(), name, description),
6.188 + description));
6.189 + continue;
6.190 + }
6.191 + }
6.192 + stubObject.addParameter(new Parameter(
6.193 + name,
6.194 + ReturnType.guessReturns(stubObject.getName(), name, description),
6.195 + description));
6.196 + }
6.197 + }
6.198 +
6.199 + private static List<String> getAttributes(Element div, String summaryFilePath, Writer outputDownloadScript) {
6.200 + List<String> attributes = new LinkedList<String>();
6.201 + if (div == null) {
6.202 + return attributes;
6.203 + }
6.204 +
6.205 + Elements elements = div.select("ol > li > a");
6.206 +
6.207 + for (Element element : elements) {
6.208 + String attr = element.text();
6.209 + if (element.nextElementSibling() != null && !element.nextElementSibling().select("i.icon-warning-sign").isEmpty()) {
6.210 + continue;
6.211 + }
6.212 + if (element.parent().hasClass("obsoleteElement")) {
6.213 + continue;
6.214 + }
6.215 + if (!attr.contains(" ") && !attr.contains("?") && !attr.contains("@@") && !attr.contains("$")) {
6.216 + // more words - it doesn't appear to be valid attribute
6.217 + String href = element.attr("href");
6.218 + String path = summaryFilePath.substring(summaryFilePath.indexOf("developer.mozilla.org"), summaryFilePath.lastIndexOf("/")) + href.substring(href.lastIndexOf("/")).toLowerCase();
6.219 + try {
6.220 + outputDownloadScript.write("wget -k " + href + " -O " + path + "\n");
6.221 + } catch (IOException ex) {
6.222 + Logger.getLogger(MdnGenerator.class.getName()).log(Level.SEVERE, null, ex);
6.223 + }
6.224 + attributes.add(attr);
6.225 + }
6.226 + }
6.227 +
6.228 + return attributes;
6.229 + }
6.230 +
6.231 + private static void attachSummary2012(StubObject stubObject, File summaryFile, boolean object) throws IOException {
6.232 Document summaryDoc = Jsoup.parse(summaryFile, "UTF-8");
6.233 if (summaryDoc.select("h1").text().contains("__")) {
6.234 stubObject.setUnderscored(true);
6.235 @@ -255,7 +454,7 @@
6.236 }
6.237 }
6.238
6.239 - private static void loadCoreStubs(File dirWithCoreStubs, Map<String, StubObject> allStubs) throws IOException {
6.240 + private static void loadCoreStubs(File dirWithCoreStubs, Map<String, StubObject> allStubs, Writer outDownloadScript) throws IOException {
6.241 for (File docFile : dirWithCoreStubs.listFiles(CORE_FILE_FILTER)) {
6.242 // get stub name from the file name
6.243 String className = docFile.getName();
6.244 @@ -272,24 +471,28 @@
6.245 if (!summaryFile.exists()) {
6.246 LOGGER.log(Level.WARNING, "Summary for stup does not exist: ", summaryFile.getPath());
6.247 } else {
6.248 - attachSummary(stubObject, summaryFile, true);
6.249 + attachSummary2016(stubObject, summaryFile, true, outDownloadScript);
6.250 }
6.251
6.252 +
6.253 // parse all properties, methods, ...
6.254 + /*
6.255 for (File attrFile : docFile.listFiles(CORE_FILE_FILTER)) {
6.256 String attrName = attrFile.getName();
6.257 StubObject attrObject = new StubObject(Origin.CORE, attrName, className);
6.258 - attachSummary(attrObject, attrFile, false);
6.259 + attachSummary2012(attrObject, attrFile, false);
6.260
6.261 stubObject.assignAttribute(attrName, attrObject);
6.262 }
6.263 + */
6.264 // assign appropriate type
6.265 for (Map.Entry<String, StubObject> entry : stubObject.getAttributes().entrySet()) {
6.266 StubObject attribute = entry.getValue();
6.267 attribute.setType(attribute.getType());
6.268 }
6.269 +
6.270 } else {
6.271 - attachSummary(stubObject, docFile, false);
6.272 + attachSummary2012(stubObject, docFile, false);
6.273 }
6.274
6.275 allStubs.put(className, stubObject);
6.276 @@ -324,7 +527,7 @@
6.277 parentStub = new StubObject(Origin.DOM, parentElementName, StubObject.GLOBAL);
6.278 // parentStub.setPrune(true);
6.279 if (summaryFile.exists()) {
6.280 - attachSummary(parentStub, summaryFile, true);
6.281 + attachSummary2012(parentStub, summaryFile, true);
6.282 }
6.283 }
6.284
7.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/mdn/ReturnType.java Wed May 04 09:38:38 2016 +0200
7.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/mdn/ReturnType.java Mon May 30 15:32:51 2016 +0200
7.3 @@ -6,7 +6,6 @@
7.4
7.5 import java.util.Arrays;
7.6 import java.util.HashMap;
7.7 -import java.util.LinkedList;
7.8 import java.util.List;
7.9 import java.util.Map;
7.10
7.11 @@ -61,12 +60,16 @@
7.12 new ReturnHolder("Uint8ClampedArray", "Array"),
7.13 new ReturnHolder("undefined", "undefined"),
7.14 new ReturnHolder("uneval", "Number"),
7.15 - new ReturnHolder("URIError", "Error"),};
7.16 + new ReturnHolder("URIError", "Error"),
7.17 + };
7.18 RETURN_TYPES.put("global", Arrays.asList(globalHolders));
7.19 ReturnHolder[] EvalErrorHolders = new ReturnHolder[]{
7.20 new ReturnHolder("name", "String"),
7.21 new ReturnHolder("prototype", "Object"),
7.22 - new ReturnHolder("constructor", "Function"),};
7.23 + new ReturnHolder("constructor", "Function"),
7.24 + new ReturnHolder("message", "String"),
7.25 + new ReturnHolder("toString", "String"),
7.26 + };
7.27 RETURN_TYPES.put("EvalError", Arrays.asList(EvalErrorHolders));
7.28 ReturnHolder[] MathHolders = new ReturnHolder[]{
7.29 new ReturnHolder("toSource", "String"),
7.30 @@ -95,7 +98,28 @@
7.31 new ReturnHolder("sin", "Number"),
7.32 new ReturnHolder("tan", "Number"),
7.33 new ReturnHolder("LOG10E", "Number"),
7.34 - new ReturnHolder("LOG2E", "Number"),};
7.35 + new ReturnHolder("LOG2E", "Number"),
7.36 + new ReturnHolder("acosh", "Number"),
7.37 + new ReturnHolder("asinh", "Number"),
7.38 + new ReturnHolder("atanh", "Number"),
7.39 + new ReturnHolder("cbrt", "Number"),
7.40 + new ReturnHolder("clz32", "Number"),
7.41 + new ReturnHolder("cosh", "Number"),
7.42 + new ReturnHolder("tan", "Number"),
7.43 + new ReturnHolder("expm1", "Number"),
7.44 + new ReturnHolder("fround", "Number"),
7.45 + new ReturnHolder("SQRT2", "Number"),
7.46 + new ReturnHolder("hypot", "Number"),
7.47 + new ReturnHolder("imul", "Number"),
7.48 + new ReturnHolder("log10", "Number"),
7.49 + new ReturnHolder("log1p", "Number"),
7.50 + new ReturnHolder("log2", "Number"),
7.51 + new ReturnHolder("sign", "Number"),
7.52 + new ReturnHolder("sinh", "Number"),
7.53 + new ReturnHolder("tanh", "Number"),
7.54 + new ReturnHolder("trunc", "Number"),
7.55 + };
7.56 +
7.57 RETURN_TYPES.put("Math", Arrays.asList(MathHolders));
7.58 ReturnHolder[] ArrayHolders = new ReturnHolder[]{
7.59 new ReturnHolder("splice", "Array"),
7.60 @@ -122,7 +146,20 @@
7.61 new ReturnHolder("isArray", "Boolean"),
7.62 new ReturnHolder("some", "Boolean"),
7.63 new ReturnHolder("shift", "Object"),
7.64 - new ReturnHolder("filter", "Array"),};
7.65 + new ReturnHolder("filter", "Array"),
7.66 + new ReturnHolder("from", "Array"),
7.67 + new ReturnHolder("of", "Array"),
7.68 + new ReturnHolder("copyWithin", "undefined"),
7.69 + new ReturnHolder("fill", "undefined"),
7.70 + new ReturnHolder("find", "Object"),
7.71 + new ReturnHolder("findIndex", "Number"),
7.72 + new ReturnHolder("keys", "Array"),
7.73 + new ReturnHolder("values", "Array"),
7.74 + new ReturnHolder("includes", "Boolean"),
7.75 + new ReturnHolder("entries", "Array"),
7.76 + new ReturnHolder("toLocaleString", "String"),
7.77 +
7.78 + };
7.79 RETURN_TYPES.put("Array", Arrays.asList(ArrayHolders));
7.80 ReturnHolder[] RegExpHolders = new ReturnHolder[]{
7.81 new ReturnHolder("lastIndex", "Number"),
7.82 @@ -136,7 +173,10 @@
7.83 new ReturnHolder("exec", "Array"),
7.84 new ReturnHolder("ignoreCase", "Boolean"),
7.85 new ReturnHolder("prototype", "Object"),
7.86 - new ReturnHolder("constructor", "Function"),};
7.87 + new ReturnHolder("constructor", "Function"),
7.88 + new ReturnHolder("flags", "String"),
7.89 + new ReturnHolder("unicode", "Boolean"),
7.90 + };
7.91 RETURN_TYPES.put("RegExp", Arrays.asList(RegExpHolders));
7.92 ReturnHolder[] DateHolders = new ReturnHolder[]{
7.93 new ReturnHolder("toLocaleDateString", "String"),
7.94 @@ -196,7 +236,10 @@
7.95 ReturnHolder[] URIErrorHolders = new ReturnHolder[]{
7.96 new ReturnHolder("name", "String"),
7.97 new ReturnHolder("prototype", "Object"),
7.98 - new ReturnHolder("constructor", "Function"),};
7.99 + new ReturnHolder("message", "String"),
7.100 + new ReturnHolder("constructor", "Function"),
7.101 + new ReturnHolder("toString", "String"),
7.102 + };
7.103 RETURN_TYPES.put("URIError", Arrays.asList(URIErrorHolders));
7.104 ReturnHolder[] ObjectHolders = new ReturnHolder[]{
7.105 new ReturnHolder("isPrototypeOf", "Boolean"),
7.106 @@ -223,17 +266,27 @@
7.107 new ReturnHolder("freeze", "Object"),
7.108 new ReturnHolder("preventExtensions", "Object"),
7.109 new ReturnHolder("toString", "String"),
7.110 - new ReturnHolder("defineProperty", "Object"),};
7.111 + new ReturnHolder("defineProperty", "Object"),
7.112 + new ReturnHolder("assign", "Object"),
7.113 + new ReturnHolder("getOwnPropertySymbols", "Array"),
7.114 + new ReturnHolder("is", "Boolean"),
7.115 + };
7.116 RETURN_TYPES.put("Object", Arrays.asList(ObjectHolders));
7.117 ReturnHolder[] ReferenceErrorHolders = new ReturnHolder[]{
7.118 new ReturnHolder("name", "String"),
7.119 new ReturnHolder("prototype", "Object"),
7.120 - new ReturnHolder("constructor", "Function"),};
7.121 + new ReturnHolder("constructor", "Function"),
7.122 + new ReturnHolder("message", "String"),
7.123 + new ReturnHolder("toString", "String"),
7.124 + };
7.125 RETURN_TYPES.put("ReferenceError", Arrays.asList(ReferenceErrorHolders));
7.126 ReturnHolder[] RangeErrorHolders = new ReturnHolder[]{
7.127 new ReturnHolder("name", "String"),
7.128 new ReturnHolder("prototype", "Object"),
7.129 - new ReturnHolder("constructor", "Function"),};
7.130 + new ReturnHolder("constructor", "Function"),
7.131 + new ReturnHolder("message", "String"),
7.132 + new ReturnHolder("toString", "String"),
7.133 + };
7.134 RETURN_TYPES.put("RangeError", Arrays.asList(RangeErrorHolders));
7.135 ReturnHolder[] JSONHolders = new ReturnHolder[]{
7.136 new ReturnHolder("stringify", "String"),
7.137 @@ -253,7 +306,17 @@
7.138 new ReturnHolder("toExponential", "Number"),
7.139 new ReturnHolder("MIN_VALUE", "Number"),
7.140 new ReturnHolder("POSITIVE_INFINITY", "String"),
7.141 - new ReturnHolder("constructor", "Function"),};
7.142 + new ReturnHolder("constructor", "Function"),
7.143 + new ReturnHolder("EPSILON", "Number"),
7.144 + new ReturnHolder("MAX_SAFE_INTEGER", "Number"),
7.145 + new ReturnHolder("MIN_SAFE_INTEGER", "Number"),
7.146 + new ReturnHolder("isFinite", "Boolean"),
7.147 + new ReturnHolder("isInteger", "Boolean"),
7.148 + new ReturnHolder("isNaN", "Boolean"),
7.149 + new ReturnHolder("isSafeInteger", "Boolean"),
7.150 + new ReturnHolder("parseFloat", "Number"),
7.151 + new ReturnHolder("parseInt", "Number"),
7.152 + };
7.153 RETURN_TYPES.put("Number", Arrays.asList(NumberHolders));
7.154 ReturnHolder[] FunctionHolders = new ReturnHolder[]{
7.155 new ReturnHolder("caller", "String"),
7.156 @@ -273,7 +336,10 @@
7.157 ReturnHolder[] SyntaxErrorHolders = new ReturnHolder[]{
7.158 new ReturnHolder("name", "String"),
7.159 new ReturnHolder("prototype", "Object"),
7.160 - new ReturnHolder("constructor", "Function"),};
7.161 + new ReturnHolder("constructor", "Function"),
7.162 + new ReturnHolder("message", "String"),
7.163 + new ReturnHolder("toString", "String"),
7.164 + };
7.165 RETURN_TYPES.put("SyntaxError", Arrays.asList(SyntaxErrorHolders));
7.166 ReturnHolder[] BooleanHolders = new ReturnHolder[]{
7.167 new ReturnHolder("toSource", "String"),
7.168 @@ -297,8 +363,11 @@
7.169 RETURN_TYPES.put("Error", Arrays.asList(ErrorHolders));
7.170 ReturnHolder[] TypeErrorHolders = new ReturnHolder[]{
7.171 new ReturnHolder("name", "String"),
7.172 + new ReturnHolder("message", "String"),
7.173 new ReturnHolder("prototype", "Object"),
7.174 - new ReturnHolder("constructor", "Function"),};
7.175 + new ReturnHolder("constructor", "Function"),
7.176 + new ReturnHolder("toString", "String"),
7.177 + };
7.178 RETURN_TYPES.put("TypeError", Arrays.asList(TypeErrorHolders));
7.179 ReturnHolder[] StringHolders = new ReturnHolder[]{
7.180 new ReturnHolder("toSource", "String"),
7.181 @@ -341,8 +410,226 @@
7.182 new ReturnHolder("match", "Array"),
7.183 new ReturnHolder("big", "String"),
7.184 new ReturnHolder("small", "String"),
7.185 - new ReturnHolder("fontsize", "Number"),};
7.186 + new ReturnHolder("fontsize", "Number"),
7.187 + new ReturnHolder("raw", "String"),
7.188 + new ReturnHolder("startsWith", "Boolean"),
7.189 + new ReturnHolder("repeat", "String"),
7.190 + new ReturnHolder("normalize", "String"),
7.191 + new ReturnHolder("link", "String"),
7.192 + new ReturnHolder("includes", "Boolean"),
7.193 + new ReturnHolder("endsWith", "Boolean"),
7.194 + new ReturnHolder("codePointAt", "Number"),
7.195 + new ReturnHolder("fromCodePoint", "String"),
7.196 + };
7.197 RETURN_TYPES.put("String", Arrays.asList(StringHolders));
7.198 +
7.199 + ReturnHolder[] ArrayBuffer = new ReturnHolder[]{
7.200 + new ReturnHolder("byteLength", "Number"),
7.201 + new ReturnHolder("slice", "Object"),
7.202 + new ReturnHolder("isView", "Boolean"),};
7.203 + RETURN_TYPES.put("ArrayBuffer", Arrays.asList(ArrayBuffer));
7.204 +
7.205 + ReturnHolder[] DataView = new ReturnHolder[]{
7.206 + new ReturnHolder("getUint8", "Number"),
7.207 + new ReturnHolder("setInt32", "undefined"),
7.208 + new ReturnHolder("getFloat32", "Number"),
7.209 + new ReturnHolder("getUint16", "Number"),
7.210 + new ReturnHolder("setFloat32", "undefined"),
7.211 + new ReturnHolder("getFloat64", "Number"),
7.212 + new ReturnHolder("getInt8", "Number"),
7.213 + new ReturnHolder("setInt16", "undefined"),
7.214 + new ReturnHolder("setInt8", "undefined"),
7.215 + new ReturnHolder("byteOffset", "Number"),
7.216 + new ReturnHolder("getInt32", "Number"),
7.217 + new ReturnHolder("setFloat64", "undefined"),
7.218 + new ReturnHolder("getInt16", "Number"),
7.219 + new ReturnHolder("setUint8", "undefined"),
7.220 + new ReturnHolder("getUint32", "Number"),
7.221 + new ReturnHolder("setUint32", "undefined"),
7.222 + new ReturnHolder("setUint16", "undefined"),
7.223 + new ReturnHolder("buffer", "Object"),
7.224 + new ReturnHolder("byteLength", "Number"),
7.225 + };
7.226 + RETURN_TYPES.put("DataView", Arrays.asList(DataView));
7.227 +
7.228 + ReturnHolder[] Infinity = new ReturnHolder[]{};
7.229 + RETURN_TYPES.put("Infinity", Arrays.asList(Infinity));
7.230 +
7.231 + ReturnHolder[] Map = new ReturnHolder[]{
7.232 + new ReturnHolder("size", "Number"),
7.233 + new ReturnHolder("entries", "Array"),
7.234 + new ReturnHolder("values", "Array"),
7.235 + new ReturnHolder("forEach", "undefined"),
7.236 + new ReturnHolder("get", "Object"),
7.237 + new ReturnHolder("keys", "Array"),
7.238 + new ReturnHolder("delete", "Boolean"),
7.239 + new ReturnHolder("set", "Object"),
7.240 + new ReturnHolder("has", "Boolean"),
7.241 + new ReturnHolder("clear", "undefined"),
7.242 + };
7.243 + RETURN_TYPES.put("Map", Arrays.asList(Map));
7.244 +
7.245 + ReturnHolder[] NaN = new ReturnHolder[]{};
7.246 + RETURN_TYPES.put("NaN", Arrays.asList(NaN));
7.247 +
7.248 + ReturnHolder[] Promise = new ReturnHolder[]{
7.249 + new ReturnHolder("then", "Promise"),
7.250 + new ReturnHolder("resolve", "Promise"),
7.251 + new ReturnHolder("race", "Promise"),
7.252 + new ReturnHolder("reject", "Promise"),
7.253 + new ReturnHolder("catch", "Promise"),
7.254 + new ReturnHolder("all", "Promise"),
7.255 + };
7.256 + RETURN_TYPES.put("Promise", Arrays.asList(Promise));
7.257 +
7.258 + ReturnHolder[] Proxy = new ReturnHolder[]{
7.259 + new ReturnHolder("defineProperty", "Boolean"),
7.260 + new ReturnHolder("set", "Boolean"),
7.261 + new ReturnHolder("preventExtensions", "Boolean"),
7.262 + new ReturnHolder("deleteProperty", "Boolean"),
7.263 + new ReturnHolder("get", "Object"),
7.264 + new ReturnHolder("construct", "Object"),
7.265 + new ReturnHolder("getOwnPropertyDescriptor", "Object"),
7.266 + new ReturnHolder("apply", "Object"),
7.267 + new ReturnHolder("setPrototypeOf", "Boolean"),
7.268 + new ReturnHolder("has", "Boolean"),
7.269 + new ReturnHolder("ownKeys", "Array"),
7.270 + new ReturnHolder("getPrototypeOf", "Object"),
7.271 + new ReturnHolder("isExtensible", "Boolean"),
7.272 + };
7.273 + RETURN_TYPES.put("Proxy", Arrays.asList(Proxy));
7.274 +
7.275 + ReturnHolder[] Reflect = new ReturnHolder[]{
7.276 + new ReturnHolder("getOwnPropertyDescriptor", "Object"),
7.277 + new ReturnHolder("set", "Boolean"),
7.278 + new ReturnHolder("getPrototypeOf", "Boolean"),
7.279 + new ReturnHolder("isExtensible", "Boolean"),
7.280 + new ReturnHolder("setPrototypeOf", "Boolean"),
7.281 + new ReturnHolder("construct", "Boolean"),
7.282 + new ReturnHolder("get", "Object"),
7.283 + new ReturnHolder("preventExtensions", "Boolean"),
7.284 + new ReturnHolder("deleteProperty", "Boolean"),
7.285 + new ReturnHolder("defineProperty", "Boolean"),
7.286 + new ReturnHolder("ownKeys", "Array"),
7.287 + new ReturnHolder("has", "Boolean"),
7.288 + new ReturnHolder("apply", "undefined"),
7.289 + };
7.290 + RETURN_TYPES.put("Reflect", Arrays.asList(Reflect));
7.291 +
7.292 + ReturnHolder[] Set = new ReturnHolder[]{
7.293 + new ReturnHolder("size", "Number"),
7.294 + new ReturnHolder("has", "Boolean"),
7.295 + new ReturnHolder("forEach", "undefined"),
7.296 + new ReturnHolder("clear", "undefined"),
7.297 + new ReturnHolder("add", "Object"),
7.298 + new ReturnHolder("entries", "Array"),
7.299 + new ReturnHolder("values", "Array"),
7.300 + new ReturnHolder("delete", "Boolean"),
7.301 + };
7.302 + RETURN_TYPES.put("Set", Arrays.asList(Set));
7.303 +
7.304 + ReturnHolder[] Symbol = new ReturnHolder[]{
7.305 + new ReturnHolder("for", "Symbol"),
7.306 + new ReturnHolder("toString", "String"),
7.307 + new ReturnHolder("search", "Number"),
7.308 + new ReturnHolder("toPrimitive", "undefined"),
7.309 + new ReturnHolder("split", "Array"),
7.310 + new ReturnHolder("replace", "String"),
7.311 + new ReturnHolder("keyFor", "String"),
7.312 + new ReturnHolder("unscopables", "Object"),
7.313 + new ReturnHolder("iterator", "Array"),
7.314 + new ReturnHolder("match", "Array"),
7.315 + new ReturnHolder("isConcatSpreadable", "Boolean"),
7.316 + new ReturnHolder("species", "undefined"),
7.317 + new ReturnHolder("valueOf", "undefined"),
7.318 + };
7.319 + RETURN_TYPES.put("Symbol", Arrays.asList(Symbol));
7.320 +
7.321 + ReturnHolder[] WeakMap = new ReturnHolder[]{
7.322 + new ReturnHolder("get", "Object"),
7.323 + new ReturnHolder("set", "Object"),
7.324 + new ReturnHolder("has", "Boolean"),
7.325 + new ReturnHolder("delete", "Boolean"),
7.326 + };
7.327 + RETURN_TYPES.put("WeakMap", Arrays.asList(WeakMap));
7.328 +
7.329 + ReturnHolder[] WeakSet = new ReturnHolder[]{
7.330 + new ReturnHolder("has", "Boolean"),
7.331 + new ReturnHolder("delete", "Boolean"),
7.332 + new ReturnHolder("add", "Object"),
7.333 + };
7.334 + RETURN_TYPES.put("WeakSet", Arrays.asList(WeakSet));
7.335 +
7.336 + ReturnHolder[] TypedArray = new ReturnHolder[]{
7.337 + new ReturnHolder("splice", "Array"),
7.338 + new ReturnHolder("toSource", "String"),
7.339 + new ReturnHolder("sort", "Array"),
7.340 + new ReturnHolder("reduceRight", "Object"),
7.341 + new ReturnHolder("pop", "Object"),
7.342 + new ReturnHolder("indexOf", "Number"),
7.343 + new ReturnHolder("every", "Boolean"),
7.344 + new ReturnHolder("prototype", "Object"),
7.345 + new ReturnHolder("push", "Number"),
7.346 + new ReturnHolder("length", "Number"),
7.347 + new ReturnHolder("map", "Array"),
7.348 + new ReturnHolder("unshift", "Number"),
7.349 + new ReturnHolder("constructor", "Function"),
7.350 + new ReturnHolder("reverse", "Array"),
7.351 + new ReturnHolder("forEach", "undefined"),
7.352 + new ReturnHolder("lastIndexOf", "Number"),
7.353 + new ReturnHolder("join", "String"),
7.354 + new ReturnHolder("concat", "Array"),
7.355 + new ReturnHolder("reduce", "Object"),
7.356 + new ReturnHolder("slice", "Array"),
7.357 + new ReturnHolder("toString", "String"),
7.358 + new ReturnHolder("isArray", "Boolean"),
7.359 + new ReturnHolder("some", "Boolean"),
7.360 + new ReturnHolder("shift", "Object"),
7.361 + new ReturnHolder("filter", "Array"),
7.362 + new ReturnHolder("from", "Array"),
7.363 + new ReturnHolder("of", "Array"),
7.364 + new ReturnHolder("copyWithin", "undefined"),
7.365 + new ReturnHolder("fill", "undefined"),
7.366 + new ReturnHolder("find", "Object"),
7.367 + new ReturnHolder("findIndex", "Number"),
7.368 + new ReturnHolder("keys", "Array"),
7.369 + new ReturnHolder("values", "Array"),
7.370 + new ReturnHolder("includes", "Boolean"),
7.371 + new ReturnHolder("entries", "Array"),
7.372 + new ReturnHolder("name", "String"),
7.373 + new ReturnHolder("subarray", "Array"),
7.374 + new ReturnHolder("byteLength", "Number"),
7.375 + new ReturnHolder("buffer", "Object"),
7.376 + new ReturnHolder("byteOffset", "Number"),
7.377 + new ReturnHolder("BYTES_PER_ELEMENT", "Number"),
7.378 + new ReturnHolder("set", "undefined"),
7.379 + };
7.380 + RETURN_TYPES.put("Float32Array", Arrays.asList(TypedArray));
7.381 + RETURN_TYPES.put("Float64Array", Arrays.asList(TypedArray));
7.382 + RETURN_TYPES.put("Int8Array", Arrays.asList(TypedArray));
7.383 + RETURN_TYPES.put("Int16Array", Arrays.asList(TypedArray));
7.384 + RETURN_TYPES.put("Int32Array", Arrays.asList(TypedArray));
7.385 + RETURN_TYPES.put("Uint8Array", Arrays.asList(TypedArray));
7.386 + RETURN_TYPES.put("Uint16Array", Arrays.asList(TypedArray));
7.387 + RETURN_TYPES.put("Uint32Array", Arrays.asList(TypedArray));
7.388 + RETURN_TYPES.put("Uint8ClampedArray", Arrays.asList(TypedArray));
7.389 +
7.390 + ReturnHolder[] undefined = new ReturnHolder[]{};
7.391 + RETURN_TYPES.put("undefined", Arrays.asList(undefined));
7.392 +
7.393 + ReturnHolder[] Generator = new ReturnHolder[]{
7.394 + new ReturnHolder("throw", "Object"),
7.395 + new ReturnHolder("next", "Object"),
7.396 + new ReturnHolder("return", "undefined"),
7.397 +
7.398 + };
7.399 + RETURN_TYPES.put("Generator", Arrays.asList(Generator));
7.400 +
7.401 + ReturnHolder[] GeneratorFunction = new ReturnHolder[]{
7.402 + };
7.403 + RETURN_TYPES.put("GeneratorFunction", Arrays.asList(GeneratorFunction));
7.404 +
7.405 +
7.406 }
7.407
7.408 public static String serachFor(String parent, String name) {
7.409 @@ -503,7 +790,12 @@
7.410 return "Number";
7.411 }
7.412 }
7.413 -
7.414 + if (parent.contains("Error")) {
7.415 + if ("message".equals(name)) {
7.416 + return "String";
7.417 + }
7.418 + }
7.419 +
7.420 // String specific
7.421 if ("String".equals(parent)) {
7.422 if ("search".equals(name)) {
7.423 @@ -533,6 +825,12 @@
7.424 return "String";
7.425 }
7.426 }
7.427 +
7.428 + if ("isFinite".equals(parent)) {
7.429 + if ("value".equals(name)) {
7.430 + return "undefined";
7.431 + }
7.432 + }
7.433
7.434 if ("UTC".equals(parent)) {
7.435 return "Number";
7.436 @@ -543,6 +841,22 @@
7.437 return "String";
7.438 }
7.439 }
7.440 +
7.441 + if ("executor".equals(name)) {
7.442 + return "Function";
7.443 + }
7.444 +
7.445 + if ("parseInt".equals(name) || "parseFloat".equals(name)) {
7.446 + return "Number";
7.447 + }
7.448 +
7.449 + if ("eval".equals(name)) {
7.450 + return "undefined";
7.451 + }
7.452 +
7.453 + if ("littleEndian".equals(name)) {
7.454 + return "Boolean";
7.455 + }
7.456
7.457 // else
7.458 if (description.matches(".*[nN]ame.*")) {
8.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/dom/DomGenerator.java Wed May 04 09:38:38 2016 +0200
8.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/dom/DomGenerator.java Mon May 30 15:32:51 2016 +0200
8.3 @@ -216,6 +216,8 @@
8.4 return "String";
8.5 } else if (returnText.contains("unsigned") || "long".equals(returnText) || "short".equals(returnText)) {
8.6 return "Number";
8.7 + } else if ("boolean".equals(returnText)) {
8.8 + return "Boolean";
8.9 } else {
8.10 return returnText;
8.11 }
9.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/DocSummary.java Wed May 04 09:38:38 2016 +0200
9.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/DocSummary.java Mon May 30 15:32:51 2016 +0200
9.3 @@ -6,8 +6,10 @@
9.4
9.5 import java.util.ArrayList;
9.6 import java.util.List;
9.7 +import java.util.logging.Logger;
9.8 import org.jsoup.Jsoup;
9.9 import org.netbeans.jsstubsgenerator.JsStubsGenerator;
9.10 +import org.netbeans.jsstubsgenerator.core.ecma.EcmaCoreGenerator;
9.11 import org.netbeans.jsstubsgenerator.stub.Parameter;
9.12 import org.netbeans.jsstubsgenerator.stub.Return;
9.13 import org.netbeans.jsstubsgenerator.stub.StubObject;
9.14 @@ -17,7 +19,7 @@
9.15 * @author marfous
9.16 */
9.17 public class DocSummary extends Construct {
9.18 -
9.19 + private static final Logger LOGGER = Logger.getLogger(DocSummary.class.getName());
9.20 private static final String WRAPPER_ELEMENT = "b";
9.21 private static final String WRAPPER_HEADER = "h3";
9.22
9.23 @@ -50,6 +52,18 @@
9.24 jsBuilder.appendComment("@syntax " + getCleanedSyntax(stubObject.getSyntax()));
9.25 }
9.26 }
9.27 +
9.28 + private void since() {
9.29 + if (!stubObject.getSince().isEmpty()) {
9.30 + jsBuilder.appendComment("@since " + getCleanedSyntax(stubObject.getSince().get(0)));
9.31 + }
9.32 + }
9.33 +
9.34 + private void deprecated() {
9.35 + if (stubObject.isDeprecated()) {
9.36 + jsBuilder.appendComment("@deprecated");
9.37 + }
9.38 + }
9.39
9.40 private void parameters() {
9.41 if (!stubObject.getParameters().isEmpty()) {
9.42 @@ -60,7 +74,7 @@
9.43 if (JsStubsGenerator.GENERATE_FULL || !stubObject.isPrune()) {
9.44 // removed dashes from parameter names if any
9.45 String paramName = param.getName().contains("-") ? param.getName().replace("-", "") : param.getName();
9.46 - jsBuilder.appendComment("@param {" + param.getType() + "} " + getWithoutWS(paramName) + " " + param.getDesc());
9.47 + jsBuilder.appendComment("@param {" + param.getType() + "} " + getWithoutWS(paramName)); //+ " " + param.getDesc());
9.48 } else {
9.49 // update parameter names to be able to complete at least their type where possible
9.50 if (i < paramNames.length) {
9.51 @@ -83,19 +97,26 @@
9.52 String minSyntax = (parametersString.indexOf("[") > -1) ? parametersString.substring(0, parametersString.indexOf("[")) : parametersString;
9.53 minSyntax = (minSyntax.indexOf(", ...") > -1) ? minSyntax.substring(0, minSyntax.indexOf(", ...")) : minSyntax;
9.54 for (String string : minSyntax.split("[,]")) {
9.55 - params.add(string.trim());
9.56 + if(!string.trim().isEmpty()) {
9.57 + params.add(string.trim());
9.58 + }
9.59 }
9.60 return params.toArray(new String[params.size()]);
9.61 }
9.62
9.63 private void returns() {
9.64 Return returns = stubObject.getReturns();
9.65 +
9.66 if (returns != null) {
9.67 if (JsStubsGenerator.GENERATE_FULL || !stubObject.isPrune()) {
9.68 - jsBuilder.appendComment("@returns {" + returns.getType() + "} " + ((returns.getDesc() != null) ? returns.getDesc() : ""));
9.69 + jsBuilder.appendComment("@returns {" + returns.getType() + "}"); //+ ((returns.getDesc() != null) ? returns.getDesc() : ""));
9.70 } else {
9.71 jsBuilder.appendComment("@returns {" + returns.getType() + "}");
9.72 }
9.73 + } else {
9.74 + if (!"global".equals(stubObject.getParent()) && !"prototype".equals(stubObject.getName())) {
9.75 + LOGGER.warning(stubObject.getName() + " in " + stubObject.getParent() + " is missing return");
9.76 + }
9.77 }
9.78 }
9.79
9.80 @@ -113,6 +134,8 @@
9.81 if (JsStubsGenerator.GENERATE_FULL || !stubObject.isPrune()) {
9.82 summary();
9.83 }
9.84 + since();
9.85 + deprecated();
9.86 syntax();
9.87 parameters();
9.88 returns();
10.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/JsObject.java Wed May 04 09:38:38 2016 +0200
10.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/JsObject.java Mon May 30 15:32:51 2016 +0200
10.3 @@ -59,7 +59,7 @@
10.4 private void exposeAttributes() {
10.5 for (Map.Entry<String, StubObject> entry : stubObject.getAttributes().entrySet()) {
10.6 StubObject attrStub = entry.getValue();
10.7 - if (!"prototype".equals(attrStub.getName())) {
10.8 + if (!attrStub.isNonStandard() && !"prototype".equals(attrStub.getName())) {
10.9 jsBuilder.append(entry.getValue().toDoc(true));
10.10 }
10.11 }
11.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/JsProperty.java Wed May 04 09:38:38 2016 +0200
11.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/JsProperty.java Mon May 30 15:32:51 2016 +0200
11.3 @@ -49,6 +49,9 @@
11.4 }
11.5
11.6 public String print() {
11.7 + if (stubObject.isNonStandard()) {
11.8 + return "";
11.9 + }
11.10 appendDoc(new DocSummary(stubObject, nestedLevel));
11.11 begin(stubObject.getName());
11.12 return jsBuilder.toString();
12.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/Utils.java Wed May 04 09:38:38 2016 +0200
12.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/Utils.java Mon May 30 15:32:51 2016 +0200
12.3 @@ -4,7 +4,9 @@
12.4 */
12.5 package org.netbeans.jsstubsgenerator.print;
12.6
12.7 +import java.util.logging.Logger;
12.8 import org.jsoup.Jsoup;
12.9 +import org.netbeans.jsstubsgenerator.core.ecma.EcmaCoreGenerator;
12.10 import org.netbeans.jsstubsgenerator.stub.StubObject;
12.11
12.12 /**
12.13 @@ -12,7 +14,7 @@
12.14 * @author Martin Fousek <marfous@netbeans.org>
12.15 */
12.16 public class Utils {
12.17 -
12.18 + private static final Logger LOGGER = Logger.getLogger(Utils.class.getName());
12.19 private Utils() {
12.20 }
12.21
12.22 @@ -20,7 +22,10 @@
12.23 String originalSyntax = Jsoup.parse(stubObject.getSyntax().trim()).text().trim();
12.24 if (originalSyntax.indexOf(")") != -1) {
12.25 String firstLineSyntax = originalSyntax.substring(0, originalSyntax.indexOf(")"));
12.26 -
12.27 + if (firstLineSyntax.indexOf(stubObject.getName()) == -1) {
12.28 + LOGGER.warning("Problem to parse syntax: " + originalSyntax);
12.29 + return;
12.30 + }
12.31 // get string where the name starts
12.32 String realSyntax = firstLineSyntax.substring(firstLineSyntax.indexOf(stubObject.getName()));
12.33
12.34 @@ -48,7 +53,7 @@
12.35 if (string.contains("-")) {
12.36 string = string.replace("-", "");
12.37 }
12.38 - String name = string.trim().contains("|") ? string.split("[|]")[0] : string;
12.39 + String name = string.trim().contains("|") ? string.split("[|]")[0] : string.trim();
12.40 jsBuilder.append(delim, false).append(name, false);
12.41 delim = ", ";
12.42 }
13.1 --- a/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/stub/StubObject.java Wed May 04 09:38:38 2016 +0200
13.2 +++ b/javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/stub/StubObject.java Mon May 30 15:32:51 2016 +0200
13.3 @@ -41,6 +41,7 @@
13.4 private boolean instance;
13.5 private Return returns;
13.6 private boolean isStatic;
13.7 + private boolean isDeprecated;
13.8 private List<Parameter> parameters = new ArrayList<Parameter>();
13.9 private Map<String, StubObject> attributes = new HashMap<String, StubObject>();
13.10
13.11 @@ -50,6 +51,8 @@
13.12 private boolean uncompleted = false;
13.13 // whether it's underscored attr. - means commonly not standard stub
13.14 private boolean underscored = false;
13.15 +
13.16 + private boolean nonstandard = false;
13.17
13.18 private static final Logger LOGGER = Logger.getLogger(StubObject.class.getName());
13.19
13.20 @@ -58,6 +61,22 @@
13.21 this.parent = parent;
13.22 this.name = name;
13.23 }
13.24 +
13.25 + public void setNonStandard(boolean isnonstandard) {
13.26 + nonstandard = isnonstandard;
13.27 + }
13.28 +
13.29 + public boolean isNonStandard() {
13.30 + return nonstandard;
13.31 + }
13.32 +
13.33 + public void setDeprecated(boolean isDeprecated) {
13.34 + this.isDeprecated = isDeprecated;
13.35 + }
13.36 +
13.37 + public boolean isDeprecated() {
13.38 + return isDeprecated;
13.39 + }
13.40
13.41 public boolean isPrune() {
13.42 return prune;
13.43 @@ -130,7 +149,7 @@
13.44 public void setReturns(Return returns) {
13.45 this.returns = returns;
13.46 }
13.47 -
13.48 +
13.49 public void setSummary(String summary) {
13.50 this.summary = summary;
13.51 }
13.52 @@ -150,8 +169,16 @@
13.53 public void putProperties(List<String> properties) {
13.54 for (String property : properties) {
13.55 if (!property.contains("__")) {
13.56 - StubObject attrStub = new StubObject(origin, property, name);
13.57 - attrStub.setStatic(true);
13.58 + String propertyName = property;
13.59 + if (property.lastIndexOf(".") > 0) {
13.60 + propertyName = property.substring(property.lastIndexOf(".")+1);
13.61 + }
13.62 + StubObject attrStub = new StubObject(origin, propertyName, name);
13.63 + if (property.contains("prototype")) {
13.64 + attrStub.setStatic(false);
13.65 + } else {
13.66 + attrStub.setStatic(true);
13.67 + }
13.68 attrStub.setType(Type.PROPERTY);
13.69 attributes.put(property, attrStub);
13.70 }
13.71 @@ -161,8 +188,19 @@
13.72 public void putMethods(List<String> methods) {
13.73 for (String method : methods) {
13.74 if (!method.contains("__")) {
13.75 - StubObject attrStub = new StubObject(origin, method, name);
13.76 - attrStub.setStatic(true);
13.77 + String methodName = method;
13.78 + if (method.lastIndexOf(".") > 0) {
13.79 + methodName = method.substring(method.lastIndexOf(".")+1);
13.80 + methodName = methodName.replace("(", "");
13.81 + methodName = methodName.replace(")", "");
13.82 + }
13.83 + StubObject attrStub = new StubObject(origin, methodName, name);
13.84 + if (method.contains("prototype")) {
13.85 + attrStub.setStatic(false);
13.86 + } else {
13.87 + attrStub.setStatic(true);
13.88 + }
13.89 +
13.90 attrStub.setType(Type.METHOD);
13.91 attributes.put(method, attrStub);
13.92 }
13.93 @@ -384,7 +422,8 @@
13.94
13.95 private void merge(StubObject attrObject) {
13.96 summary = attrObject.getSummary();
13.97 - since = attrObject.getSince();
13.98 + if (!since.equals(attrObject.getSince()))
13.99 + since = attrObject.getSince();
13.100 syntax = attrObject.getSyntax();
13.101 description = attrObject.getDescription();
13.102 returns = attrObject.getReturns();