Ecma6 documentation
authorMilutin Kristofic <mkristofic@netbeans.org>
Mon, 30 May 2016 15:32:51 +0200
changeset 6330e15a7f854ef4
parent 6325 9e44b44935db
child 6367 3f11c7b68c32
Ecma6 documentation
javascript2.generatestubs/readme.txt
javascript2.generatestubs/scripts/download_stubs.sh
javascript2.generatestubs/scripts/sort.py
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/JsStubsGenerator.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/ecma/EcmaCoreGenerator.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/mdn/MdnGenerator.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/core/mdn/ReturnType.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/dom/DomGenerator.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/DocSummary.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/JsObject.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/JsProperty.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/print/Utils.java
javascript2.generatestubs/src/main/java/org/netbeans/jsstubsgenerator/stub/StubObject.java
     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();