From 112ddb7633d8794d5c85e1b2cf0369ee2e0e349a Mon Sep 17 00:00:00 2001 From: Jie Fu Date: Thu, 17 Jun 2021 02:10:52 +0000 Subject: [PATCH 01/12] 8268641: [foreign] assert(allocates2(pc)) failed: not in CodeBuffer memory with ShenandoahGC Reviewed-by: rbackman, kvn --- src/hotspot/cpu/x86/universalUpcallHandler_x86_64.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/cpu/x86/universalUpcallHandler_x86_64.cpp b/src/hotspot/cpu/x86/universalUpcallHandler_x86_64.cpp index bbfaa87bcb8..30072e91aa9 100644 --- a/src/hotspot/cpu/x86/universalUpcallHandler_x86_64.cpp +++ b/src/hotspot/cpu/x86/universalUpcallHandler_x86_64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -585,7 +585,7 @@ address ProgrammableUpcallHandler::generate_optimized_upcall_stub(jobject receiv const ABIDescriptor abi = ForeignGlobals::parse_abi_descriptor(jabi); const CallRegs conv = ForeignGlobals::parse_call_regs(jconv); assert(conv._rets_length <= 1, "no multi reg returns"); - CodeBuffer buffer("upcall_stub_linkToNative", /* code_size = */ 1024, /* locs_size = */ 1024); + CodeBuffer buffer("upcall_stub_linkToNative", /* code_size = */ 2048, /* locs_size = */ 1024); int register_size = sizeof(uintptr_t); int buffer_alignment = xmm_reg_size; From 4c9aefdb6193f754bfac3ae022f08a76b0cae718 Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Thu, 17 Jun 2021 02:47:00 +0000 Subject: [PATCH 02/12] 8268739: AArch64: Build failure after JDK-8267663 Reviewed-by: aph, dholmes --- .../cpu/aarch64/c2_MacroAssembler_aarch64.cpp | 45 ++++++++++++++++++- .../cpu/aarch64/c2_MacroAssembler_aarch64.hpp | 6 ++- .../cpu/aarch64/macroAssembler_aarch64.cpp | 43 ------------------ .../cpu/aarch64/macroAssembler_aarch64.hpp | 2 - 4 files changed, 49 insertions(+), 47 deletions(-) diff --git a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp index fab8ff669b1..9da93c99680 100644 --- a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "asm/assembler.inline.hpp" #include "opto/c2_MacroAssembler.hpp" #include "opto/intrinsicnode.hpp" +#include "opto/subnode.hpp" #include "runtime/stubRoutines.hpp" #ifdef PRODUCT @@ -832,3 +833,45 @@ void C2_MacroAssembler::string_compare(Register str1, Register str2, BLOCK_COMMENT("} string_compare"); } + +void C2_MacroAssembler::neon_compare(FloatRegister dst, BasicType bt, FloatRegister src1, + FloatRegister src2, int cond, bool isQ) { + SIMD_Arrangement size = esize2arrangement(type2aelembytes(bt), isQ); + if (bt == T_FLOAT || bt == T_DOUBLE) { + switch (cond) { + case BoolTest::eq: fcmeq(dst, size, src1, src2); break; + case BoolTest::ne: { + fcmeq(dst, size, src1, src2); + notr(dst, T16B, dst); + break; + } + case BoolTest::ge: fcmge(dst, size, src1, src2); break; + case BoolTest::gt: fcmgt(dst, size, src1, src2); break; + case BoolTest::le: fcmge(dst, size, src2, src1); break; + case BoolTest::lt: fcmgt(dst, size, src2, src1); break; + default: + assert(false, "unsupported"); + ShouldNotReachHere(); + } + } else { + switch (cond) { + case BoolTest::eq: cmeq(dst, size, src1, src2); break; + case BoolTest::ne: { + cmeq(dst, size, src1, src2); + notr(dst, T16B, dst); + break; + } + case BoolTest::ge: cmge(dst, size, src1, src2); break; + case BoolTest::gt: cmgt(dst, size, src1, src2); break; + case BoolTest::le: cmge(dst, size, src2, src1); break; + case BoolTest::lt: cmgt(dst, size, src2, src1); break; + case BoolTest::uge: cmhs(dst, size, src1, src2); break; + case BoolTest::ugt: cmhi(dst, size, src1, src2); break; + case BoolTest::ult: cmhi(dst, size, src2, src1); break; + case BoolTest::ule: cmhs(dst, size, src2, src1); break; + default: + assert(false, "unsupported"); + ShouldNotReachHere(); + } + } +} diff --git a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp index b2f6226bf9e..d7d381116b2 100644 --- a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,4 +49,8 @@ Register ch, Register result, Register tmp1, Register tmp2, Register tmp3); + // SIMD&FP comparison + void neon_compare(FloatRegister dst, BasicType bt, FloatRegister src1, + FloatRegister src2, int cond, bool isQ); + #endif // CPU_AARCH64_C2_MACROASSEMBLER_AARCH64_HPP diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp index 2ea457ed184..a0986200c87 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp @@ -5339,49 +5339,6 @@ void MacroAssembler::safepoint_isb() { #endif } -void MacroAssembler::neon_compare(FloatRegister dst, BasicType bt, FloatRegister src1, - FloatRegister src2, int cond, bool isQ) { - SIMD_Arrangement size = esize2arrangement(type2aelembytes(bt), isQ); - if (bt == T_FLOAT || bt == T_DOUBLE) { - switch (cond) { - case BoolTest::eq: fcmeq(dst, size, src1, src2); break; - case BoolTest::ne: { - fcmeq(dst, size, src1, src2); - notr(dst, T16B, dst); - break; - } - case BoolTest::ge: fcmge(dst, size, src1, src2); break; - case BoolTest::gt: fcmgt(dst, size, src1, src2); break; - case BoolTest::le: fcmge(dst, size, src2, src1); break; - case BoolTest::lt: fcmgt(dst, size, src2, src1); break; - default: - assert(false, "unsupported"); - ShouldNotReachHere(); - } - } else { - switch (cond) { - case BoolTest::eq: cmeq(dst, size, src1, src2); break; - case BoolTest::ne: { - cmeq(dst, size, src1, src2); - notr(dst, T16B, dst); - break; - } - case BoolTest::ge: cmge(dst, size, src1, src2); break; - case BoolTest::gt: cmgt(dst, size, src1, src2); break; - case BoolTest::le: cmge(dst, size, src2, src1); break; - case BoolTest::lt: cmgt(dst, size, src2, src1); break; - case BoolTest::uge: cmhs(dst, size, src1, src2); break; - case BoolTest::ugt: cmhi(dst, size, src1, src2); break; - case BoolTest::ult: cmhi(dst, size, src2, src1); break; - case BoolTest::ule: cmhs(dst, size, src2, src1); break; - default: - assert(false, "unsupported"); - ShouldNotReachHere(); - } - } -} - - #ifndef PRODUCT void MacroAssembler::verify_cross_modify_fence_not_required() { if (VerifyCrossModifyFence) { diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp index db3006fe093..b70e197de98 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp @@ -1058,8 +1058,6 @@ public: bool acquire, bool release, bool weak, Register result); - // SIMD&FP comparison - void neon_compare(FloatRegister dst, BasicType bt, FloatRegister src1, FloatRegister src2, int cond, bool isQ); private: void compare_eq(Register rn, Register rm, enum operand_size size); From 344e3edf7602d8b788334bd103e9a63a8d74a6f8 Mon Sep 17 00:00:00 2001 From: Julia Boes Date: Thu, 17 Jun 2021 09:10:27 +0000 Subject: [PATCH 03/12] 8268080: java/util/concurrent/forkjoin/AsyncShutdownNow.java fails with java.util.concurrent.RejectedExecutionException Co-authored-by: Doug Lea Reviewed-by: chegar, dfuchs --- .../java/util/concurrent/forkjoin/AsyncShutdownNow.java | 9 +++++---- .../concurrent/forkjoin/AsyncShutdownNowInvokeAny.java | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/test/jdk/java/util/concurrent/forkjoin/AsyncShutdownNow.java b/test/jdk/java/util/concurrent/forkjoin/AsyncShutdownNow.java index 7ae3a0a6853..68753d78836 100644 --- a/test/jdk/java/util/concurrent/forkjoin/AsyncShutdownNow.java +++ b/test/jdk/java/util/concurrent/forkjoin/AsyncShutdownNow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,6 +38,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.Future; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -102,7 +103,7 @@ public class AsyncShutdownNow { try { future.get(); assertTrue(false); - } catch (ExecutionException e) { + } catch (ExecutionException | RejectedExecutionException e) { // expected } } finally { @@ -123,7 +124,7 @@ public class AsyncShutdownNow { try { future.get(1, TimeUnit.HOURS); assertTrue(false); - } catch (ExecutionException e) { + } catch (ExecutionException | RejectedExecutionException e) { // expected } } finally { @@ -167,7 +168,7 @@ public class AsyncShutdownNow { // execute long running tasks executor.invokeAny(List.of(SLEEP_FOR_A_DAY, SLEEP_FOR_A_DAY)); assertTrue(false); - } catch (ExecutionException e) { + } catch (ExecutionException | RejectedExecutionException e) { // expected } } finally { diff --git a/test/jdk/java/util/concurrent/forkjoin/AsyncShutdownNowInvokeAny.java b/test/jdk/java/util/concurrent/forkjoin/AsyncShutdownNowInvokeAny.java index 4b1f2eccfe2..12afb6b2d49 100644 --- a/test/jdk/java/util/concurrent/forkjoin/AsyncShutdownNowInvokeAny.java +++ b/test/jdk/java/util/concurrent/forkjoin/AsyncShutdownNowInvokeAny.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.Future; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -89,7 +90,7 @@ public class AsyncShutdownNowInvokeAny { // execute long running tasks pool.invokeAny(List.of(SLEEP_FOR_A_DAY, SLEEP_FOR_A_DAY)); assertTrue(false); - } catch (ExecutionException e) { + } catch (ExecutionException | RejectedExecutionException e) { // expected } } finally { From 7d7bdbe135018f1452fa133b294575014e3e871b Mon Sep 17 00:00:00 2001 From: Patrick Concannon Date: Thu, 17 Jun 2021 09:35:08 +0000 Subject: [PATCH 04/12] 8268776: Test `ADatagramSocket.java` missing /othervm from @run tag Reviewed-by: dfuchs --- .../SetDatagramSocketImplFactory/ADatagramSocket.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jdk/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.java b/test/jdk/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.java index 22005165b88..6be863782a0 100644 --- a/test/jdk/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.java +++ b/test/jdk/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.java @@ -26,7 +26,7 @@ * @summary DatagramSocket should use a factory for its impl * * @compile/module=java.base java/net/MyDatagramSocketImplFactory.java - * @run main ADatagramSocket + * @run main/othervm ADatagramSocket */ import java.io.*; import java.net.*; From 69d01b6bcabda177f5e27f6c7b141be57cd00619 Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons Date: Thu, 17 Jun 2021 14:09:11 +0000 Subject: [PATCH 05/12] 8249899: jdk/javadoc/tool/InlineTagsWithBraces.java uses @ignore w/o bug-id 8249897: jdk/javadoc/tool/LangVers.java uses @ignore w/o bug-id 8249898: jdk/javadoc/tool/6176978/T6176978.java uses @ignore w/o bug-id Reviewed-by: hannesw --- .../jdk/javadoc/tool/6176978/T6176978.java | 81 ------------- .../langtools/jdk/javadoc/tool/6176978/X.java | 44 ------- .../javadoc/tool/InlineTagsWithBraces.java | 112 ------------------ test/langtools/jdk/javadoc/tool/LangVers.java | 96 --------------- 4 files changed, 333 deletions(-) delete mode 100644 test/langtools/jdk/javadoc/tool/6176978/T6176978.java delete mode 100644 test/langtools/jdk/javadoc/tool/6176978/X.java delete mode 100644 test/langtools/jdk/javadoc/tool/InlineTagsWithBraces.java delete mode 100644 test/langtools/jdk/javadoc/tool/LangVers.java diff --git a/test/langtools/jdk/javadoc/tool/6176978/T6176978.java b/test/langtools/jdk/javadoc/tool/6176978/T6176978.java deleted file mode 100644 index ca504eea62a..00000000000 --- a/test/langtools/jdk/javadoc/tool/6176978/T6176978.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6176978 - * @summary current Javadoc's invocation and extension (Doclet) mechanisms are problematic - * @modules jdk.javadoc - * @ignore no longer applicable, should delete - * @build T6176978 - * @run main T6176978 - */ - -import java.io.*; -import java.net.*; - -public class T6176978 -{ - public static void main(String[] args) throws Exception { - // create and use a temp dir that will not be on jtreg's - // default class path - File tmpDir = new File("tmp"); - tmpDir.mkdirs(); - - File testSrc = new File(System.getProperty("test.src", ".")); - String[] javac_args = { - "-d", - "tmp", - new File(testSrc, "X.java").getPath() - }; - - int rc = com.sun.tools.javac.Main.compile(javac_args); - if (rc != 0) - throw new Error("javac exit code: " + rc); - - String[] jdoc_args = { - "-doclet", - "X", - new File(testSrc, "T6176978.java").getPath() - }; - - rc = jdk.javadoc.internal.tool.Main.execute(jdoc_args); - if (rc == 0) - throw new Error("javadoc unexpectedly succeeded"); - - - - Thread currThread = Thread.currentThread(); - ClassLoader saveClassLoader = currThread.getContextClassLoader(); - URLClassLoader urlCL = new URLClassLoader(new URL[] { tmpDir.toURL() }); - currThread.setContextClassLoader(urlCL); - - try { - rc = jdk.javadoc.internal.tool.Main.execute(jdoc_args); - if (rc != 0) - throw new Error("javadoc exit: " + rc); - } finally { - currThread.setContextClassLoader(saveClassLoader); - } - } -} diff --git a/test/langtools/jdk/javadoc/tool/6176978/X.java b/test/langtools/jdk/javadoc/tool/6176978/X.java deleted file mode 100644 index ddbb36f84f8..00000000000 --- a/test/langtools/jdk/javadoc/tool/6176978/X.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.util.Collections; -import java.util.Locale; -import java.util.Set; - -import jdk.javadoc.doclet.Doclet; -import jdk.javadoc.doclet.Reporter; -import jdk.javadoc.doclet.DocletEnvironment; - -public class X { - public static boolean run(DocletEnvironment root) { - System.out.println("X.start"); - return true; - } - public Set getSupportedOptions() { - return Collections.emptySet(); - } - - public void init(Locale locale, Reporter reporter) { - return; - } -} diff --git a/test/langtools/jdk/javadoc/tool/InlineTagsWithBraces.java b/test/langtools/jdk/javadoc/tool/InlineTagsWithBraces.java deleted file mode 100644 index 1670d257710..00000000000 --- a/test/langtools/jdk/javadoc/tool/InlineTagsWithBraces.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4965490 - * @summary Verify that matching braces can appear within inline tags. - * @ignore API, re-evaluate @bold, @maybe causes doclint to throw up. - * @modules jdk.javadoc - */ - -import java.io.File; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import javax.lang.model.SourceVersion; -import javax.lang.model.element.TypeElement; - -import com.sun.source.doctree.DocCommentTree; -import com.sun.source.doctree.DocTree; -import com.sun.source.util.DocTrees; -import jdk.javadoc.doclet.Doclet; -import jdk.javadoc.doclet.DocletEnvironment; - -/** - * This is a {@code test} comment. - * It is {@bold {@underline only} a test}. - * We would like some code - * {@code for (int i : nums) { doit(i); } return; } - * to be embedded {@maybe {even {a couple {of levels}}} deep}. - */ -public class InlineTagsWithBraces implements Doclet { - - private static String[] expectedTags = { - "Text", "@code", "Text", - "@bold", "Text", "@code", "Text", - "@maybe", "Text" - }; - private static String[] expectedText = { - "This is a ", "test", " comment.\n" + - " It is ", "{@underline only} a test", ".\n" + - " We would like some code\n" + - " ", "for (int i : nums) { doit(i); } return; ", "\n" + - " to be embedded ", "{even {a couple {of levels}}} deep", "." - }; - - public static void main(String[] args) { - String thisFile = "" + - new File(System.getProperty("test.src", "."), "InlineTagsWithBraces.java"); - - String[] argarray = { - "InlineTagsWithBraces", - "-Xwerror", - thisFile - }; - if (jdk.javadoc.internal.tool.Main.execute(argarray) != 0) - throw new Error("Javadoc encountered warnings or errors."); - } - - public boolean run(DocletEnvironment root) { - DocTrees trees = root.getDocTrees(); - TypeElement cd = ElementFilter.typesIn(root.getIncludedElements()).iterator().next(); - DocCommentTree docCommentTree = trees.getDocCommentTree(cd); - List tags = docCommentTree.getBody(); - - for (int i = 0; i < tags.size(); i++) { - System.out.println(tags.get(0).getKind()); -// if (!tags[i].name().equals(expectedTags[i]) || -// !tags[i].text().equals(expectedText[i])) { -// throw new Error("Tag \"" + tags[i] + "\" not as expected"); -// } - } - - return true; - } - - @Override - public String getName() { - return "Test"; - } - - @Override - public Set