Index: trunk/tools/japicc/modules/Internals/APIDump.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/APIDump.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/APIDump.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module to create API dump from disassembled code
 #
-# Copyright (C) 2016-2017 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
@@ -110,10 +112,28 @@
 { # 1, 2 - library, 0 - client
     my ($LVer, $Path) = @_;
-    
     $Path = getAbsPath($Path);
-    my $JarCmd = getCmdPath("jar");
-    if(not $JarCmd) {
-        exitStatus("Not_Found", "can't find \"jar\" command");
-    }
+    
+    my $ExtractCmd = undef;
+    
+    if($Path=~/\.jar\Z/)
+    {
+        $ExtractCmd = getCmdPath("jar");
+        if(not $ExtractCmd) {
+            exitStatus("Not_Found", "can't find \"jar\" command");
+        }
+        $ExtractCmd .= " -xf \"$Path\"";
+    }
+    elsif($Path=~/\.jmod\Z/)
+    {
+        $ExtractCmd = getCmdPath("jmod");
+        if(not $ExtractCmd) {
+            exitStatus("Not_Found", "can't find \"jmod\" command");
+        }
+        $ExtractCmd .= " extract \"$Path\"";
+    }
+    else {
+        exitStatus("Error", "unknown format of \'$Path\'");
+    }
+    
     my $ExtractPath = join_P($In::Opt{"Tmp"}, $ExtractCounter);
     if(-d $ExtractPath) {
@@ -121,10 +141,12 @@
     }
     mkpath($ExtractPath);
+    
     chdir($ExtractPath);
-    system($JarCmd." -xf \"$Path\"");
+    system($ExtractCmd);
     if($?) {
         exitStatus("Error", "can't extract \'$Path\'");
     }
     chdir($In::Opt{"OrigDir"});
+    
     my @Classes = ();
     foreach my $ClassPath (cmdFind($ExtractPath, "", "*\\.class"))
@@ -177,4 +199,9 @@
     {
         foreach my $SubArchive (cmdFind($ExtractPath, "", "*\\.jar"))
+        { # recursive step
+            readArchive($LVer, $SubArchive);
+        }
+        
+        foreach my $SubArchive (cmdFind($ExtractPath, "", "*\\.jmod"))
         { # recursive step
             readArchive($LVer, $SubArchive);
@@ -305,4 +332,14 @@
     
     my $TmpDir = $In::Opt{"Tmp"};
+    my $DumpFile = undef;
+    
+    if(defined $In::Opt{"Debug"})
+    {
+        if(my $DebugDir = getDebugDir($LVer))
+        {
+            mkpath($DebugDir);
+            $DumpFile = $DebugDir."/class-dump.txt";
+        }
+    }
     
     # ! private info should be processed
@@ -315,6 +352,18 @@
     
     chdir($TmpDir."/".$ExtractCounter);
+    
+    my ($Err, $ErrMsg) = ();
+    
     my $Pid = open3(*IN, *OUT, *ERR, @Cmd);
+    ($Err, $ErrMsg) = ($?, $!);
+    
     close(IN);
+    close(ERR);
+    
+    chdir($In::Opt{"OrigDir"});
+    
+    if($Err==-1 and $Err>>8 and $ErrMsg) {
+        exitStatus("Error", "failed to run javap (".$ErrMsg.")");
+    }
     
     my (%TypeAttr, $CurrentMethod, $CurrentPackage, $CurrentClass, $CurrentClass_Short) = ();
@@ -324,6 +373,7 @@
     my $InAnnotations_Class = undef;
     my $InAnnotations_Method = undef;
-    my %AnnotationName = ();
+    my %ConstantTypeName = ();
     my %AnnotationNum = (); # support for Java 7
+    my %ConstantName = ();
     
     my ($ParamPos, $FieldPos) = (0, 0);
@@ -331,5 +381,4 @@
     
     my $DContent = "";
-    my $Debug = (defined $In::Opt{"Debug"});
     
     while($Run)
@@ -343,5 +392,5 @@
             }
             
-            if($Debug) {
+            if(defined $In::Opt{"Debug"}) {
                 $DContent .= $LINE;
             }
@@ -463,5 +512,5 @@
                     $AName=~s/\//./g;
                     
-                    $AnnotationName{$CNum} = $AName;
+                    $ConstantTypeName{$CNum} = $AName;
                     
                     if(defined $AnnotationNum{$CNum})
@@ -471,4 +520,13 @@
                         }
                         delete($AnnotationNum{$CNum});
+                    }
+                }
+                elsif($LINE=~/=\s*(Utf8|Integer|Long|Float|Double)\s+(.*?)\Z/)
+                {
+                    if($1 eq "Utf8") {
+                        $ConstantName{$CNum} = "\"".$2."\"";
+                    }
+                    else {
+                        $ConstantName{$CNum} = $2;
                     }
                 }
@@ -557,5 +615,5 @@
                 if($LINE=~/\A\s*\d+\:\s*#(\d+)/)
                 {
-                    if(my $AName = $AnnotationName{$1})
+                    if(my $AName = $ConstantTypeName{$1})
                     {
                         if($InAnnotations_Class) {
@@ -678,5 +736,5 @@
             my $LINE_N = <OUT>;
             
-            if($Debug) {
+            if(defined $In::Opt{"Debug"}) {
                 $DContent .= $LINE_N;
             }
@@ -758,5 +816,5 @@
             
             my $LINE_NP = <OUT>;
-            if($Debug) {
+            if(defined $In::Opt{"Debug"}) {
                 $DContent .= $LINE_NP;
             }
@@ -773,5 +831,5 @@
             
             $LINE_NP = <OUT>;
-            if($Debug) {
+            if(defined $In::Opt{"Debug"}) {
                 $DContent .= $LINE_NP;
             }
@@ -780,5 +838,5 @@
             { # flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ANNOTATION
                 $LINE_NP = <OUT>;
-                if($Debug) {
+                if(defined $In::Opt{"Debug"}) {
                     $DContent .= $LINE_NP;
                 }
@@ -821,6 +879,7 @@
             
             %TypeAttr = ("Type"=>$2, "Name"=>$3); # reset previous class
-            %AnnotationName = (); # reset annotations of the class
+            %ConstantTypeName = (); # reset annotations of the class
             %AnnotationNum = (); # support for Java 7
+            %ConstantName = ();
             $InAnnotations_Class = 1;
             
@@ -923,4 +982,42 @@
             $InAnnotations = undef;
         }
+        elsif($CurrentMethod and index($LINE, "default_value")!=-1)
+        {
+            if($LINE=~/default_value:\s*[sISJBFDCZ]#(\d+)/)
+            {
+                if(defined $ConstantName{$1}) {
+                    $MethodInfo{$LVer}{$MName_Mid{$CurrentMethod}}{"Default"} = $ConstantName{$1};
+                }
+            }
+            elsif($LINE=~/default_value:\s*e#(\d+)\.#(\d+)/)
+            {
+                my ($ET, $EV) = ($1, $2);
+                if(defined $ConstantTypeName{$ET} and defined $ConstantName{$EV})
+                {
+                    $ET = $ConstantTypeName{$ET};
+                    $EV = $ConstantName{$EV};
+                    $EV=~s/\"//g;
+                    $MethodInfo{$LVer}{$MName_Mid{$CurrentMethod}}{"Default"} = $ET.".".$EV;
+                }
+            }
+            elsif($LINE=~/default_value:\s*\[(.*)\]/)
+            {
+                my $Arr = $1;
+                if($Arr)
+                {
+                    my @ArrU = ();
+                    foreach my $ArrP (split(/\s*,\s*/, $Arr))
+                    {
+                        if($ArrP=~/[sISJBFDCZ]#(\d+)/) {
+                            push(@ArrU, $ConstantName{$1});
+                        }
+                    }
+                    $MethodInfo{$LVer}{$MName_Mid{$CurrentMethod}}{"Default"} = "{".join(",", @ArrU)."}";
+                }
+                else {
+                    $MethodInfo{$LVer}{$MName_Mid{$CurrentMethod}}{"Default"} = "{}";
+                }
+            }
+        }
         else
         {
@@ -935,9 +1032,5 @@
     
     waitpid($Pid, 0);
-    chdir($In::Opt{"OrigDir"});
-    
-    if(my $Err = $?>>8) {
-        exitStatus("Error", "failed to run javap");
-    }
+    close(OUT);
     
     if(not $NonEmpty) {
@@ -945,6 +1038,6 @@
     }
     
-    if($Debug) {
-        appendFile(getDebugDir($LVer)."/class-dump.txt", $DContent);
+    if(defined $In::Opt{"Debug"}) {
+        appendFile($DumpFile, $DContent);
     }
 }
Index: trunk/tools/japicc/modules/Internals/Basic.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/Basic.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/Basic.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module with simple functions
 #
-# Copyright (C) 2016-2017 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
Index: trunk/tools/japicc/modules/Internals/Descriptor.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/Descriptor.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/Descriptor.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module to handle XML descriptors
 #
-# Copyright (C) 2016 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
@@ -29,5 +31,5 @@
     }
     
-    if(-d $Path or $Path=~/\.jar\Z/)
+    if(-d $Path or $Path=~/\.(jar|jmod)\Z/)
     {
         return "
Index: trunk/tools/japicc/modules/Internals/Filter.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/Filter.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/Filter.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module to filter API symbols
 #
-# Copyright (C) 2016-2017 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
@@ -89,4 +91,22 @@
     
     return 1;
+}
+
+sub nonImplClass($)
+{
+    my $Class = $_[0];
+    
+    if(defined $In::Opt{"NonImplAll"}) {
+        return 1;
+    }
+    
+    if(defined $In::Opt{"NonImplClassesList"})
+    { # user defined classes
+        if(defined $In::Opt{"NonImplClasses"}{$Class->{"Name"}}) {
+            return 1;
+        }
+    }
+    
+    return 0;
 }
 
Index: trunk/tools/japicc/modules/Internals/Input.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/Input.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/Input.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module to handle input data
 #
-# Copyright (C) 2016 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 package In;
Index: trunk/tools/japicc/modules/Internals/Logging.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/Logging.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/Logging.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module for logging
 #
-# Copyright (C) 2016-2017 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
@@ -47,4 +49,7 @@
     my ($Code, $Msg) = @_;
     print STDERR "ERROR: ". $Msg."\n";
+    if(my $Orig = $In::Opt{"OrigDir"}) {
+        chdir($Orig);
+    }
     exit($ERROR_CODE{$Code});
 }
Index: trunk/tools/japicc/modules/Internals/Mangling.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/Mangling.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/Mangling.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module to unmangle symbols
 #
-# Copyright (C) 2016 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
@@ -66,7 +68,4 @@
                     $CurParam = "short";
                 }
-                elsif($Symbol eq "S") {
-                    $CurParam = "short";
-                }
                 elsif($Symbol eq "I") {
                     $CurParam = "int";
@@ -80,4 +79,7 @@
                 elsif($Symbol eq "D") {
                     $CurParam = "double";
+                }
+                elsif($Symbol eq "Z") {
+                    $CurParam = "boolean";
                 }
                 else {
Index: trunk/tools/japicc/modules/Internals/Path.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/Path.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/Path.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module with functions to handle paths
 #
-# Copyright (C) 2017 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2017-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
Index: trunk/tools/japicc/modules/Internals/RegTests.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/RegTests.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/RegTests.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module with regression test suite
 #
-# Copyright (C) 2016-2017 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
@@ -384,4 +386,26 @@
         }");
         
+        # Added vararg parameter
+        writeFile($Path_v1."/AddedVarargParam.java",
+        "package $PackageName;
+        public class AddedVarargParam {
+            public void method(Integer x, String... y) { }
+        }");
+        writeFile($Path_v2."/AddedVarargParam.java",
+        "package $PackageName;
+        public class AddedVarargParam {
+            public void method(Integer x, String... y) { }
+        }");
+        
+        writeFile($TestsPath."/Test_AddedVarargParam.java",
+        "import $PackageName.*;
+        public class Test_AddedVarargParam
+        {
+            public static void main(String[] args) {
+                AddedVarargParam X = new AddedVarargParam();
+                X.method(0);
+            }
+        }");
+        
         # Removed_Annotation
         writeFile($Path_v1."/RemovedAnnotation.java",
@@ -402,4 +426,59 @@
         }");
         
+        # Changed Annotation
+        writeFile($Path_v1."/ChangedAnnotation.java",
+        "package $PackageName;
+        
+        enum MyEnum {
+            SUNDAY, MONDAY
+        }
+        
+        public \@interface ChangedAnnotation {
+            String value();
+            String datatype() default \"Str\";
+            int num1() default 1;
+            String[] values() default {\"Alice\", \"Bob\", \"Cindy\"};
+            int[] nums() default {1, 2, 3};
+            String safe_change() default \"Str\";
+            MyEnum day() default MyEnum.SUNDAY;
+            short num2() default 1;
+            long num3() default 1;
+            byte num4() default 1;
+            float num5() default 1.5f;
+            double num6() default 1.5;
+            boolean bit() default true;
+            char ch() default 'A';
+        }");
+        
+        writeFile($Path_v2."/ChangedAnnotation.java",
+        "package $PackageName;
+        
+        enum MyEnum {
+            SUNDAY, MONDAY
+        }
+        
+        public \@interface ChangedAnnotation {
+            String value() default \"Str\";
+            String datatype();
+            int[] values();
+            int[] nums() default {1, 2};
+            int[] new_default_param() default {1, 2};
+            int[] new_param();
+            String[] safe_change() default {\"Str\"};
+            MyEnum day() default MyEnum.MONDAY;
+        }");
+        
+        writeFile($TestsPath."/Test_ChangedAnnotation.java",
+        "import $PackageName.*;
+        public class Test_ChangedAnnotation {
+            public static void main(String[] args) {
+                testMethod();
+            }
+            
+            \@ChangedAnnotation(value=\"Val\")
+            static void testMethod() {
+            }
+        }");
+        
         # Beta Annotation
         writeFile($Path_v1."/Beta.java",
@@ -752,12 +831,20 @@
     "package $PackageName;
     public class ChangedFinalFieldValue {
-        public final int field = 1;
+        enum MyEnum {
+            ONE, TWO
+        }
+        public final int    field1 = 1;
         public final String field2 = \" \";
+        public final MyEnum field3 = MyEnum.ONE;
     }");
     writeFile($Path_v2."/ChangedFinalFieldValue.java",
     "package $PackageName;
     public class ChangedFinalFieldValue {
-        public final int field = 2;
+        enum MyEnum {
+            ONE, TWO
+        }
+        public final int    field1 = 2;
         public final String field2 = \"newValue\";
+        public final MyEnum field3 = MyEnum.TWO;
     }");
     
@@ -1920,4 +2007,7 @@
         $Cmd .= " -old-style";
     }
+    if(my $JdkPath = $In::Opt{"JdkPath"}) {
+        $Cmd .= " -jdk-path \"$JdkPath\"";
+    }
     
     my $TmpDir = $In::Opt{"Tmp"};
Index: trunk/tools/japicc/modules/Internals/SysFiles.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/SysFiles.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/SysFiles.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module to find system files
 #
-# Copyright (C) 2016-2017 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
@@ -225,3 +227,30 @@
 }
 
+sub getArchivePaths($$)
+{
+    my ($Dest, $LVer) = @_;
+    if(-f $Dest) {
+        return ($Dest);
+    }
+    elsif(-d $Dest)
+    {
+        $Dest=~s/[\/\\]+\Z//g;
+        next if(not $Dest);
+        
+        my @Archives = ();
+        foreach my $Path (cmdFind($Dest, "", "*\\.jar"))
+        {
+            next if(ignorePath($Path, $Dest));
+            push(@Archives, realpath_F($Path));
+        }
+        foreach my $Path (cmdFind($Dest, "", "*\\.jmod"))
+        {
+            next if(ignorePath($Path, $Dest));
+            push(@Archives, realpath_F($Path));
+        }
+        return @Archives;
+    }
+    return ();
+}
+
 return 1;
Index: trunk/tools/japicc/modules/Internals/TypeAttr.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/TypeAttr.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/TypeAttr.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module to handle type attributes
 #
-# Copyright (C) 2016 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
Index: trunk/tools/japicc/modules/Internals/Utils.pm
===================================================================
--- trunk/tools/japicc/modules/Internals/Utils.pm	(revision 12872)
+++ trunk/tools/japicc/modules/Internals/Utils.pm	(revision 13595)
@@ -2,20 +2,22 @@
 # A module with basic functions
 #
-# Copyright (C) 2016-2017 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License or the GNU Lesser
-# General Public License as published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# and the GNU Lesser General Public License along with this program.
-# If not, see <http://www.gnu.org/licenses/>.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301  USA.
 ###########################################################################
 use strict;
@@ -189,4 +191,7 @@
             push(@AbsPaths, $Path);
         }
+        
+        @AbsPaths = sort(@AbsPaths);
+        
         return @AbsPaths;
     }
@@ -223,4 +228,7 @@
             @Files = grep { /$Name/ } @Files;
         }
+        
+        @Files = sort(@Files);
+        
         return @Files;
     }
Index: trunk/tools/japicc/modules/RulesBin.xml
===================================================================
--- trunk/tools/japicc/modules/RulesBin.xml	(revision 12872)
+++ trunk/tools/japicc/modules/RulesBin.xml	(revision 13595)
@@ -491,4 +491,22 @@
     <effect>
         A client program may be interrupted by **AbstractMethodError** exception. Added abstract method is called in 2nd library version by the method @invoked_by and may not be implemented by old clients.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        NonImpl_Interface_Added_Abstract_Method
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Abstract method @target has been added to this interface.
+    </change>
+    <effect>
+        No effect.
     </effect>
 </rule>
@@ -1363,3 +1381,165 @@
 </rule>
 
+<rule>
+    <id>
+        Added_Annotation_Default_Element
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Element @target of type @elem_type with default value @new_value has been added to this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Added_Annotation_NonDefault_Element
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Element @target of type @elem_type without a default value has been added to this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Removed_Annotation_Default_Element
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Element @target of type @elem_type with default value @old_value has been removed from this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Removed_Annotation_NonDefault_Element
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Element @target of type @elem_type without a default value has been removed from this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Changed_Default_Value
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Changed default value of the element @target from @old_value to @new_value in this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Removed_Default_Value
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Removed default value @old_value from the element @target of this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Added_Default_Value
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Added default value @new_value for the element @target of this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Changed_Type
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Changed type of the element @target from @old_value to @new_value in this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Changed_Type_Safe
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Changed type of the element @target from @old_value to @new_value in this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
 </rules>
Index: trunk/tools/japicc/modules/RulesSrc.xml
===================================================================
--- trunk/tools/japicc/modules/RulesSrc.xml	(revision 12872)
+++ trunk/tools/japicc/modules/RulesSrc.xml	(revision 13595)
@@ -442,4 +442,22 @@
 <rule>
     <id>
+        NonImpl_Interface_Added_Abstract_Method
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Abstract method @target has been added to this interface.
+    </change>
+    <effect>
+        No effect. This interface is not meant to be implemented by users.
+    </effect>
+</rule>
+
+<rule>
+    <id>
         Class_Method_Became_Abstract
     </id>
@@ -1269,3 +1287,165 @@
 </rule>
 
+<rule>
+    <id>
+        Added_Annotation_Default_Element
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Element @target of type @elem_type with default value @new_value has been added to this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Added_Annotation_NonDefault_Element
+    </id>
+    <severity>
+        High
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Element @target of type @elem_type without a default value has been added to this annotation type.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the error message: annotation **@**@type_name is missing a default value for the element '@target'
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Removed_Annotation_Default_Element
+    </id>
+    <severity>
+        Medium
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Element @target of type @elem_type with default value @old_value has been removed from this annotation type.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the error message: cannot find symbol **@**@type_name(@target=VAL)
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Removed_Annotation_NonDefault_Element
+    </id>
+    <severity>
+        High
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Element @target of type @elem_type without a default value has been removed from this annotation type.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the error message: cannot find symbol **@**@type_name(@target=VAL)
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Changed_Default_Value
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Changed default value of the element @target from @old_value to @new_value in this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Removed_Default_Value
+    </id>
+    <severity>
+        Medium
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Removed default value @old_value from the element @target of this annotation type.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the error message: annotation **@**@type_name is missing a default value for the element '@target'
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Added_Default_Value
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Added default value @new_value for the element @target of this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Changed_Type
+    </id>
+    <severity>
+        Medium
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Changed type of the element @target from @old_value to @new_value in this annotation type.
+    </change>
+    <effect>
+        Recompilation of a client program may be terminated with the error message: incompatible types: @old_value cannot be converted to @new_value or annotation value not of an allowable type
+    </effect>
+</rule>
+
+<rule>
+    <id>
+        Annotation_Element_Changed_Type_Safe
+    </id>
+    <severity>
+        Safe
+    </severity>
+    <kind>
+        Types
+    </kind>
+    <change>
+        Changed type of the element @target from @old_value to @new_value in this annotation type.
+    </change>
+    <effect>
+        No effect.
+    </effect>
+</rule>
+
 </rules>
