Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8181567

javac resulted in java.lang.AssertionError at com.sun.tools.javac.util.Assert.error(Assert.java:126)

XMLWordPrintable

    • x86

      FULL PRODUCT VERSION :
      C:\Users\rudol>java -version
      java version "9-ea"
      Java(TM) SE Runtime Environment (build 9-ea+172)
      Java HotSpot(TM) 64-Bit Server VM (build 9-ea+172, mixed mode)

      However the netbeans run on
      C:\_PGM\Java\JDK_JRE\JDK_8_64\bin>java -version
      java version "1.8.0_131"
      Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
      Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)


      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 10.0.15063]

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      Developed under NetBeans 8.2,

      A DESCRIPTION OF THE PROBLEM :
      I have run "Clean and Build" of the project Adv_17s_Testing that used the framework Adv_17s_FW.
      Both projects are

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      When I have run the "Clean and Build" under NetBeans

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The files are compiled and the project built.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Compiling 26 source files to D:\SVN_PGM\@E_Vyuka\@@E_Adventura\Adv_17s\Adv_17s_Testing\build\classes
      An exception has occurred in the compiler (1.8.0_131). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
      java.lang.AssertionError
      at com.sun.tools.javac.util.Assert.error(Assert.java:126)
      at com.sun.tools.javac.util.Assert.check(Assert.java:45)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$LambdaTranslationContext.addSymbol(LambdaToMethod.java:2024)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitNewClass(LambdaToMethod.java:1378)
      at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1516)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.visitLambda(TreeTranslator.java:289)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeLambda(LambdaToMethod.java:1347)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeLambda(LambdaToMethod.java:1328)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitReference(LambdaToMethod.java:1450)
      at com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:1973)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
      at com.sun.tools.javac.tree.TreeTranslator.visitApply(TreeTranslator.java:275)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitApply(LambdaToMethod.java:1208)
      at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1465)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.visitExec(TreeTranslator.java:245)
      at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1296)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
      at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:162)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitBlock(LambdaToMethod.java:1231)
      at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:145)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitMethodDef(LambdaToMethod.java:1361)
      at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
      at com.sun.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitClassDef(LambdaToMethod.java:1270)
      at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeAndPreprocessClass(LambdaToMethod.java:1197)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.access$300(LambdaToMethod.java:1148)
      at com.sun.tools.javac.comp.LambdaToMethod.visitClassDef(LambdaToMethod.java:232)
      at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:197)
      at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:190)
      at com.sun.tools.javac.comp.LambdaToMethod.translateTopLevelClass(LambdaToMethod.java:217)
      at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1493)
      at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1356)
      at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
      at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
      at com.sun.tools.javac.main.Main.compile(Main.java:523)
      at com.sun.tools.javac.main.Main.compile(Main.java:381)
      at com.sun.tools.javac.main.Main.compile(Main.java:370)
      at com.sun.tools.javac.main.Main.compile(Main.java:361)
      at com.sun.tools.javac.Main.compile(Main.java:56)
      at com.sun.tools.javac.Main.main(Main.java:42)
      D:\SVN_PGM\@E_Vyuka\@@E_Adventura\Adv_17s\Adv_17s_Testing\nbproject\build-impl.xml:1100: The following error occurred while executing this line:
      D:\SVN_PGM\@E_Vyuka\@@E_Adventura\Adv_17s\Adv_17s_Testing\nbproject\build-impl.xml:401: Compile failed; see the compiler error output for details.
      BUILD FAILED (total time: 1 second)


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      /* The file is saved in UTF-8 codepage.
       * Check: «Stereotype», Section mark-§, Copyright-©, Alpha-α, Beta-β, Smile-☺
       */
      package eu.pedu.adv17s.testers.t11_abrakadabra;

      import eu.pedu.adv17s_fw.game_txt.IGSMFactory;
      import eu.pedu.adv17s_fw.game_txt.IGame;
      import eu.pedu.adv17s_fw.game_txt.IPlace;
      import eu.pedu.adv17s_fw.scenario.AScenarioManager;

      import eu.pedu.adv17s_fw.scenario.Scenario;
      import eu.pedu.adv17s_fw.scenario.ScenarioStep;
      import eu.pedu.adv17s_fw.scenario.TypeOfStep;

      import eu.pedu.adv17s_fw.test_util.common.TestException;
      import eu.pedu.adv17s_fw.test_util.game_txt_test.ScenarioSummary;
      import eu.pedu.adv17s_fw.test_util.game_txt_test.ATestVisitor;
      import eu.pedu.adv17s_fw.test_util.game_txt_test.ASolutionTester;
      import eu.pedu.adv17s_fw.test_util.scenario_test.SMSummary;

      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.Collection;
      import java.util.HashSet;
      import java.util.Iterator;
      import java.util.List;
      import java.util.Set;



      /*******************************************************************************
       * Instance třídy {@code T17s11_Tester} testují správné zapracování<br>
       * modifikace s kódem <b>17s11</b>, požadující upravit odevzdaný program<br>
       * následovně:<br>
       * <br>
       * Doplňte do hry příkaz nazvaný <b>_Abrakadabra_</b>
       * s následujícími vlastnostmi:<br>
       * <ul>
       * <li>Při zadání příkazu ani jeho parametrů
       * nebude záležet na velikosti písmen
       * <br>&nbsp;</li>
       * <li>Při zadání příkazu s parametrem <b>{@code _Zkratka_}</b> se hráč
       * přesune do prostoru nazvaného <b>{@code <Zkratka>}</b>
       * bez změny obsahu batohu.
       * Tento prostor nebude mít ve výchozím stavu žádné sousedy.
       * <br>&nbsp;</li>
       * <li>Zadáte-li v prostoru <b>Zkratka</b> tento příkaz s parametrem
       * <b>Cíl</b>, stane se cílový prostor úspěšného scénáře sousedem prostoru
       * <b>Zkratka</b>. Navíc se upraví obsah batohu hráče spolu se sousedy
       * a obsahem cílového prostoru tak, aby odpovídaly stavu
       * v závěrečném kroku úspěšného scénáře.
       * <br>&nbsp;</li>
       * <li>Přejde-li v následujícím kroku hráč do cílového prostoru,
       * odpoví hra stejně jako v závěrečném kroku úspěšného scénáře.
       * Jinými slovy: závěrečný krok testovacího a úspěšného scénáře budou
       * shodné s jediným rozdílem: závěrečným příkazem testovacího scénáře
       * bude přechod co cílového prostoru.
       * <br>&nbsp;</li>
       * <li>Zadá-li hráč příkaz <b>AbrakaDabra</b> s jiným parametrem
       * než s jedním ze dvou výše uvedených (včetně zadání bez parametrů),
       * bude se hra chovat stejně, jako když uživatel zadá neznámý příkaz
       * <br>&nbsp;</li>
       * </ul>
       * Doplňte do správce scénářů obecný testovací scénář, tj. scénář typu
       * {@link TypeOfScenario#scGENERAL} nazvaný <b>_T17s11_</b>
       * s následujícími testovacími kroky:
       * <ol>
       * <li>Startovacím krok úspěšného scénáře – krok typu
       * {@link TypeOfStep#tsSTART}.
       * <br>&nbsp;</li>
       * <li>Zadání příkazu <b>AbrakaDabra</b> bez parametru – krok typu
       * {@link TypeOfStep#tsUNKNOWN}.
       * <br>&nbsp;</li>
       * <li>Zadání příkazu <b>AbrakaDabra Zkratka</b> – krok typu
       * {@link TypeOfStep#tsNON_STANDARD}.
       * <br>&nbsp;</li>
       * <li>Zadání příkazu <b>AbrakaDabra Cíl</b> – krok typu
       * {@link TypeOfStep#tsNON_STANDARD}.
       * <br>&nbsp;</li>
       * <li>Přesun do cílového prostoru a ukončení hry – krok typu
       * {@link TypeOfStep#tsMOVE}.
       * <br>&nbsp;</li>
       * </ol>
       *
       * @author Rudolf PECINOVSKÝ
       * @version 2016-Summer
       */
      public class T17s11_Tester_ORG
           extends ASolutionTester
      {
      //== CONSTANT CLASS ATTRIBUTES =================================================

          /** Seznam výsledků provedených testů. */
          private static final List<ScenarioSummary> INFOS = new ArrayList<>();

          /** Nově přidávaný příkaz. */
          private static final String COMMAND = "Abrakadabra";

          /** První používaný parametr. */
          private static final String ARG_1 = "Zkratka";

          /** Druhý používaný parametr. */
          private static final String ARG_2 = "Cíl";



      //== VARIABLE CLASS ATTRIBUTES =================================================

          /** Proměnná obsahující souhrn informací získaných z analýzy scénářů. */
          private static SMSummary summary;

          /**Stručná verze zprávy o vytvoření testu. */
          private static String createTestShortMessage;

          /**Podrobná verze zprávy o vytvoření testu. */
          private static String createTestVerbosetMessage;



      //##############################################################################
      //== STATIC INITIALIZER (CLASS CONSTRUCTOR) ====================================
      //== CLASS GETTERS AND SETTERS =================================================
      //== OTHER NON-PRIVATE CLASS METHODS ===========================================

      // /***************************************************************************
      // * Otestuje zadanou hru základním, chybovým a kontrolním scénářem
      // * (kontrolní scénář si test vygeneruje sám).
      // *
      // * @param game Testovaná hra
      // */
      // public static void test(IGame game)
      // {
      // TextGameTestUtil test = TextGameTestUtil.getInstance(game);
      // createTestShortMessage = test.getShortMessage();
      // createTestVerbosetMessage = test.getVerboseMessage();
      // summary = test.getSummary();
      //// test.setVisitor(new Visitor_04());
      // test.testGameByScenario(0);
      // test.testGameByScenario(1);
      // Scenario scenario = createTestScenario_04(game);
      // test.testGameByScenario(scenario);
      // printResults(game, summary);
      // }



      //== PRIVATE AND AUXILIARY CLASS METHODS =======================================

          /***************************************************************************
           * Definuje scénář, podle nějž je možno prověřit
           * splnění požadavků dané obhajoby.
           *
           * @param game Testovaná hra
           * @return Vytvořený scénář
           */
          private static Scenario createTestScenario_04(IGame game)
          {
              ScenarioStep[] steps = prepareScenarioSteps(game);
              Scenario result = null;
      // new Scenario("_T04_",
      // TypeOfScenario.scGENERAL,
      // game.getScenarioManager(),
      // steps);
              return result;
          }


          /***************************************************************************
           * Připraví kroky testovacího scénáře.
           *
           * @param game Testovaná hra
           * @return Kroky testovacího scénáře
           */
          private static ScenarioStep[] prepareScenarioSteps(IGame game)
          {
      // AScenarioManager manager = game.getScenarioManager();
      // String notKnownAnswer = findNotKnownAnswerStep(manager);
      // String moveCommand = game.getBasicCommands().MOVE_CMD_NAME;
      //
      // ScenarioStep startStep = summary.startStep;
      // ScenarioStep endStep = summary.endStep;
      //
      //// startStep.setNewIndex(1);
      //
              ScenarioStep[] result = new ScenarioStep[]
                  {};
      // {
      // //Startovací
      // startStep,
      //
      // //Příkaz bez parametrů
      // new ScenarioStep(TypeOfStep.tsUNKNOWN,
      // COMMAND,
      // notKnownAnswer,
      // startStep.space,
      // startStep.neighbors,
      // startStep.items,
      // startStep.bag
      // ),
      //
      // //Magický přesun do prostoru Zkratka
      // new ScenarioStep(TypeOfStep.tsNON_STANDARD,
      // COMMAND + " " + ARG_1,
      // ScenarioStep.IGNORED_MESSAGE,
      // ARG_1,
      // new String[] {},
      // new String[] {},
      // startStep.bag
      // ),
      //
      // //Příprava parametrů pro finiš
      // new ScenarioStep(TypeOfStep.tsNON_STANDARD,
      // COMMAND + " " + ARG_2,
      // ScenarioStep.IGNORED_MESSAGE,
      // ARG_1,
      // new String[] {endStep.item},
      // new String[] {},
      // endStep.bag
      // ),
      //
      // //Závěrečný krok ukončující daný běh hry
      // new ScenarioStep(TypeOfStep.tsMOVE,
      // moveCommand + " " + endStep.item,
      // endStep.message,
      // endStep.item,
      // endStep.neighbors,
      // endStep.items,
      // endStep.bag)
      // };
              return result;
          }


          /***************************************************************************
           * Zjistí text zprávy vracené při zadání neznámého příkazu.
           *
           * @param manager Správce scénářů dané hry
           * @return Text požadované zprávy
           */
          private static String findNotKnownAnswerStep(AScenarioManager manager)
          {
              String answer = null;
              Scenario scenario = manager.getMistakeScenario();
              for (ScenarioStep step : scenario) {
                  if (step.typeOfStep == TypeOfStep.tsUNKNOWN) {
                      answer = step.message;
                      break;
                  }
              }
              if (answer == null) {
                  throw new TestException(
                          "\nChybový scénář neobsahuje krok prověřující reakci " +
                            "na neexistující příkaz");
              }
              return answer;
          }



      //##############################################################################
      //== CONSTANT INSTANCE ATTRIBUTES ==============================================



      //== VARIABLE INSTANCE ATTRIBUTES ==============================================



      //##############################################################################
      //== CONSTRUCTORS AND FACTORY METHODS ==========================================

          /***************************************************************************
           * Vytvoří tester prověřující řešení zadání specifikovaného v konstantě
           * {@link #DESCRIPTION}.
           */
          public T17s11_Tester_ORG()
          {
              super("17s11", "", Visitor::new);
          }



      //== ABSTRACT METHODS ==========================================================
      //== INSTANCE GETTERS AND SETTERS ==============================================
      //== OTHER NON-PRIVATE INSTANCE METHODS ========================================
      //== PRIVATE AND AUXILIARY INSTANCE METHODS ====================================

      // /***************************************************************************
      // * Vytiskne souhrnné výsledky provedených testů.
      // *
      // * @param game Testovaná hra
      // * @param summary Přepravka se souhrnem informací o výsledcích testů
      // * jednotlivých scénářů spravovaných správcem scénářů
      // */
      // private static void printResults(IGame game, SMSummary summary)
      // {
      // StringBuilder sb = new StringBuilder(
      // "\n\nVýsledky provedených testů projektu uživatele ");
      // sb.append(game.getAuthorID()) .append(" — ").
      // append(game.getAuthorName()).append("\n");
      // for (int i = 0; i < summary.results.length; i++) {
      // boolean result = summary.results[i];
      // String name = summary.scenarios.get(i).getName();
      // sb.append(name).append(" — ").
      // append(result?"":"NE").append("PROŠEL").
      // append('\n');
      // }
      // for (_GameTestInfo info : INFOS) {
      // sb.append("Scénář: ").append(info.scenario.getName()).
      //// append('\n').
      //// append(" Shrnutí: ").
      // append(info.shortMessage);
      // }
      // String output = sb.toString();
      // System.out.println(output);
      // }


      //##############################################################################
      //== NESTED DATA TYPES =========================================================

          /***************************************************************************
           * Instance třídy {@code Visitor} představují návštěvníky prověřující
           * splnění zadání definované ve veřejné konstantě {@link #DESCRIPTION}.
           */
          private class Visitor
                extends ATestVisitor
          {
          //== CONSTANT CLASS ATTRIBUTES =============================================
          //== VARIABLE CLASS ATTRIBUTES =============================================
          //== STATIC CONSTRUCTOR (CLASS INITIALIZER, STATIC INICITALIZING BLOCK) ====
          //== CLASS GETTERS AND SETTERS =============================================
          //== OTHER NON-PRIVATE CLASS METHODS =======================================



          //##########################################################################
          //== CONSTANT INSTANCE ATTRIBUTES ==========================================

      // /** Množina doposud nezadaných příkazů dané hry. */
      // public Set<String> notEntered = new HashSet<>();



          //== VARIABLE INSTANCE ATTRIBUTES ==========================================



          //##########################################################################
          //== CONSTUCTORS AND FACTORY METHODS =======================================

              /***********************************************************************
               * Vytvoří návštěvníka metod testujících fungování hry podle
               * modifikovaného zadání definovaného v konstantě {@link #DESCRIPTION}.
               *
               * @param myTest Zadavatel požadující vyřešení zadání
               * definovaného v konstantě {@link #DESCRIPTION}
               * @param factory Tovární objekt poskytující základní objekty
               * prověřované aplikace
               */
              Visitor(ASolutionTester myTest, IGSMFactory factory)
              {
                  super(myTest, factory);
              }



          //== ABSTRACT METHODS ======================================================
          //== INSTANCE GETTERS AND SETTERS ==========================================

              /***************************************************************************
               * Vrátí sdružený tester, jehož zadání prověřuje.
               *
               * @return Sdružený tester
               */
              @Override
              public ASolutionTester getTester()
              {
                  return T17s11_Tester_ORG.this;
              }



          //== OTHER NON-PRIVATE INSTANCE METHODS ====================================

              /***********************************************************************
               * Akce, která se má provést po spuštění hry před testem prvního kroku:
               *
               * @param scenario Scénář definující proces testování
               */
              @Override
              public void afterGameStart(Scenario scenario)
              {
      // super.beforeStart(game, scenario);
      // //TODO Vyrobit speciální test povinných metod
      // game.getBasicCommands();
      // notEntered.clear();
      // Collection<? extends ICommand> allCommands = game.getAllCommands();
      // for (ICommand iCommand : allCommands) {
      // String name = iCommand.getName().toLowerCase();
      // notEntered.add(name);
      // }
              }


              /***********************************************************************
               * Akce, která se má provést po testu aktuálního kroku:
               *
               * @param step Aktuálně testovaný krok scénáře
               * @param message Zpráva vrácená hrou v daném kroku
               */
              @Override
              public void afterStepTest(ScenarioStep step, String message)
              {
      // String wholeCommand = step.command;
      // String[] words = wholeCommand.trim().split("\\s+");
      // String commandName = words[0];
      // notEntered.remove(commandName.toLowerCase());
      //
      // String[] parts = message.split("§");
      // int number = parts.length;
      // if (number < 2) {
      // throw new TestException(
      // "\nChybí požadovaný závěrečný řádek");
      // }
      // if (number > 2) {
      // throw new TestException(
      // "\nNečekaný znak § v závěrečné zprávě");
      // }
      // String line = parts[1];
      // if (! line.startsWith(START)) {
      // throw new TestException(
      // "\nZávěrečný řádek nemá požadovaný začátek");
      // }
      // line = line.trim();
      // if (! line.endsWith(END)) {
      // throw new TestException(
      // "\nZávěrečný řádek nemá požadovaný konec");
      // }
      // if (step.typeOfStep == TypeOfStep.tsNOT_START) {
      // return;
      // }
      // String answer = line.substring(START.length(),
      // line.length() - END.length()).trim();
      // String[] nameArr;
      // if (answer.isEmpty()) {
      // nameArr = new String[0];
      // }
      // else {
      // nameArr = answer.split(SEPARATOR);
      // }
      // Set<String> names = new HashSet<>(Arrays.asList(nameArr));
      //
      // if (notEntered.size() != names.size()) {
      // throw new TestException(
      // "\nNesouhlasí počet uvedených nezadaných příkazů");
      // }
      // for (Iterator<String> it = names.iterator(); it.hasNext();) {
      // String name = it.next();
      // String tested = name.toLowerCase();
      // if (notEntered.contains(tested)) {
      // it.remove();
      // }
      // else {
      // throw new TestException(
      // "\nChybně uvedený nezadaný příkaz: " + name);
      // }
      // }
              }


              /***********************************************************************
               * Akce, která se má provést po testu posledního kroku.
               *
               * @param summary Přepravka s kompletními informacemi o průběhu hry
               */
              @Override
              public void afterGameEnd(Throwable exception, String verboseMessage)
              {
                  super.afterGameEnd(exception, verboseMessage);
              }



          //== PRIVATE AND AUXILIARY INSTANCE METHODS ================================



          //##########################################################################
          //== EMBEDDED TYPES AND INNER CLASSES ======================================
          }

      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      I prepared another version of this class.

            fmatte Fairoz Matte
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: