From 92f2a29f8d22d73bd3f146ecd329fc44981b999b Mon Sep 17 00:00:00 2001 From: Junichi Yamamoto Date: Mon, 5 Feb 2024 10:31:29 +0900 Subject: [PATCH 1/2] Fix the Code Completion for aliased traits and enums - Get aliased names for traits and enums - Add unit tests --- php/php.editor/nbproject/project.properties | 2 +- .../modules/php/editor/api/ElementQuery.java | 11 +++++++ .../editor/completion/PHPCodeCompletion.java | 4 ++- .../php/editor/elements/IndexQueryImpl.java | 20 ++++++++++++ ...int.php.testCallableTypeHint_01.completion | 3 ++ ...int.php.testCallableTypeHint_03.completion | 3 ++ .../lib/php54/traitsAliasedName01.php | 31 +++++++++++++++++++ ...e01.php.testTraitsAliasedName01.completion | 5 +++ .../testEnumsAliasedName/enumsAliasedName.php | 28 +++++++++++++++++ ...ame.php.testEnumsAliasedName_01.completion | 5 +++ .../completion/PHP54CodeCompletionTest.java | 4 +++ .../completion/PHP81CodeCompletionTest.java | 4 +++ 12 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/php54/traitsAliasedName01.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/php54/traitsAliasedName01.php.testTraitsAliasedName01.completion create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/php81/testEnumsAliasedName/enumsAliasedName.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/php81/testEnumsAliasedName/enumsAliasedName.php.testEnumsAliasedName_01.completion diff --git a/php/php.editor/nbproject/project.properties b/php/php.editor/nbproject/project.properties index f0fc04fc1af7..38ee0c7abe86 100644 --- a/php/php.editor/nbproject/project.properties +++ b/php/php.editor/nbproject/project.properties @@ -18,7 +18,7 @@ javac.source=1.8 javac.compilerargs=-Xlint -Xlint:-serial nbjavac.ignore.missing.enclosing=**/CUP$ASTPHP5Parser$actions.class nbm.needs.restart=true -spec.version.base=2.37.0 +spec.version.base=2.38.0 release.external/predefined_vars-1.0.zip=docs/predefined_vars.zip sigtest.gen.fail.on.error=false diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/api/ElementQuery.java b/php/php.editor/src/org/netbeans/modules/php/editor/api/ElementQuery.java index 9e35c9151d9e..bb9d87fa2119 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/api/ElementQuery.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/api/ElementQuery.java @@ -156,6 +156,17 @@ public interface Index extends ElementQuery { Set getEnums(NameKind query, Set aliases, AliasedElement.Trait trait); + /** + * Get traits. + * + * @param query the query + * @param aliases aliased names + * @param trait the trait + * @return traits + * @since 2.38.0 + */ + Set getTraits(NameKind query, Set aliases, AliasedElement.Trait trait); + Set getTraits(final NameKind query); Set getEnums(final NameKind query); diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java index f9a41fa0c736..7eaf3b009f90 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java @@ -1025,7 +1025,9 @@ private void autoCompleteAfterUseTrait(final PHPCompletionResult completionResul completionResult.add(new PHPCompletionItem.NamespaceItem(namespace, request, QualifiedNameKind.FULLYQUALIFIED)); } final NameKind nameQuery = NameKind.caseInsensitivePrefix(request.prefix); - for (TraitElement trait : request.index.getTraits(nameQuery)) { + Model model = request.result.getModel(); + Set traits = request.index.getTraits(nameQuery, ModelUtils.getAliasedNames(model, request.anchor), Trait.ALIAS); + for (TraitElement trait : traits) { if (CancelSupport.getDefault().isCancelled()) { return; } diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/elements/IndexQueryImpl.java b/php/php.editor/src/org/netbeans/modules/php/editor/elements/IndexQueryImpl.java index a1b1de7c0f43..2137901f7114 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/elements/IndexQueryImpl.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/elements/IndexQueryImpl.java @@ -2208,6 +2208,8 @@ public Set getTopLevelElements(final NameKind query, final Set getTraits() { return getTraits(NameKind.empty()); } + @Override + public Set getTraits(NameKind query, Set aliasedNames, Trait trait) { + final Set retval = new HashSet<>(); + for (final AliasedName aliasedName : aliasedNames) { + for (final NameKind nextQuery : queriesForAlias(query, aliasedName, PhpElementKind.TRAIT)) { + for (final TraitElement nextTrait : getTraitsImpl(nextQuery)) { + final AliasedTrait aliasedTrait = new AliasedTrait(aliasedName, nextTrait); + if (trait != null) { + aliasedTrait.setTrait(trait); + } + retval.add(aliasedTrait); + } + } + } + retval.addAll(getTraitsImpl(query)); + return retval; + } + @Override public Set getTraits(final NameKind query) { final Set retval = new HashSet<>(); diff --git a/php/php.editor/test/unit/data/testfiles/completion/lib/php54/callableTypeHint.php.testCallableTypeHint_01.completion b/php/php.editor/test/unit/data/testfiles/completion/lib/php54/callableTypeHint.php.testCallableTypeHint_01.completion index 7f35e0401138..c1f7715d4c8c 100644 --- a/php/php.editor/test/unit/data/testfiles/completion/lib/php54/callableTypeHint.php.testCallableTypeHint_01.completion +++ b/php/php.editor/test/unit/data/testfiles/completion/lib/php54/callableTypeHint.php.testCallableTypeHint_01.completion @@ -1,7 +1,9 @@ Code completion result for source line: function callableTypeHint(|callable $arg) { (QueryType=COMPLETION, prefixSearch=true, caseSensitive=true) +PACKAGE AliasedNameTest [PUBLIC] null PACKAGE Foo [PUBLIC] null +PACKAGE Test [PUBLIC] null CLASS CallableClass [PUBLIC] callableTypeHint.php ------------------------------------ PACKAGE Bar [PUBLIC] Foo @@ -9,6 +11,7 @@ CLASS AliasedClassName [PUBLIC] Foo\Bar CLASS AnonymousObject [PUBLIC] anonymousObjectVariables.php CLASS BaseClass [PUBLIC] traits.php CLASS MyCls [PUBLIC] anonymousObjectVariablesNs.php +CLASS TestClass [PUBLIC] Test CLASS TraitedClass [PUBLIC] traits.php CLASS WithMultiUses [PUBLIC] traitsMultiUse.php KEYWORD array null diff --git a/php/php.editor/test/unit/data/testfiles/completion/lib/php54/callableTypeHint.php.testCallableTypeHint_03.completion b/php/php.editor/test/unit/data/testfiles/completion/lib/php54/callableTypeHint.php.testCallableTypeHint_03.completion index 7cb11fff46bc..a4d00d4c63b3 100644 --- a/php/php.editor/test/unit/data/testfiles/completion/lib/php54/callableTypeHint.php.testCallableTypeHint_03.completion +++ b/php/php.editor/test/unit/data/testfiles/completion/lib/php54/callableTypeHint.php.testCallableTypeHint_03.completion @@ -1,7 +1,9 @@ Code completion result for source line: function __construct(|callable $arg) { (QueryType=COMPLETION, prefixSearch=true, caseSensitive=true) +PACKAGE AliasedNameTest [PUBLIC] null PACKAGE Foo [PUBLIC] null +PACKAGE Test [PUBLIC] null CLASS CallableClass [PUBLIC] callableTypeHint.php ------------------------------------ PACKAGE Bar [PUBLIC] Foo @@ -9,6 +11,7 @@ CLASS AliasedClassName [PUBLIC] Foo\Bar CLASS AnonymousObject [PUBLIC] anonymousObjectVariables.php CLASS BaseClass [PUBLIC] traits.php CLASS MyCls [PUBLIC] anonymousObjectVariablesNs.php +CLASS TestClass [PUBLIC] Test CLASS TraitedClass [PUBLIC] traits.php CLASS WithMultiUses [PUBLIC] traitsMultiUse.php KEYWORD array null diff --git a/php/php.editor/test/unit/data/testfiles/completion/lib/php54/traitsAliasedName01.php b/php/php.editor/test/unit/data/testfiles/completion/lib/php54/traitsAliasedName01.php new file mode 100644 index 000000000000..ba56843a72da --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/completion/lib/php54/traitsAliasedName01.php @@ -0,0 +1,31 @@ +^publicFirstField;", false); } + public void testTraitsAliasedName01() throws Exception { + checkCompletion("testfiles/completion/lib/php54/traitsAliasedName01.php", " use Alias^", false); + } + public void testShortArrays() throws Exception { checkCompletion("testfiles/completion/lib/php54/shortArrays.php", "$xxxAr^r;", false); } diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP81CodeCompletionTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP81CodeCompletionTest.java index de1b81dc52e4..f3014c2c4aa9 100644 --- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP81CodeCompletionTest.java +++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP81CodeCompletionTest.java @@ -1146,6 +1146,10 @@ public void testEnumsSpecialVariablesWithinInstanceContextGH5100_04() throws Exc checkCompletion("enumsSpecialVariablesWithinInstanceContextGH5100", " stat^ic::class;"); } + public void testEnumsAliasedName_01() throws Exception { + checkCompletion("enumsAliasedName", "Aliased^ // test"); + } + public void testFirstClassCallableSyntax_01() throws Exception { checkCompletionForFirstClassCallable("firstClassCallableSyntax", "tes^t(...);"); } From c470ae1e3816f45ccd84126cbe14e550921d3d68 Mon Sep 17 00:00:00 2001 From: Junichi Yamamoto Date: Mon, 5 Feb 2024 13:25:28 +0900 Subject: [PATCH 2/2] Add the Auto Import feature for Code Completion - https://github.com/apache/netbeans/issues/6947 - Add `Auto Import` as an option for code completion - Add `Prefer Import` and `Don't Import` options for global namespace items(`Don't Import` is enabled by default) - `File Scope` means a php file without a namespace name (e.g. `

`) - Add `File Scope`(unchecked by default) and `Namespace Scope`(checked by default) options - Don't add a use statement if use list has the same name item(Instead, the result of "Smart" or "Unqualified" CC is used) - Add unit tests Note: A use statement may not be added to an expected position if the existing use list is not sorted(ignore cases) --- .../modules/php/editor/CodeUtils.java | 1 + .../php/editor/codegen/AutoImport.java | 971 +++++ .../codegen/PHPCodeTemplateProcessor.java | 69 +- .../editor/completion/PHPCompletionItem.java | 157 +- .../php/editor/options/Bundle.properties | 15 + .../editor/options/CodeCompletionPanel.form | 285 +- .../editor/options/CodeCompletionPanel.java | 317 +- .../php/editor/options/OptionsUtils.java | 89 + .../testGroupUsesC01/testGroupUsesC01.php | 29 + ...1.php.testGroupUsesC01_Const01a.autoimport | 30 + ...1.php.testGroupUsesC01_Const01b.autoimport | 30 + ...01.php.testGroupUsesC01_Const02.autoimport | 30 + ...01.php.testGroupUsesC01_Const03.autoimport | 30 + ...1.php.testGroupUsesC01_Const04a.autoimport | 30 + ...1.php.testGroupUsesC01_Const04b.autoimport | 30 + ...hp.testGroupUsesC01_Function01a.autoimport | 30 + ...hp.testGroupUsesC01_Function01b.autoimport | 31 + ...hp.testGroupUsesC01_Function01c.autoimport | 30 + ...hp.testGroupUsesC01_Function01d.autoimport | 31 + ...01.php.testGroupUsesC01_Type01a.autoimport | 30 + ...01.php.testGroupUsesC01_Type01b.autoimport | 31 + .../testGroupUsesF01/testGroupUsesF01.php | 29 + ...1.php.testGroupUsesF01_Const01a.autoimport | 30 + ...1.php.testGroupUsesF01_Const01b.autoimport | 31 + ...1.php.testGroupUsesF01_Const01c.autoimport | 30 + ...1.php.testGroupUsesF01_Const01d.autoimport | 31 + ...php.testGroupUsesF01_Function01.autoimport | 29 + ...hp.testGroupUsesF01_Function02a.autoimport | 30 + ...hp.testGroupUsesF01_Function02b.autoimport | 30 + ...hp.testGroupUsesF01_Function02c.autoimport | 30 + ...hp.testGroupUsesF01_Function02d.autoimport | 30 + ...hp.testGroupUsesF01_Function03a.autoimport | 30 + ...hp.testGroupUsesF01_Function03b.autoimport | 30 + ...01.php.testGroupUsesF01_Type01a.autoimport | 30 + ...01.php.testGroupUsesF01_Type01b.autoimport | 31 + .../testGroupUsesT01/testGroupUsesT01.php | 28 + ...1.php.testGroupUsesT01_Const01a.autoimport | 29 + ...1.php.testGroupUsesT01_Const01b.autoimport | 30 + ...hp.testGroupUsesT01_Function01a.autoimport | 29 + ...hp.testGroupUsesT01_Function01b.autoimport | 30 + ...T01.php.testGroupUsesT01_Type01.autoimport | 28 + ...01.php.testGroupUsesT01_Type02a.autoimport | 29 + ...01.php.testGroupUsesT01_Type02b.autoimport | 29 + ...01.php.testGroupUsesT01_Type03a.autoimport | 29 + ...01.php.testGroupUsesT01_Type03b.autoimport | 29 + ...T01.php.testGroupUsesT01_Type04.autoimport | 29 + ...T01.php.testGroupUsesT01_Type05.autoimport | 29 + ...01.php.testGroupUsesT01_Type06a.autoimport | 29 + ...01.php.testGroupUsesT01_Type06b.autoimport | 29 + .../testGroupUsesT02/testGroupUsesT02.php | 30 + ...2.php.testGroupUsesT02_Const01a.autoimport | 31 + ...2.php.testGroupUsesT02_Const01b.autoimport | 32 + ...hp.testGroupUsesT02_Function01a.autoimport | 31 + ...hp.testGroupUsesT02_Function01b.autoimport | 32 + ...T02.php.testGroupUsesT02_Type01.autoimport | 31 + ...T02.php.testGroupUsesT02_Type02.autoimport | 31 + ...T02.php.testGroupUsesT02_Type03.autoimport | 31 + ...T02.php.testGroupUsesT02_Type04.autoimport | 31 + ...T02.php.testGroupUsesT02_Type05.autoimport | 31 + ...02.php.testGroupUsesT02_Type06a.autoimport | 31 + ...02.php.testGroupUsesT02_Type06b.autoimport | 31 + .../testGroupUsesT03/testGroupUsesT03.php | 35 + ...3.php.testGroupUsesT03_Const01a.autoimport | 36 + ...3.php.testGroupUsesT03_Const01b.autoimport | 37 + ...hp.testGroupUsesT03_Function01a.autoimport | 36 + ...hp.testGroupUsesT03_Function01b.autoimport | 37 + ...T03.php.testGroupUsesT03_Type01.autoimport | 36 + ...T03.php.testGroupUsesT03_Type02.autoimport | 36 + ...T03.php.testGroupUsesT03_Type03.autoimport | 36 + ...T03.php.testGroupUsesT03_Type04.autoimport | 36 + ...T03.php.testGroupUsesT03_Type05.autoimport | 36 + .../testGroupUsesT04/testGroupUsesT04.php | 27 + ...4.php.testGroupUsesT04_Const01a.autoimport | 28 + ...4.php.testGroupUsesT04_Const01b.autoimport | 29 + ...hp.testGroupUsesT04_Function01a.autoimport | 28 + ...hp.testGroupUsesT04_Function01b.autoimport | 29 + ...T04.php.testGroupUsesT04_Type01.autoimport | 28 + ...T04.php.testGroupUsesT04_Type02.autoimport | 27 + ...04.php.testGroupUsesT04_Type03a.autoimport | 28 + ...04.php.testGroupUsesT04_Type03b.autoimport | 27 + ...T04.php.testGroupUsesT04_Type04.autoimport | 28 + ...T04.php.testGroupUsesT04_Type05.autoimport | 29 + ...T04.php.testGroupUsesT04_Type06.autoimport | 28 + .../testGroupUsesTC01a/testGroupUsesTC01a.php | 35 + ...php.testGroupUsesTC01a_Const01a.autoimport | 36 + ...php.testGroupUsesTC01a_Const01b.autoimport | 36 + ...php.testGroupUsesTC01a_Const01c.autoimport | 36 + ...php.testGroupUsesTC01a_Const01d.autoimport | 36 + ...php.testGroupUsesTC01a_Const02a.autoimport | 36 + ...php.testGroupUsesTC01a_Const02b.autoimport | 36 + ...php.testGroupUsesTC01a_Const02c.autoimport | 36 + ...php.testGroupUsesTC01a_Const02d.autoimport | 36 + ....php.testGroupUsesTC01a_Const03.autoimport | 36 + ....php.testGroupUsesTC01a_Const04.autoimport | 36 + ...php.testGroupUsesTC01a_Const05a.autoimport | 36 + ...php.testGroupUsesTC01a_Const05b.autoimport | 36 + ....testGroupUsesTC01a_Function01a.autoimport | 36 + ....testGroupUsesTC01a_Function01b.autoimport | 37 + ....testGroupUsesTC01a_Function01c.autoimport | 35 + ....testGroupUsesTC01a_Function01d.autoimport | 37 + ...a.php.testGroupUsesTC01a_Type01.autoimport | 36 + ....php.testGroupUsesTC01a_Type02a.autoimport | 36 + ....php.testGroupUsesTC01a_Type02b.autoimport | 36 + ....php.testGroupUsesTC01a_Type03a.autoimport | 35 + ....php.testGroupUsesTC01a_Type03b.autoimport | 36 + .../testGroupUsesTC01b/testGroupUsesTC01b.php | 35 + ...php.testGroupUsesTC01b_Const01a.autoimport | 36 + ...php.testGroupUsesTC01b_Const01b.autoimport | 37 + ...php.testGroupUsesTC01b_Const01c.autoimport | 36 + ...php.testGroupUsesTC01b_Const01d.autoimport | 37 + ...php.testGroupUsesTC01b_Const02a.autoimport | 36 + ...php.testGroupUsesTC01b_Const02b.autoimport | 36 + ....php.testGroupUsesTC01b_Const03.autoimport | 36 + ....php.testGroupUsesTC01b_Const04.autoimport | 36 + ...php.testGroupUsesTC01b_Const05a.autoimport | 36 + ...php.testGroupUsesTC01b_Const05b.autoimport | 36 + ....testGroupUsesTC01b_Function01a.autoimport | 36 + ....testGroupUsesTC01b_Function01b.autoimport | 37 + ....testGroupUsesTC01b_Function01c.autoimport | 36 + ....testGroupUsesTC01b_Function01d.autoimport | 38 + ...b.php.testGroupUsesTC01b_Type01.autoimport | 36 + ....php.testGroupUsesTC01b_Type02a.autoimport | 36 + ....php.testGroupUsesTC01b_Type02b.autoimport | 36 + ....php.testGroupUsesTC01b_Type03a.autoimport | 36 + ....php.testGroupUsesTC01b_Type03b.autoimport | 37 + .../testGroupUsesTF01/testGroupUsesTF01.php | 39 + ...p.testGroupUsesTF01_Function01a.autoimport | 40 + ...p.testGroupUsesTF01_Function01b.autoimport | 41 + ...p.testGroupUsesTF01_Function01c.autoimport | 40 + ...p.testGroupUsesTF01_Function01d.autoimport | 41 + ...p.testGroupUsesTF01_Function02a.autoimport | 40 + ...p.testGroupUsesTF01_Function02b.autoimport | 40 + ...p.testGroupUsesTF01_Function03a.autoimport | 40 + ...p.testGroupUsesTF01_Function03b.autoimport | 40 + ...hp.testGroupUsesTF01_Function04.autoimport | 40 + ...hp.testGroupUsesTF01_Function05.autoimport | 40 + ...hp.testGroupUsesTF01_Function06.autoimport | 40 + ...01.php.testGroupUsesTF01_Type01.autoimport | 40 + ...01.php.testGroupUsesTF01_Type02.autoimport | 40 + ...01.php.testGroupUsesTF01_Type03.autoimport | 40 + .../testGroupUsesTFC01/testGroupUsesTFC01.php | 39 + ...php.testGroupUsesTFC01_Const01a.autoimport | 40 + ...php.testGroupUsesTFC01_Const01b.autoimport | 41 + ...php.testGroupUsesTFC01_Const01c.autoimport | 40 + ...php.testGroupUsesTFC01_Const01d.autoimport | 41 + ....php.testGroupUsesTFC01_Const02.autoimport | 40 + ....php.testGroupUsesTFC01_Const03.autoimport | 40 + ....php.testGroupUsesTFC01_Const04.autoimport | 40 + ....php.testGroupUsesTFC01_Const05.autoimport | 40 + ....php.testGroupUsesTFC01_Const06.autoimport | 39 + ....php.testGroupUsesTFC01_Const07.autoimport | 40 + ....php.testGroupUsesTFC01_Const08.autoimport | 40 + ....php.testGroupUsesTFC01_Const09.autoimport | 40 + ...php.testGroupUsesTFC01_Const10a.autoimport | 40 + ...php.testGroupUsesTFC01_Const10b.autoimport | 40 + ...php.testGroupUsesTFC01_Const10c.autoimport | 40 + ...php.testGroupUsesTFC01_Const10d.autoimport | 40 + ....testGroupUsesTFC01_Function01a.autoimport | 40 + ....testGroupUsesTFC01_Function01b.autoimport | 41 + ....testGroupUsesTFC01_Function01c.autoimport | 40 + ....testGroupUsesTFC01_Function01d.autoimport | 41 + ....testGroupUsesTFC01_Function02a.autoimport | 40 + ....testGroupUsesTFC01_Function02b.autoimport | 40 + ...p.testGroupUsesTFC01_Function03.autoimport | 40 + ...p.testGroupUsesTFC01_Function04.autoimport | 40 + ...p.testGroupUsesTFC01_Function05.autoimport | 40 + ...p.testGroupUsesTFC01_Function06.autoimport | 40 + ....testGroupUsesTFC01_Function07a.autoimport | 40 + ....testGroupUsesTFC01_Function07b.autoimport | 41 + ....testGroupUsesTFC01_Function07c.autoimport | 40 + ....testGroupUsesTFC01_Function07d.autoimport | 41 + ...1.php.testGroupUsesTFC01_Type01.autoimport | 40 + ...1.php.testGroupUsesTFC01_Type02.autoimport | 40 + ...1.php.testGroupUsesTFC01_Type03.autoimport | 40 + ...1.php.testGroupUsesTFC01_Type04.autoimport | 40 + ...1.php.testGroupUsesTFC01_Type05.autoimport | 40 + ...1.php.testGroupUsesTFC01_Type06.autoimport | 40 + ....php.testGroupUsesTFC01_Type07a.autoimport | 40 + ....php.testGroupUsesTFC01_Type07b.autoimport | 41 + .../testInSameNamespace01.php | 24 + ....php.testInSameNamespace01_Type.autoimport | 24 + .../testMixedUsesC01/testMixedUsesC01.php | 34 + ...1.php.testMixedUsesC01_Const01a.autoimport | 35 + ...1.php.testMixedUsesC01_Const01b.autoimport | 35 + ...01.php.testMixedUsesC01_Const02.autoimport | 35 + ...01.php.testMixedUsesC01_Const03.autoimport | 35 + ...01.php.testMixedUsesC01_Const04.autoimport | 35 + ...01.php.testMixedUsesC01_Const05.autoimport | 35 + ...01.php.testMixedUsesC01_Const06.autoimport | 35 + ...01.php.testMixedUsesC01_Const07.autoimport | 35 + ...01.php.testMixedUsesC01_Const08.autoimport | 35 + ...01.php.testMixedUsesC01_Const09.autoimport | 35 + ...01.php.testMixedUsesC01_Const10.autoimport | 35 + ...1.php.testMixedUsesC01_Const11a.autoimport | 35 + ...1.php.testMixedUsesC01_Const11b.autoimport | 35 + ...hp.testMixedUsesC01_Function01a.autoimport | 35 + ...hp.testMixedUsesC01_Function01b.autoimport | 36 + ...hp.testMixedUsesC01_Function01c.autoimport | 35 + ...hp.testMixedUsesC01_Function01d.autoimport | 36 + ...01.php.testMixedUsesC01_Type01a.autoimport | 35 + ...01.php.testMixedUsesC01_Type01b.autoimport | 36 + .../testMixedUsesF01/testMixedUsesF01.php | 33 + ...1.php.testMixedUsesF01_Const01a.autoimport | 34 + ...1.php.testMixedUsesF01_Const01b.autoimport | 35 + ...1.php.testMixedUsesF01_Const01c.autoimport | 34 + ...1.php.testMixedUsesF01_Const01d.autoimport | 35 + ...hp.testMixedUsesF01_Function01a.autoimport | 34 + ...hp.testMixedUsesF01_Function01b.autoimport | 34 + ...php.testMixedUsesF01_Function02.autoimport | 34 + ...php.testMixedUsesF01_Function03.autoimport | 34 + ...php.testMixedUsesF01_Function04.autoimport | 34 + ...php.testMixedUsesF01_Function05.autoimport | 34 + ...php.testMixedUsesF01_Function06.autoimport | 34 + ...php.testMixedUsesF01_Function07.autoimport | 34 + ...php.testMixedUsesF01_Function08.autoimport | 34 + ...php.testMixedUsesF01_Function09.autoimport | 34 + ...01.php.testMixedUsesF01_Type01a.autoimport | 34 + ...01.php.testMixedUsesF01_Type01b.autoimport | 35 + .../testMixedUsesT01/testMixedUsesT01.php | 30 + ...1.php.testMixedUsesT01_Const01a.autoimport | 31 + ...1.php.testMixedUsesT01_Const01b.autoimport | 32 + ...hp.testMixedUsesT01_Function01a.autoimport | 31 + ...hp.testMixedUsesT01_Function01b.autoimport | 32 + ...T01.php.testMixedUsesT01_Type01.autoimport | 31 + ...T01.php.testMixedUsesT01_Type02.autoimport | 31 + ...01.php.testMixedUsesT01_Type03a.autoimport | 31 + ...01.php.testMixedUsesT01_Type03b.autoimport | 31 + ...T01.php.testMixedUsesT01_Type04.autoimport | 31 + ...T01.php.testMixedUsesT01_Type05.autoimport | 31 + .../testMixedUsesTC01/testMixedUsesTC01.php | 37 + ....php.testMixedUsesTC01_Const01a.autoimport | 38 + ....php.testMixedUsesTC01_Const01b.autoimport | 39 + ....php.testMixedUsesTC01_Const01c.autoimport | 38 + ....php.testMixedUsesTC01_Const01d.autoimport | 39 + ...1.php.testMixedUsesTC01_Const02.autoimport | 38 + ...1.php.testMixedUsesTC01_Const03.autoimport | 38 + ...1.php.testMixedUsesTC01_Const04.autoimport | 38 + ...1.php.testMixedUsesTC01_Const05.autoimport | 38 + ...1.php.testMixedUsesTC01_Const06.autoimport | 38 + ...1.php.testMixedUsesTC01_Const07.autoimport | 38 + ...1.php.testMixedUsesTC01_Const08.autoimport | 38 + ...1.php.testMixedUsesTC01_Const09.autoimport | 38 + ...p.testMixedUsesTC01_Function01a.autoimport | 38 + ...p.testMixedUsesTC01_Function01b.autoimport | 39 + ...p.testMixedUsesTC01_Function01c.autoimport | 38 + ...p.testMixedUsesTC01_Function01d.autoimport | 40 + ...01.php.testMixedUsesTC01_Type01.autoimport | 38 + ...01.php.testMixedUsesTC01_Type02.autoimport | 38 + ...01.php.testMixedUsesTC01_Type03.autoimport | 38 + ...01.php.testMixedUsesTC01_Type04.autoimport | 38 + ...01.php.testMixedUsesTC01_Type05.autoimport | 38 + ...1.php.testMixedUsesTC01_Type06a.autoimport | 38 + ...1.php.testMixedUsesTC01_Type06b.autoimport | 39 + .../testMixedUsesTCF01/testMixedUsesTCF01.php | 45 + ...php.testMixedUsesTCF01_Const01a.autoimport | 46 + ...php.testMixedUsesTCF01_Const01b.autoimport | 47 + ...php.testMixedUsesTCF01_Const01c.autoimport | 46 + ...php.testMixedUsesTCF01_Const01d.autoimport | 47 + ....php.testMixedUsesTCF01_Const02.autoimport | 46 + ....php.testMixedUsesTCF01_Const03.autoimport | 46 + ....php.testMixedUsesTCF01_Const04.autoimport | 46 + ....php.testMixedUsesTCF01_Const05.autoimport | 46 + ....php.testMixedUsesTCF01_Const06.autoimport | 46 + ...php.testMixedUsesTCF01_Const07a.autoimport | 46 + ...php.testMixedUsesTCF01_Const07b.autoimport | 47 + ...php.testMixedUsesTCF01_Const07c.autoimport | 46 + ...php.testMixedUsesTCF01_Const07d.autoimport | 47 + ....testMixedUsesTCF01_Function01a.autoimport | 46 + ....testMixedUsesTCF01_Function01b.autoimport | 47 + ....testMixedUsesTCF01_Function01c.autoimport | 46 + ....testMixedUsesTCF01_Function01d.autoimport | 47 + ...p.testMixedUsesTCF01_Function02.autoimport | 46 + ...p.testMixedUsesTCF01_Function03.autoimport | 46 + ...p.testMixedUsesTCF01_Function04.autoimport | 46 + ...p.testMixedUsesTCF01_Function05.autoimport | 46 + ...p.testMixedUsesTCF01_Function06.autoimport | 46 + ...1.php.testMixedUsesTCF01_Type01.autoimport | 46 + ...1.php.testMixedUsesTCF01_Type02.autoimport | 46 + ...1.php.testMixedUsesTCF01_Type03.autoimport | 46 + ...1.php.testMixedUsesTCF01_Type04.autoimport | 46 + ...1.php.testMixedUsesTCF01_Type05.autoimport | 46 + ...1.php.testMixedUsesTCF01_Type06.autoimport | 46 + ....php.testMixedUsesTCF01_Type07a.autoimport | 46 + ....php.testMixedUsesTCF01_Type07b.autoimport | 47 + .../testMixedUsesTF01/testMixedUsesTF01.php | 39 + ....php.testMixedUsesTF01_Const01a.autoimport | 39 + ....php.testMixedUsesTF01_Const01b.autoimport | 41 + ....php.testMixedUsesTF01_Const01c.autoimport | 40 + ....php.testMixedUsesTF01_Const01d.autoimport | 41 + ...p.testMixedUsesTF01_Function01a.autoimport | 40 + ...p.testMixedUsesTF01_Function01b.autoimport | 40 + ...hp.testMixedUsesTF01_Function02.autoimport | 40 + ...hp.testMixedUsesTF01_Function03.autoimport | 40 + ...hp.testMixedUsesTF01_Function04.autoimport | 40 + ...hp.testMixedUsesTF01_Function05.autoimport | 40 + ...hp.testMixedUsesTF01_Function06.autoimport | 40 + ...hp.testMixedUsesTF01_Function07.autoimport | 40 + ...hp.testMixedUsesTF01_Function08.autoimport | 40 + ...hp.testMixedUsesTF01_Function09.autoimport | 40 + ...01.php.testMixedUsesTF01_Type01.autoimport | 40 + ...01.php.testMixedUsesTF01_Type02.autoimport | 40 + ...01.php.testMixedUsesTF01_Type03.autoimport | 40 + ...01.php.testMixedUsesTF01_Type04.autoimport | 40 + ...01.php.testMixedUsesTF01_Type05.autoimport | 40 + ...01.php.testMixedUsesTF01_Type06.autoimport | 40 + ...1.php.testMixedUsesTF01_Type07a.autoimport | 39 + ...1.php.testMixedUsesTF01_Type07b.autoimport | 40 + .../testMultipleUsesC01.php | 26 + ...php.testMultipleUsesC01_Const01.autoimport | 26 + ...hp.testMultipleUsesC01_Const02a.autoimport | 27 + ...hp.testMultipleUsesC01_Const02b.autoimport | 27 + ...hp.testMultipleUsesC01_Const03a.autoimport | 27 + ...hp.testMultipleUsesC01_Const03b.autoimport | 27 + ...hp.testMultipleUsesC01_Const03c.autoimport | 27 + ...hp.testMultipleUsesC01_Const03d.autoimport | 27 + ...hp.testMultipleUsesC01_Const04a.autoimport | 27 + ...hp.testMultipleUsesC01_Const04b.autoimport | 27 + ...hp.testMultipleUsesC01_Const04c.autoimport | 27 + ...hp.testMultipleUsesC01_Const04d.autoimport | 27 + ...testMultipleUsesC01_Function01a.autoimport | 27 + ...testMultipleUsesC01_Function01b.autoimport | 28 + ...testMultipleUsesC01_Function01c.autoimport | 27 + ...testMultipleUsesC01_Function01d.autoimport | 28 + ...php.testMultipleUsesC01_Type01a.autoimport | 27 + ...php.testMultipleUsesC01_Type01b.autoimport | 28 + .../testMultipleUsesF01.php | 26 + ...hp.testMultipleUsesF01_Const01a.autoimport | 27 + ...hp.testMultipleUsesF01_Const01b.autoimport | 28 + ...hp.testMultipleUsesF01_Const01c.autoimport | 27 + ...hp.testMultipleUsesF01_Const01d.autoimport | 28 + ....testMultipleUsesF01_Function01.autoimport | 26 + ...testMultipleUsesF01_Function02a.autoimport | 27 + ...testMultipleUsesF01_Function02b.autoimport | 27 + ...testMultipleUsesF01_Function02c.autoimport | 27 + ...testMultipleUsesF01_Function02d.autoimport | 27 + ...testMultipleUsesF01_Function03a.autoimport | 27 + ...testMultipleUsesF01_Function03b.autoimport | 27 + ...php.testMultipleUsesF01_Type01a.autoimport | 27 + ...php.testMultipleUsesF01_Type01b.autoimport | 28 + .../testMultipleUsesT01.php | 26 + ...hp.testMultipleUsesT01_Const01a.autoimport | 27 + ...hp.testMultipleUsesT01_Const01b.autoimport | 28 + ...testMultipleUsesT01_Function01a.autoimport | 27 + ...testMultipleUsesT01_Function01b.autoimport | 28 + ....php.testMultipleUsesT01_Type01.autoimport | 26 + ....php.testMultipleUsesT01_Type02.autoimport | 27 + ....php.testMultipleUsesT01_Type03.autoimport | 27 + .../testMultipleUsesT02.php | 29 + ....php.testMultipleUsesT02_Type01.autoimport | 29 + ....php.testMultipleUsesT02_Type02.autoimport | 30 + ....php.testMultipleUsesT02_Type03.autoimport | 30 + ....php.testMultipleUsesT02_Type04.autoimport | 30 + ....php.testMultipleUsesT02_Type05.autoimport | 30 + .../testNoExistingUses01.php | 23 + ....php.testNoExistingUses01_CONST.autoimport | 25 + ...p.testNoExistingUses01_Function.autoimport | 25 + ...1.php.testNoExistingUses01_Type.autoimport | 25 + .../testNoExistingUses02.php | 24 + ....php.testNoExistingUses02_CONST.autoimport | 26 + ...p.testNoExistingUses02_Function.autoimport | 26 + ...2.php.testNoExistingUses02_Type.autoimport | 26 + .../testNoExistingUses03.php | 23 + ...3.php.testNoExistingUses03_Type.autoimport | 25 + .../testNoExistingUses04a.php | 24 + ....php.testNoExistingUses04a_Type.autoimport | 26 + .../testNoExistingUses04b.php | 24 + ....php.testNoExistingUses04b_Type.autoimport | 26 + .../testNoExistingUses05.php | 27 + ...5.php.testNoExistingUses05_Type.autoimport | 29 + .../testNoExistingUses06a.php | 28 + ....php.testNoExistingUses06a_Type.autoimport | 30 + .../testNoExistingUses06b.php | 28 + ....php.testNoExistingUses06b_Type.autoimport | 30 + .../testNoExistingUses07.php | 29 + ...7.php.testNoExistingUses07_Type.autoimport | 31 + .../testNoExistingUses08.php | 28 + ...8.php.testNoExistingUses08_Type.autoimport | 30 + .../testNoExistingUses09.php | 30 + ...9.php.testNoExistingUses09_Type.autoimport | 32 + .../testNoExistingUsesWithDeclare01a.php | 28 + ...ExistingUsesWithDeclare01a_Type.autoimport | 30 + .../testNoExistingUsesWithDeclare01b.php | 29 + ...ExistingUsesWithDeclare01b_Type.autoimport | 31 + .../testNoExistingUsesWithDeclare02a.php | 30 + ...ExistingUsesWithDeclare02a_Type.autoimport | 32 + .../testNoExistingUsesWithDeclare02b.php | 31 + ...ExistingUsesWithDeclare02b_Type.autoimport | 33 + .../testNoExistingUsesWithDeclare02c.php | 33 + ...ExistingUsesWithDeclare02c_Type.autoimport | 35 + .../testNoExistingUsesWithDeclare03.php | 22 + ...oExistingUsesWithDeclare03_Type.autoimport | 24 + .../testNoExistingUsesWithDeclare04.php | 25 + ...stingUsesWithDeclare04_Function.autoimport | 27 + .../testSingleUsesC01/testSingleUsesC01.php | 26 + ...1.php.testSingleUsesC01_Const01.autoimport | 27 + ...1.php.testSingleUsesC01_Const02.autoimport | 26 + ...1.php.testSingleUsesC01_Const03.autoimport | 27 + ...1.php.testSingleUsesC01_Const04.autoimport | 27 + ...p.testSingleUsesC01_Function01a.autoimport | 27 + ...p.testSingleUsesC01_Function01b.autoimport | 28 + ...p.testSingleUsesC01_Function01c.autoimport | 28 + ...1.php.testSingleUsesC01_Type01a.autoimport | 27 + ...1.php.testSingleUsesC01_Type01b.autoimport | 28 + .../testSingleUsesC02/testSingleUsesC02.php | 28 + ...2.php.testSingleUsesC02_Const01.autoimport | 28 + ...2.php.testSingleUsesC02_Const02.autoimport | 28 + ...2.php.testSingleUsesC02_Const03.autoimport | 29 + ...2.php.testSingleUsesC02_Const04.autoimport | 29 + ...2.php.testSingleUsesC02_Const05.autoimport | 29 + ...p.testSingleUsesC02_Function01a.autoimport | 29 + ...p.testSingleUsesC02_Function01b.autoimport | 30 + ...p.testSingleUsesC02_Function01c.autoimport | 30 + ...p.testSingleUsesC02_Function02a.autoimport | 29 + ...p.testSingleUsesC02_Function02b.autoimport | 30 + ...p.testSingleUsesC02_Function02c.autoimport | 30 + ...2.php.testSingleUsesC02_Type01a.autoimport | 29 + ...2.php.testSingleUsesC02_Type01b.autoimport | 30 + .../testSingleUsesC03/testSingleUsesC03.php | 28 + ...3.php.testSingleUsesC03_Const01.autoimport | 29 + ...3.php.testSingleUsesC03_Const02.autoimport | 29 + ...p.testSingleUsesC03_Function01a.autoimport | 29 + ...p.testSingleUsesC03_Function01b.autoimport | 30 + ...p.testSingleUsesC03_Function01c.autoimport | 30 + ...hp.testSingleUsesC03_Function02.autoimport | 29 + ...3.php.testSingleUsesC03_Type01a.autoimport | 29 + ...3.php.testSingleUsesC03_Type01b.autoimport | 30 + .../testSingleUsesCF01/testSingleUsesCF01.php | 28 + ....php.testSingleUsesCF01_Const01.autoimport | 28 + ...php.testSingleUsesCF01_Const02a.autoimport | 29 + ...php.testSingleUsesCF01_Const02b.autoimport | 29 + ...php.testSingleUsesCF01_Const02c.autoimport | 29 + ...php.testSingleUsesCF01_Const02d.autoimport | 29 + ...php.testSingleUsesCF01_Const03a.autoimport | 28 + ...php.testSingleUsesCF01_Const03b.autoimport | 29 + ...php.testSingleUsesCF01_Const03c.autoimport | 28 + ...php.testSingleUsesCF01_Const03d.autoimport | 29 + ....testSingleUsesCF01_Function01a.autoimport | 29 + ....testSingleUsesCF01_Function01b.autoimport | 29 + ....testSingleUsesCF01_Function01c.autoimport | 29 + ....testSingleUsesCF01_Function01d.autoimport | 29 + ....testSingleUsesCF01_Function02a.autoimport | 29 + ....testSingleUsesCF01_Function02b.autoimport | 29 + ....testSingleUsesCF01_Function02c.autoimport | 29 + ....testSingleUsesCF01_Function02d.autoimport | 29 + ....php.testSingleUsesCF01_Type01a.autoimport | 29 + ....php.testSingleUsesCF01_Type01b.autoimport | 30 + .../testSingleUsesCF02/testSingleUsesCF02.php | 31 + ....php.testSingleUsesCF02_Const01.autoimport | 31 + ...php.testSingleUsesCF02_Const02a.autoimport | 32 + ...php.testSingleUsesCF02_Const02b.autoimport | 32 + ...php.testSingleUsesCF02_Const02c.autoimport | 32 + ...php.testSingleUsesCF02_Const02d.autoimport | 32 + ...php.testSingleUsesCF02_Const03a.autoimport | 32 + ...php.testSingleUsesCF02_Const03b.autoimport | 33 + ...php.testSingleUsesCF02_Const03c.autoimport | 32 + ...php.testSingleUsesCF02_Const03d.autoimport | 33 + ....testSingleUsesCF02_Function01a.autoimport | 32 + ....testSingleUsesCF02_Function01b.autoimport | 33 + ....testSingleUsesCF02_Function01c.autoimport | 32 + ....testSingleUsesCF02_Function01d.autoimport | 33 + ...p.testSingleUsesCF02_Function02.autoimport | 32 + ....testSingleUsesCF02_Function03a.autoimport | 32 + ....testSingleUsesCF02_Function03b.autoimport | 32 + ....testSingleUsesCF02_Function03c.autoimport | 32 + ....testSingleUsesCF02_Function03d.autoimport | 32 + ....php.testSingleUsesCF02_Type01a.autoimport | 32 + ....php.testSingleUsesCF02_Type01b.autoimport | 33 + .../testSingleUsesCFT01.php | 38 + ...hp.testSingleUsesCFT01_Const01a.autoimport | 39 + ...hp.testSingleUsesCFT01_Const01b.autoimport | 39 + ...hp.testSingleUsesCFT01_Const02a.autoimport | 39 + ...hp.testSingleUsesCFT01_Const02b.autoimport | 39 + ...php.testSingleUsesCFT01_Const03.autoimport | 39 + ...hp.testSingleUsesCFT01_Const04a.autoimport | 38 + ...hp.testSingleUsesCFT01_Const04b.autoimport | 39 + ...hp.testSingleUsesCFT01_Const05a.autoimport | 39 + ...hp.testSingleUsesCFT01_Const05b.autoimport | 39 + ...testSingleUsesCFT01_Function01a.autoimport | 39 + ...testSingleUsesCFT01_Function01b.autoimport | 39 + ...testSingleUsesCFT01_Function01c.autoimport | 39 + ...testSingleUsesCFT01_Function01d.autoimport | 39 + ...testSingleUsesCFT01_Function02a.autoimport | 38 + ...testSingleUsesCFT01_Function02b.autoimport | 39 + ...testSingleUsesCFT01_Function02c.autoimport | 38 + ...testSingleUsesCFT01_Function02d.autoimport | 39 + ...php.testSingleUsesCFT01_Type01a.autoimport | 39 + ...php.testSingleUsesCFT01_Type01b.autoimport | 39 + ...php.testSingleUsesCFT01_Type02a.autoimport | 39 + ...php.testSingleUsesCFT01_Type02b.autoimport | 39 + .../testSingleUsesF01/testSingleUsesF01.php | 26 + ....php.testSingleUsesF01_Const01a.autoimport | 27 + ....php.testSingleUsesF01_Const01b.autoimport | 28 + ...p.testSingleUsesF01_Function01a.autoimport | 27 + ...p.testSingleUsesF01_Function01b.autoimport | 27 + ...hp.testSingleUsesF01_Function02.autoimport | 27 + ...hp.testSingleUsesF01_Function03.autoimport | 26 + ...1.php.testSingleUsesF01_Type01a.autoimport | 27 + ...1.php.testSingleUsesF01_Type01b.autoimport | 28 + .../testSingleUsesF02/testSingleUsesF02.php | 30 + ....php.testSingleUsesF02_Const01a.autoimport | 31 + ....php.testSingleUsesF02_Const01b.autoimport | 32 + ....php.testSingleUsesF02_Const01c.autoimport | 32 + ...p.testSingleUsesF02_Function01a.autoimport | 30 + ...p.testSingleUsesF02_Function01b.autoimport | 30 + ...p.testSingleUsesF02_Function02a.autoimport | 31 + ...p.testSingleUsesF02_Function02b.autoimport | 31 + ...hp.testSingleUsesF02_Function03.autoimport | 31 + ...hp.testSingleUsesF02_Function04.autoimport | 31 + ...hp.testSingleUsesF02_Function05.autoimport | 31 + ...hp.testSingleUsesF02_Function06.autoimport | 31 + ...hp.testSingleUsesF02_Function07.autoimport | 31 + ...2.php.testSingleUsesF02_Type01a.autoimport | 31 + ...2.php.testSingleUsesF02_Type01b.autoimport | 32 + .../testSingleUsesF03/testSingleUsesF03.php | 30 + ....php.testSingleUsesF03_Const01a.autoimport | 31 + ....php.testSingleUsesF03_Const01b.autoimport | 32 + ....php.testSingleUsesF03_Const01c.autoimport | 32 + ...hp.testSingleUsesF03_Function01.autoimport | 31 + ...hp.testSingleUsesF03_Function02.autoimport | 31 + ...hp.testSingleUsesF03_Function03.autoimport | 31 + ...3.php.testSingleUsesF03_Type01a.autoimport | 31 + ...3.php.testSingleUsesF03_Type01b.autoimport | 32 + .../testSingleUsesFC01/testSingleUsesFC01.php | 28 + ....php.testSingleUsesFC01_Const01.autoimport | 28 + ...php.testSingleUsesFC01_Const02a.autoimport | 29 + ...php.testSingleUsesFC01_Const02b.autoimport | 29 + ...php.testSingleUsesFC01_Const02c.autoimport | 29 + ...php.testSingleUsesFC01_Const02d.autoimport | 29 + ...php.testSingleUsesFC01_Const03a.autoimport | 29 + ...php.testSingleUsesFC01_Const03b.autoimport | 29 + ...php.testSingleUsesFC01_Const03c.autoimport | 29 + ...php.testSingleUsesFC01_Const03d.autoimport | 29 + ...p.testSingleUsesFC01_Function01.autoimport | 29 + ....testSingleUsesFC01_Function02a.autoimport | 28 + ....testSingleUsesFC01_Function02b.autoimport | 29 + ....testSingleUsesFC01_Function02c.autoimport | 28 + ....testSingleUsesFC01_Function02d.autoimport | 29 + ....php.testSingleUsesFC01_Type01a.autoimport | 29 + ....php.testSingleUsesFC01_Type01b.autoimport | 30 + .../testSingleUsesFC02/testSingleUsesFC02.php | 31 + ....php.testSingleUsesFC02_Const01.autoimport | 31 + ...php.testSingleUsesFC02_Const02a.autoimport | 32 + ...php.testSingleUsesFC02_Const02b.autoimport | 33 + ...php.testSingleUsesFC02_Const02c.autoimport | 32 + ...php.testSingleUsesFC02_Const02d.autoimport | 33 + ...php.testSingleUsesFC02_Const03a.autoimport | 32 + ...php.testSingleUsesFC02_Const03b.autoimport | 32 + ...php.testSingleUsesFC02_Const03c.autoimport | 32 + ...php.testSingleUsesFC02_Const03d.autoimport | 32 + ...p.testSingleUsesFC02_Function01.autoimport | 32 + ...p.testSingleUsesFC02_Function02.autoimport | 32 + ....testSingleUsesFC02_Function02a.autoimport | 32 + ....testSingleUsesFC02_Function03a.autoimport | 32 + ....testSingleUsesFC02_Function03b.autoimport | 33 + ....testSingleUsesFC02_Function03c.autoimport | 32 + ....testSingleUsesFC02_Function03d.autoimport | 33 + ....php.testSingleUsesFC02_Type01a.autoimport | 32 + ....php.testSingleUsesFC02_Type01b.autoimport | 33 + .../testSingleUsesFCT01.php | 36 + ...hp.testSingleUsesFCT01_Const01a.autoimport | 37 + ...hp.testSingleUsesFCT01_Const01b.autoimport | 38 + ...hp.testSingleUsesFCT01_Const02a.autoimport | 37 + ...hp.testSingleUsesFCT01_Const02b.autoimport | 38 + ...hp.testSingleUsesFCT01_Const03a.autoimport | 37 + ...hp.testSingleUsesFCT01_Const03b.autoimport | 38 + ...testSingleUsesFCT01_Function01a.autoimport | 37 + ...testSingleUsesFCT01_Function01b.autoimport | 37 + ...testSingleUsesFCT01_Function01c.autoimport | 37 + ...testSingleUsesFCT01_Function01d.autoimport | 37 + ...testSingleUsesFCT01_Function02a.autoimport | 37 + ...testSingleUsesFCT01_Function02b.autoimport | 38 + ...testSingleUsesFCT01_Function02c.autoimport | 37 + ...testSingleUsesFCT01_Function02d.autoimport | 38 + ....testSingleUsesFCT01_Function03.autoimport | 36 + ...php.testSingleUsesFCT01_Type01a.autoimport | 37 + ...php.testSingleUsesFCT01_Type01b.autoimport | 38 + ...php.testSingleUsesFCT01_Type01c.autoimport | 37 + ...php.testSingleUsesFCT01_Type01d.autoimport | 38 + ...php.testSingleUsesFCT01_Type02a.autoimport | 37 + ...php.testSingleUsesFCT01_Type02b.autoimport | 37 + .../testSingleUsesT01/testSingleUsesT01.php | 26 + ....php.testSingleUsesT01_Const01a.autoimport | 27 + ....php.testSingleUsesT01_Const01b.autoimport | 28 + ....php.testSingleUsesT01_Const02a.autoimport | 27 + ....php.testSingleUsesT01_Const02b.autoimport | 28 + ...p.testSingleUsesT01_Function01a.autoimport | 27 + ...p.testSingleUsesT01_Function01b.autoimport | 28 + ...p.testSingleUsesT01_Function02a.autoimport | 27 + ...p.testSingleUsesT01_Function02b.autoimport | 28 + ...01.php.testSingleUsesT01_Type01.autoimport | 27 + ...01.php.testSingleUsesT01_Type02.autoimport | 27 + ...01.php.testSingleUsesT01_Type03.autoimport | 26 + ...01.php.testSingleUsesT01_Type04.autoimport | 27 + .../testSingleUsesT02/testSingleUsesT02.php | 28 + ....php.testSingleUsesT02_Const01a.autoimport | 29 + ....php.testSingleUsesT02_Const01b.autoimport | 30 + ...p.testSingleUsesT02_Function01a.autoimport | 29 + ...p.testSingleUsesT02_Function01b.autoimport | 30 + ...02.php.testSingleUsesT02_Type01.autoimport | 29 + ...02.php.testSingleUsesT02_Type02.autoimport | 29 + ...02.php.testSingleUsesT02_Type03.autoimport | 29 + ...02.php.testSingleUsesT02_Type04.autoimport | 29 + .../testSingleUsesT03/testSingleUsesT03.php | 28 + ....php.testSingleUsesT03_Const01a.autoimport | 29 + ....php.testSingleUsesT03_Const01b.autoimport | 30 + ...p.testSingleUsesT03_Function01a.autoimport | 29 + ...p.testSingleUsesT03_Function01b.autoimport | 30 + ...03.php.testSingleUsesT03_Type01.autoimport | 29 + .../testSingleUsesTC01/testSingleUsesTC01.php | 27 + ....php.testSingleUsesTC01_Const01.autoimport | 27 + ...php.testSingleUsesTC01_Const02a.autoimport | 28 + ...php.testSingleUsesTC01_Const02b.autoimport | 29 + ...php.testSingleUsesTC01_Const02c.autoimport | 28 + ...php.testSingleUsesTC01_Const02d.autoimport | 29 + ....php.testSingleUsesTC01_Const03.autoimport | 28 + ....testSingleUsesTC01_Function01a.autoimport | 28 + ....testSingleUsesTC01_Function01b.autoimport | 29 + ....testSingleUsesTC01_Function01c.autoimport | 28 + ....testSingleUsesTC01_Function01d.autoimport | 30 + ...1.php.testSingleUsesTC01_Type01.autoimport | 28 + ...1.php.testSingleUsesTC01_Type02.autoimport | 27 + ....php.testSingleUsesTC01_Type03a.autoimport | 28 + ....php.testSingleUsesTC01_Type03b.autoimport | 29 + ....php.testSingleUsesTC01_Type03c.autoimport | 28 + ....php.testSingleUsesTC01_Type03d.autoimport | 29 + .../testSingleUsesTC02/testSingleUsesTC02.php | 32 + ....php.testSingleUsesTC02_Const01.autoimport | 32 + ...php.testSingleUsesTC02_Const02a.autoimport | 33 + ...php.testSingleUsesTC02_Const02b.autoimport | 33 + ...php.testSingleUsesTC02_Const02c.autoimport | 33 + ...php.testSingleUsesTC02_Const02d.autoimport | 33 + ....php.testSingleUsesTC02_Const03.autoimport | 33 + ...php.testSingleUsesTC02_Const04a.autoimport | 33 + ...php.testSingleUsesTC02_Const04b.autoimport | 33 + ...php.testSingleUsesTC02_Const04c.autoimport | 33 + ...php.testSingleUsesTC02_Const04d.autoimport | 33 + ....testSingleUsesTC02_Function01a.autoimport | 33 + ....testSingleUsesTC02_Function01b.autoimport | 34 + ....testSingleUsesTC02_Function01c.autoimport | 32 + ....testSingleUsesTC02_Function01d.autoimport | 34 + ...2.php.testSingleUsesTC02_Type01.autoimport | 33 + ...2.php.testSingleUsesTC02_Type02.autoimport | 33 + ....php.testSingleUsesTC02_Type03a.autoimport | 32 + ....php.testSingleUsesTC02_Type03b.autoimport | 33 + ....php.testSingleUsesTC02_Type03c.autoimport | 32 + ....php.testSingleUsesTC02_Type03d.autoimport | 33 + .../testSingleUsesTF01/testSingleUsesTF01.php | 27 + ...php.testSingleUsesTF01_Const01a.autoimport | 28 + ...php.testSingleUsesTF01_Const01b.autoimport | 30 + ...php.testSingleUsesTF01_Const01c.autoimport | 28 + ...php.testSingleUsesTF01_Const01d.autoimport | 29 + ....testSingleUsesTF01_Function01a.autoimport | 28 + ....testSingleUsesTF01_Function01b.autoimport | 29 + ....testSingleUsesTF01_Function01c.autoimport | 29 + ....testSingleUsesTF01_Function02a.autoimport | 28 + ....testSingleUsesTF01_Function02b.autoimport | 28 + ....testSingleUsesTF01_Function02c.autoimport | 28 + ...p.testSingleUsesTF01_Function03.autoimport | 27 + ....php.testSingleUsesTF01_Type01a.autoimport | 28 + ....php.testSingleUsesTF01_Type01b.autoimport | 29 + ....php.testSingleUsesTF01_Type01c.autoimport | 29 + ....php.testSingleUsesTF01_Type02a.autoimport | 28 + ....php.testSingleUsesTF01_Type02b.autoimport | 28 + ....php.testSingleUsesTF01_Type02c.autoimport | 28 + .../testSingleUsesTF02/testSingleUsesTF02.php | 31 + ...php.testSingleUsesTF02_Const01a.autoimport | 31 + ...php.testSingleUsesTF02_Const01b.autoimport | 33 + ...php.testSingleUsesTF02_Const01c.autoimport | 32 + ...php.testSingleUsesTF02_Const01d.autoimport | 33 + ....testSingleUsesTF02_Function01a.autoimport | 32 + ....testSingleUsesTF02_Function01b.autoimport | 32 + ....testSingleUsesTF02_Function01c.autoimport | 32 + ....testSingleUsesTF02_Function01d.autoimport | 32 + ....testSingleUsesTF02_Function02a.autoimport | 32 + ....testSingleUsesTF02_Function02b.autoimport | 32 + ....testSingleUsesTF02_Function02c.autoimport | 32 + ....testSingleUsesTF02_Function02d.autoimport | 32 + ...p.testSingleUsesTF02_Function03.autoimport | 32 + ...p.testSingleUsesTF02_Function04.autoimport | 32 + ...2.php.testSingleUsesTF02_Type01.autoimport | 32 + ...2.php.testSingleUsesTF02_Type02.autoimport | 31 + ....php.testSingleUsesTF02_Type03a.autoimport | 32 + ....php.testSingleUsesTF02_Type03b.autoimport | 32 + ....php.testSingleUsesTF02_Type03c.autoimport | 32 + ....php.testSingleUsesTF02_Type03d.autoimport | 32 + .../testSingleUsesTFC01.php | 36 + ...hp.testSingleUsesTFC01_Const01a.autoimport | 37 + ...hp.testSingleUsesTFC01_Const01b.autoimport | 37 + ...hp.testSingleUsesTFC01_Const01c.autoimport | 37 + ...hp.testSingleUsesTFC01_Const01d.autoimport | 37 + ...php.testSingleUsesTFC01_Const02.autoimport | 37 + ...php.testSingleUsesTFC01_Const03.autoimport | 37 + ...hp.testSingleUsesTFC01_Const04a.autoimport | 37 + ...hp.testSingleUsesTFC01_Const04b.autoimport | 37 + ...hp.testSingleUsesTFC01_Const04c.autoimport | 37 + ...hp.testSingleUsesTFC01_Const04d.autoimport | 37 + ...testSingleUsesTFC01_Function01a.autoimport | 37 + ...testSingleUsesTFC01_Function01b.autoimport | 37 + ...testSingleUsesTFC01_Function01c.autoimport | 37 + ...testSingleUsesTFC01_Function01d.autoimport | 37 + ...testSingleUsesTFC01_Function02a.autoimport | 37 + ...testSingleUsesTFC01_Function02b.autoimport | 37 + ...testSingleUsesTFC01_Function02c.autoimport | 37 + ...testSingleUsesTFC01_Function02d.autoimport | 37 + ...testSingleUsesTFC01_Function03a.autoimport | 37 + ...testSingleUsesTFC01_Function03b.autoimport | 37 + ...testSingleUsesTFC01_Function03c.autoimport | 37 + ...testSingleUsesTFC01_Function03d.autoimport | 37 + ...testSingleUsesTFC01_Function04a.autoimport | 36 + ...testSingleUsesTFC01_Function04b.autoimport | 37 + ...testSingleUsesTFC01_Function04c.autoimport | 36 + ...testSingleUsesTFC01_Function04d.autoimport | 37 + ...testSingleUsesTFC01_Function05a.autoimport | 37 + ...testSingleUsesTFC01_Function05b.autoimport | 37 + ...testSingleUsesTFC01_Function05c.autoimport | 37 + ...testSingleUsesTFC01_Function05d.autoimport | 37 + ...php.testSingleUsesTFC01_Type01a.autoimport | 37 + ...php.testSingleUsesTFC01_Type01b.autoimport | 37 + ....php.testSingleUsesTFC01_Type02.autoimport | 37 + ...php.testSingleUsesTFC01_Type03a.autoimport | 36 + ...php.testSingleUsesTFC01_Type03b.autoimport | 37 + .../testTypeInGlobal01/testTypeInGlobal01.php | 22 + ...bal01.php.testTypeInGlobal01_01.autoimport | 22 + ...bal01.php.testTypeInGlobal01_02.autoimport | 27 + .../testTypeInGlobal02/testTypeInGlobal02.php | 23 + ...bal02.php.testTypeInGlobal02_01.autoimport | 23 + ...bal02.php.testTypeInGlobal02_02.autoimport | 25 + .../testTypeInGlobalWithBlock01.php | 24 + ....testTypeInGlobalWithBlock01_01.autoimport | 24 + ....testTypeInGlobalWithBlock01_02.autoimport | 26 + .../autoImport/testConst01/testConst01.php | 26 + ...tConst01.php.testConst01_FQN01.cccustomtpl | 2 + ...tConst01.php.testConst01_FQN02.cccustomtpl | 2 + ...onst01.php.testConst01_Smart01.cccustomtpl | 2 + ...onst01.php.testConst01_Smart02.cccustomtpl | 2 + ....php.testConst01_Unqualified01.cccustomtpl | 2 + ....php.testConst01_Unqualified02.cccustomtpl | 2 + .../testFunction01/testFunction01.php | 27 + ...ion01.php.testFunction01_FQN01.cccustomtpl | 2 + ...ion01.php.testFunction01_FQN02.cccustomtpl | 2 + ...n01.php.testFunction01_Smart01.cccustomtpl | 2 + ...n01.php.testFunction01_Smart02.cccustomtpl | 2 + ...p.testFunction01_Unqualified01.cccustomtpl | 2 + ...p.testFunction01_Unqualified02.cccustomtpl | 2 + .../testGlobalNamespaceItem01.php | 32 + ...stGlobalNamespaceItem01_FQN01a.cccustomtpl | 14 + ...stGlobalNamespaceItem01_FQN01b.cccustomtpl | 14 + ...GlobalNamespaceItem01_Smart01a.cccustomtpl | 14 + ...GlobalNamespaceItem01_Smart01b.cccustomtpl | 14 + ...NamespaceItem01_Unqualified01a.cccustomtpl | 14 + ...NamespaceItem01_Unqualified01b.cccustomtpl | 14 + .../testGlobalNamespaceItem02.php | 35 + ...stGlobalNamespaceItem02_FQN01a.cccustomtpl | 2 + ...stGlobalNamespaceItem02_FQN01b.cccustomtpl | 2 + ...GlobalNamespaceItem02_Smart01a.cccustomtpl | 2 + ...GlobalNamespaceItem02_Smart01b.cccustomtpl | 2 + ...NamespaceItem02_Unqualified01a.cccustomtpl | 2 + ...NamespaceItem02_Unqualified01b.cccustomtpl | 2 + .../lib/autoImport/testType01/testType01.php | 30 + ...estType01.php.testType01_FQN01.cccustomtpl | 8 + ...estType01.php.testType01_FQN02.cccustomtpl | 8 + ...tType01.php.testType01_Smart01.cccustomtpl | 8 + ...tType01.php.testType01_Smart02.cccustomtpl | 8 + ...1.php.testType01_Unqualified01.cccustomtpl | 8 + ...1.php.testType01_Unqualified02.cccustomtpl | 8 + .../lib/autoImport/testType02/testType02.php | 30 + ...estType02.php.testType02_FQN01.cccustomtpl | 2 + ...estType02.php.testType02_FQN02.cccustomtpl | 2 + ...tType02.php.testType02_Smart01.cccustomtpl | 2 + ...tType02.php.testType02_Smart02.cccustomtpl | 2 + ...2.php.testType02_Unqualified01.cccustomtpl | 2 + ...2.php.testType02_Unqualified02.cccustomtpl | 2 + .../lib/autoImport/testType03/testType03.php | 28 + ...estType03.php.testType03_FQN01.cccustomtpl | 2 + ...estType03.php.testType03_FQN02.cccustomtpl | 2 + ...tType03.php.testType03_Smart01.cccustomtpl | 2 + ...tType03.php.testType03_Smart02.cccustomtpl | 2 + ...3.php.testType03_Unqualified01.cccustomtpl | 2 + ...3.php.testType03_Unqualified02.cccustomtpl | 2 + .../lib/autoImport/testType04/testType04.php | 32 + ...estType04.php.testType04_FQN01.cccustomtpl | 8 + ...estType04.php.testType04_FQN02.cccustomtpl | 8 + ...tType04.php.testType04_Smart01.cccustomtpl | 8 + ...tType04.php.testType04_Smart02.cccustomtpl | 8 + ...4.php.testType04_Unqualified01.cccustomtpl | 8 + ...4.php.testType04_Unqualified02.cccustomtpl | 8 + .../lib/autoImport/testType05/testType05.php | 34 + ...estType05.php.testType05_FQN01.cccustomtpl | 8 + ...estType05.php.testType05_FQN02.cccustomtpl | 8 + ...tType05.php.testType05_Smart01.cccustomtpl | 8 + ...tType05.php.testType05_Smart02.cccustomtpl | 8 + ...5.php.testType05_Unqualified01.cccustomtpl | 8 + ...5.php.testType05_Unqualified02.cccustomtpl | 8 + .../lib/autoImport/testType06/testType06.php | 34 + ...estType06.php.testType06_FQN01.cccustomtpl | 8 + ...estType06.php.testType06_FQN02.cccustomtpl | 8 + ...tType06.php.testType06_Smart01.cccustomtpl | 8 + ...tType06.php.testType06_Smart02.cccustomtpl | 8 + ...6.php.testType06_Unqualified01.cccustomtpl | 8 + ...6.php.testType06_Unqualified02.cccustomtpl | 8 + .../testTypeAlias01/testTypeAlias01.php | 34 + ...as01.php.testTypeAlias01_FQN01.cccustomtpl | 8 + ...as01.php.testTypeAlias01_FQN02.cccustomtpl | 8 + ...01.php.testTypeAlias01_Smart01.cccustomtpl | 8 + ...01.php.testTypeAlias01_Smart02.cccustomtpl | 8 + ....testTypeAlias01_Unqualified01.cccustomtpl | 8 + ....testTypeAlias01_Unqualified02.cccustomtpl | 8 + .../testTypeAlias02/testTypeAlias02.php | 30 + ...as02.php.testTypeAlias02_FQN01.cccustomtpl | 2 + ...as02.php.testTypeAlias02_FQN02.cccustomtpl | 2 + ...02.php.testTypeAlias02_Smart01.cccustomtpl | 2 + ...02.php.testTypeAlias02_Smart02.cccustomtpl | 2 + ....testTypeAlias02_Unqualified01.cccustomtpl | 2 + ....testTypeAlias02_Unqualified02.cccustomtpl | 2 + .../testTypeWithSameName01.php | 34 + ...p.testTypeWithSameName01_FQN01.cccustomtpl | 8 + ...p.testTypeWithSameName01_FQN02.cccustomtpl | 8 + ...testTypeWithSameName01_Smart01.cccustomtpl | 8 + ...testTypeWithSameName01_Smart02.cccustomtpl | 8 + ...peWithSameName01_Unqualified01.cccustomtpl | 8 + ...peWithSameName01_Unqualified02.cccustomtpl | 8 + .../testTypeWithSameName02.php | 30 + ...p.testTypeWithSameName02_FQN01.cccustomtpl | 2 + ...p.testTypeWithSameName02_FQN02.cccustomtpl | 2 + ...testTypeWithSameName02_Smart01.cccustomtpl | 2 + ...testTypeWithSameName02_Smart02.cccustomtpl | 2 + ...peWithSameName02_Unqualified01.cccustomtpl | 2 + ...peWithSameName02_Unqualified02.cccustomtpl | 2 + .../php/editor/codegen/AutoImportTest.java | 3708 +++++++++++++++++ .../PHPCodeCompletionAutoImportTest.java | 648 +++ .../completion/PHPCodeCompletionTestBase.java | 52 +- 831 files changed, 31017 insertions(+), 109 deletions(-) create mode 100644 php/php.editor/src/org/netbeans/modules/php/editor/codegen/AutoImport.java create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Const04a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Const04b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php.testGroupUsesC01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Function01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Function02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Function03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Function03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesF01/testGroupUsesF01.php.testGroupUsesF01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type06a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT01/testGroupUsesT01.php.testGroupUsesT01_Type06b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Type06a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT02/testGroupUsesT02.php.testGroupUsesT02_Type06b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT03/testGroupUsesT03.php.testGroupUsesT03_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesT04/testGroupUsesT04.php.testGroupUsesT04_Type06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const05a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Const05b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Type02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Type02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01a/testGroupUsesTC01a.php.testGroupUsesTC01a_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const05a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Const05b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Type02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Type02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTC01b/testGroupUsesTC01b.php.testGroupUsesTC01b_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Function06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTF01/testGroupUsesTF01.php.testGroupUsesTF01_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const07.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const08.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const09.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const10a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const10b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const10c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Const10d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function07a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function07b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function07c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Function07d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Type06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Type07a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesTFC01/testGroupUsesTFC01.php.testGroupUsesTFC01_Type07b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testInSameNamespace01/testInSameNamespace01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testInSameNamespace01/testInSameNamespace01.php.testInSameNamespace01_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const07.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const08.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const09.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const10.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const11a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Const11b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesC01/testMixedUsesC01.php.testMixedUsesC01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function07.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function08.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Function09.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesF01/testMixedUsesF01.php.testMixedUsesF01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesT01/testMixedUsesT01.php.testMixedUsesT01_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const07.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const08.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Const09.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Type06a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTC01/testMixedUsesTC01.php.testMixedUsesTC01_Type06b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const07a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const07b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const07c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Const07d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Function06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Type06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Type07a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTCF01/testMixedUsesTCF01.php.testMixedUsesTCF01_Type07b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function07.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function08.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Function09.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Type06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Type07a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMixedUsesTF01/testMixedUsesTF01.php.testMixedUsesTF01_Type07b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const04a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const04b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const04c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Const04d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesC01/testMultipleUsesC01.php.testMultipleUsesC01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Function01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Function02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Function03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Function03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesF01/testMultipleUsesF01.php.testMultipleUsesF01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT01/testMultipleUsesT01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT01/testMultipleUsesT01.php.testMultipleUsesT01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT01/testMultipleUsesT01.php.testMultipleUsesT01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT01/testMultipleUsesT01.php.testMultipleUsesT01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT01/testMultipleUsesT01.php.testMultipleUsesT01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT01/testMultipleUsesT01.php.testMultipleUsesT01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT01/testMultipleUsesT01.php.testMultipleUsesT01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT01/testMultipleUsesT01.php.testMultipleUsesT01_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT02/testMultipleUsesT02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT02/testMultipleUsesT02.php.testMultipleUsesT02_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT02/testMultipleUsesT02.php.testMultipleUsesT02_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT02/testMultipleUsesT02.php.testMultipleUsesT02_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT02/testMultipleUsesT02.php.testMultipleUsesT02_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testMultipleUsesT02/testMultipleUsesT02.php.testMultipleUsesT02_Type05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses01/testNoExistingUses01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses01/testNoExistingUses01.php.testNoExistingUses01_CONST.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses01/testNoExistingUses01.php.testNoExistingUses01_Function.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses01/testNoExistingUses01.php.testNoExistingUses01_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses02/testNoExistingUses02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses02/testNoExistingUses02.php.testNoExistingUses02_CONST.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses02/testNoExistingUses02.php.testNoExistingUses02_Function.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses02/testNoExistingUses02.php.testNoExistingUses02_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses03/testNoExistingUses03.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses03/testNoExistingUses03.php.testNoExistingUses03_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses04a/testNoExistingUses04a.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses04a/testNoExistingUses04a.php.testNoExistingUses04a_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses04b/testNoExistingUses04b.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses04b/testNoExistingUses04b.php.testNoExistingUses04b_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses05/testNoExistingUses05.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses05/testNoExistingUses05.php.testNoExistingUses05_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses06a/testNoExistingUses06a.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses06a/testNoExistingUses06a.php.testNoExistingUses06a_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses06b/testNoExistingUses06b.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses06b/testNoExistingUses06b.php.testNoExistingUses06b_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses07/testNoExistingUses07.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses07/testNoExistingUses07.php.testNoExistingUses07_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses08/testNoExistingUses08.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses08/testNoExistingUses08.php.testNoExistingUses08_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses09/testNoExistingUses09.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUses09/testNoExistingUses09.php.testNoExistingUses09_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare01a/testNoExistingUsesWithDeclare01a.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare01a/testNoExistingUsesWithDeclare01a.php.testNoExistingUsesWithDeclare01a_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare01b/testNoExistingUsesWithDeclare01b.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare01b/testNoExistingUsesWithDeclare01b.php.testNoExistingUsesWithDeclare01b_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare02a/testNoExistingUsesWithDeclare02a.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare02a/testNoExistingUsesWithDeclare02a.php.testNoExistingUsesWithDeclare02a_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare02b/testNoExistingUsesWithDeclare02b.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare02b/testNoExistingUsesWithDeclare02b.php.testNoExistingUsesWithDeclare02b_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare02c/testNoExistingUsesWithDeclare02c.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare02c/testNoExistingUsesWithDeclare02c.php.testNoExistingUsesWithDeclare02c_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare03/testNoExistingUsesWithDeclare03.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare03/testNoExistingUsesWithDeclare03.php.testNoExistingUsesWithDeclare03_Type.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare04/testNoExistingUsesWithDeclare04.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testNoExistingUsesWithDeclare04/testNoExistingUsesWithDeclare04.php.testNoExistingUsesWithDeclare04_Function.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Const04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC01/testSingleUsesC01.php.testSingleUsesC01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Const04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Const05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC02/testSingleUsesC02.php.testSingleUsesC02_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php.testSingleUsesC03_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php.testSingleUsesC03_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php.testSingleUsesC03_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php.testSingleUsesC03_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php.testSingleUsesC03_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php.testSingleUsesC03_Function02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php.testSingleUsesC03_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesC03/testSingleUsesC03.php.testSingleUsesC03_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Const03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Function02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF01/testSingleUsesCF01.php.testSingleUsesCF01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Const03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Function03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCF02/testSingleUsesCF02.php.testSingleUsesCF02_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const04a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const04b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const05a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Const05b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Function02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Type02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesCFT01/testSingleUsesCFT01.php.testSingleUsesCFT01_Type02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php.testSingleUsesF01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php.testSingleUsesF01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php.testSingleUsesF01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php.testSingleUsesF01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php.testSingleUsesF01_Function02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php.testSingleUsesF01_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php.testSingleUsesF01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF01/testSingleUsesF01.php.testSingleUsesF01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function05.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function06.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Function07.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF02/testSingleUsesF02.php.testSingleUsesF02_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php.testSingleUsesF03_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php.testSingleUsesF03_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php.testSingleUsesF03_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php.testSingleUsesF03_Function01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php.testSingleUsesF03_Function02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php.testSingleUsesF03_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php.testSingleUsesF03_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesF03/testSingleUsesF03.php.testSingleUsesF03_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Const03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Function01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Function02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC01/testSingleUsesFC01.php.testSingleUsesFC01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Const03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Function01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Function02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Function03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Function03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Function03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Function03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFC02/testSingleUsesFC02.php.testSingleUsesFC02_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Const03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Const03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Type01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Type01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Type02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesFCT01/testSingleUsesFCT01.php.testSingleUsesFCT01_Type02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT01/testSingleUsesT01.php.testSingleUsesT01_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php.testSingleUsesT02_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php.testSingleUsesT02_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php.testSingleUsesT02_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php.testSingleUsesT02_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php.testSingleUsesT02_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php.testSingleUsesT02_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php.testSingleUsesT02_Type03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT02/testSingleUsesT02.php.testSingleUsesT02_Type04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT03/testSingleUsesT03.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT03/testSingleUsesT03.php.testSingleUsesT03_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT03/testSingleUsesT03.php.testSingleUsesT03_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT03/testSingleUsesT03.php.testSingleUsesT03_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT03/testSingleUsesT03.php.testSingleUsesT03_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesT03/testSingleUsesT03.php.testSingleUsesT03_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Const02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Const02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Type03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC01/testSingleUsesTC01.php.testSingleUsesTC01_Type03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const04a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const04b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const04c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Const04d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Type03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTC02/testSingleUsesTC02.php.testSingleUsesTC02_Type03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Type01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Type02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Type02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF01/testSingleUsesTF01.php.testSingleUsesTF01_Type02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Function04.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Type01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Type03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTF02/testSingleUsesTF02.php.testSingleUsesTF02_Type03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const03.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const04a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const04b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const04c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Const04d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function01c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function01d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function02a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function02b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function02c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function02d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function03c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function03d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function04a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function04b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function04c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function04d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function05a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function05b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function05c.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Function05d.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Type01a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Type01b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Type02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Type03a.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testSingleUsesTFC01/testSingleUsesTFC01.php.testSingleUsesTFC01_Type03b.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobal01/testTypeInGlobal01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobal01/testTypeInGlobal01.php.testTypeInGlobal01_01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobal01/testTypeInGlobal01.php.testTypeInGlobal01_02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobal02/testTypeInGlobal02.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobal02/testTypeInGlobal02.php.testTypeInGlobal02_01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobal02/testTypeInGlobal02.php.testTypeInGlobal02_02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobalWithBlock01/testTypeInGlobalWithBlock01.php create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobalWithBlock01/testTypeInGlobalWithBlock01.php.testTypeInGlobalWithBlock01_01.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/autoimport/testTypeInGlobalWithBlock01/testTypeInGlobalWithBlock01.php.testTypeInGlobalWithBlock01_02.autoimport create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testConst01/testConst01.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testConst01/testConst01.php.testConst01_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testConst01/testConst01.php.testConst01_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testConst01/testConst01.php.testConst01_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testConst01/testConst01.php.testConst01_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testConst01/testConst01.php.testConst01_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testConst01/testConst01.php.testConst01_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testFunction01/testFunction01.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testFunction01/testFunction01.php.testFunction01_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testFunction01/testFunction01.php.testFunction01_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testFunction01/testFunction01.php.testFunction01_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testFunction01/testFunction01.php.testFunction01_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testFunction01/testFunction01.php.testFunction01_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testFunction01/testFunction01.php.testFunction01_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem01/testGlobalNamespaceItem01.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem01/testGlobalNamespaceItem01.php.testGlobalNamespaceItem01_FQN01a.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem01/testGlobalNamespaceItem01.php.testGlobalNamespaceItem01_FQN01b.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem01/testGlobalNamespaceItem01.php.testGlobalNamespaceItem01_Smart01a.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem01/testGlobalNamespaceItem01.php.testGlobalNamespaceItem01_Smart01b.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem01/testGlobalNamespaceItem01.php.testGlobalNamespaceItem01_Unqualified01a.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem01/testGlobalNamespaceItem01.php.testGlobalNamespaceItem01_Unqualified01b.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem02/testGlobalNamespaceItem02.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem02/testGlobalNamespaceItem02.php.testGlobalNamespaceItem02_FQN01a.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem02/testGlobalNamespaceItem02.php.testGlobalNamespaceItem02_FQN01b.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem02/testGlobalNamespaceItem02.php.testGlobalNamespaceItem02_Smart01a.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem02/testGlobalNamespaceItem02.php.testGlobalNamespaceItem02_Smart01b.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem02/testGlobalNamespaceItem02.php.testGlobalNamespaceItem02_Unqualified01a.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testGlobalNamespaceItem02/testGlobalNamespaceItem02.php.testGlobalNamespaceItem02_Unqualified01b.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType01/testType01.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType01/testType01.php.testType01_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType01/testType01.php.testType01_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType01/testType01.php.testType01_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType01/testType01.php.testType01_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType01/testType01.php.testType01_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType01/testType01.php.testType01_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType02/testType02.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType02/testType02.php.testType02_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType02/testType02.php.testType02_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType02/testType02.php.testType02_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType02/testType02.php.testType02_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType02/testType02.php.testType02_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType02/testType02.php.testType02_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType03/testType03.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType03/testType03.php.testType03_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType03/testType03.php.testType03_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType03/testType03.php.testType03_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType03/testType03.php.testType03_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType03/testType03.php.testType03_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType03/testType03.php.testType03_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType04/testType04.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType04/testType04.php.testType04_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType04/testType04.php.testType04_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType04/testType04.php.testType04_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType04/testType04.php.testType04_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType04/testType04.php.testType04_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType04/testType04.php.testType04_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType05/testType05.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType05/testType05.php.testType05_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType05/testType05.php.testType05_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType05/testType05.php.testType05_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType05/testType05.php.testType05_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType05/testType05.php.testType05_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType05/testType05.php.testType05_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType06/testType06.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType06/testType06.php.testType06_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType06/testType06.php.testType06_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType06/testType06.php.testType06_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType06/testType06.php.testType06_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType06/testType06.php.testType06_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testType06/testType06.php.testType06_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias01/testTypeAlias01.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias01/testTypeAlias01.php.testTypeAlias01_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias01/testTypeAlias01.php.testTypeAlias01_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias01/testTypeAlias01.php.testTypeAlias01_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias01/testTypeAlias01.php.testTypeAlias01_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias01/testTypeAlias01.php.testTypeAlias01_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias01/testTypeAlias01.php.testTypeAlias01_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias02/testTypeAlias02.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias02/testTypeAlias02.php.testTypeAlias02_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias02/testTypeAlias02.php.testTypeAlias02_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias02/testTypeAlias02.php.testTypeAlias02_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias02/testTypeAlias02.php.testTypeAlias02_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias02/testTypeAlias02.php.testTypeAlias02_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeAlias02/testTypeAlias02.php.testTypeAlias02_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName01/testTypeWithSameName01.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName01/testTypeWithSameName01.php.testTypeWithSameName01_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName01/testTypeWithSameName01.php.testTypeWithSameName01_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName01/testTypeWithSameName01.php.testTypeWithSameName01_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName01/testTypeWithSameName01.php.testTypeWithSameName01_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName01/testTypeWithSameName01.php.testTypeWithSameName01_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName01/testTypeWithSameName01.php.testTypeWithSameName01_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName02/testTypeWithSameName02.php create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName02/testTypeWithSameName02.php.testTypeWithSameName02_FQN01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName02/testTypeWithSameName02.php.testTypeWithSameName02_FQN02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName02/testTypeWithSameName02.php.testTypeWithSameName02_Smart01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName02/testTypeWithSameName02.php.testTypeWithSameName02_Smart02.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName02/testTypeWithSameName02.php.testTypeWithSameName02_Unqualified01.cccustomtpl create mode 100644 php/php.editor/test/unit/data/testfiles/completion/lib/autoImport/testTypeWithSameName02/testTypeWithSameName02.php.testTypeWithSameName02_Unqualified02.cccustomtpl create mode 100644 php/php.editor/test/unit/src/org/netbeans/modules/php/editor/codegen/AutoImportTest.java create mode 100644 php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionAutoImportTest.java diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/CodeUtils.java b/php/php.editor/src/org/netbeans/modules/php/editor/CodeUtils.java index 79e78450adff..a596f671341a 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/CodeUtils.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/CodeUtils.java @@ -92,6 +92,7 @@ public final class CodeUtils { public static final String EMPTY_STRING = ""; // NOI18N public static final String NEW_LINE = "\n"; // NOI18N public static final String THIS_VARIABLE = "$this"; // NOI18N + public static final String NS_SEPARATOR = "\\"; // NOI18N public static final Pattern WHITE_SPACES_PATTERN = Pattern.compile("\\s+"); // NOI18N public static final Pattern SPLIT_TYPES_PATTERN = Pattern.compile("[()|&]+"); // NOI18N diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/codegen/AutoImport.java b/php/php.editor/src/org/netbeans/modules/php/editor/codegen/AutoImport.java new file mode 100644 index 000000000000..d573550b988a --- /dev/null +++ b/php/php.editor/src/org/netbeans/modules/php/editor/codegen/AutoImport.java @@ -0,0 +1,971 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.netbeans.modules.php.editor.codegen; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import org.netbeans.api.annotations.common.CheckForNull; +import org.netbeans.api.annotations.common.NullAllowed; +import org.netbeans.api.editor.document.LineDocumentUtils; +import org.netbeans.api.lexer.Token; +import org.netbeans.api.lexer.TokenSequence; +import org.netbeans.api.lexer.TokenUtilities; +import org.netbeans.editor.BaseDocument; +import org.netbeans.modules.csl.api.EditList; +import org.netbeans.modules.csl.api.OffsetRange; +import org.netbeans.modules.editor.indent.api.IndentUtils; +import org.netbeans.modules.php.api.util.StringUtils; +import org.netbeans.modules.php.editor.CodeUtils; +import org.netbeans.modules.php.editor.api.AliasedName; +import org.netbeans.modules.php.editor.api.QualifiedName; +import org.netbeans.modules.php.editor.indent.CodeStyle; +import org.netbeans.modules.php.editor.lexer.LexUtilities; +import org.netbeans.modules.php.editor.lexer.PHPTokenId; +import org.netbeans.modules.php.editor.model.GroupUseScope; +import org.netbeans.modules.php.editor.model.ModelElement; +import org.netbeans.modules.php.editor.model.ModelUtils; +import org.netbeans.modules.php.editor.model.NamespaceScope; +import org.netbeans.modules.php.editor.model.UseScope; +import static org.netbeans.modules.php.editor.model.UseScope.Type.CONST; +import static org.netbeans.modules.php.editor.model.UseScope.Type.FUNCTION; +import static org.netbeans.modules.php.editor.model.UseScope.Type.TYPE; +import org.netbeans.modules.php.editor.parser.PHPParseResult; +import org.netbeans.modules.php.editor.parser.astnodes.DeclareStatement; +import org.netbeans.modules.php.editor.parser.astnodes.EmptyStatement; +import org.netbeans.modules.php.editor.parser.astnodes.Program; +import org.netbeans.modules.php.editor.parser.astnodes.Statement; +import org.netbeans.modules.php.editor.parser.astnodes.visitors.DefaultVisitor; + +public final class AutoImport { + + private static final Logger LOGGER = Logger.getLogger(AutoImport.class.getName()); + public static final String PARAM_NAME = "php-auto-import"; // NOI18N + public static final String PARAM_KEY_FQ_NAME = "fqName"; // NOI18N + public static final String PARAM_KEY_ALIAS_NAME = "aliasName"; // NOI18N + public static final String PARAM_KEY_USE_TYPE = "useType"; // NOI18N + public static final String USE_TYPE = "type"; // NOI18N + public static final String USE_FUNCTION = "function"; // NOI18N + public static final String USE_CONST = "const"; // NOI18N + + private final PHPParseResult parserResult; + + public static boolean sameUseNameExists(String name, String fqName, UseScope.Type useScopeType, NamespaceScope namespaceScope) { + Collection declaredGroupUses = namespaceScope.getDeclaredGroupUses(); + Collection declaredSingleUses = namespaceScope.getDeclaredSingleUses(); + for (GroupUseScope declaredGroupUse : declaredGroupUses) { + List useScopes = declaredGroupUse.getUseScopes(); + if (hasSameNameInSingleUses(name, fqName, useScopeType, useScopes)) { + return true; + } + } + return hasSameNameInSingleUses(name, fqName, useScopeType, declaredSingleUses); + } + + private static boolean hasSameNameInSingleUses(String name, String fqName, UseScope.Type useScopeType, Collection declaredSingleUses) { + for (UseScope declaredSingleUse : declaredSingleUses) { + UseScope.Type type = declaredSingleUse.getType(); + if (type != useScopeType + || fqName.equals(declaredSingleUse.getName())) { + continue; + } + AliasedName aliasedName = declaredSingleUse.getAliasedName(); + String elementName; + if (aliasedName != null) { + elementName = aliasedName.getAliasName(); + } else { + QualifiedName qualifiedName = QualifiedName.create(declaredSingleUse.getName()); + elementName = qualifiedName.getName(); + } + if (name.equals(elementName)) { + return true; + } + } + return false; + } + + public static UseScope.Type getUseScopeType(String useType) { + UseScope.Type useScopeType = UseScope.Type.TYPE; + switch (useType) { + case AutoImport.USE_TYPE: + useScopeType = UseScope.Type.TYPE; + break; + case AutoImport.USE_FUNCTION: + useScopeType = UseScope.Type.FUNCTION; + break; + case AutoImport.USE_CONST: + useScopeType = UseScope.Type.CONST; + break; + default: + assert false : "Unknown type: " + useType; // NOI18N + break; + } + return useScopeType; + } + + public static AutoImport get(PHPParseResult parserResult) { + return new AutoImport(parserResult); + } + + private AutoImport(PHPParseResult parserResult) { + this.parserResult = parserResult; + } + + public void insert(Hints hints, int caretPosition) { + insert(hints.getFqName(), hints.getAliasName(), hints.getUseScopeType(), caretPosition); + } + + void insert(String fqInsertName, UseScope.Type type, int caretPosition) { + insert(fqInsertName, CodeUtils.EMPTY_STRING, type, caretPosition); + } + + void insert(String fqInsertName, String aliasName, UseScope.Type type, int caretPosition) { + NamespaceScope namespaceScope = ModelUtils.getNamespaceScope(parserResult, caretPosition); + if (!canInsert(fqInsertName, namespaceScope)) { + return; + } + assert namespaceScope != null; + Document document = parserResult.getSnapshot().getSource().getDocument(false); + if (document == null) { + document = parserResult.getSnapshot().getSource().getDocument(true); + LOGGER.log(Level.INFO, "document was opened forcibly"); // NOI18N + } + BaseDocument baseDocument = (document instanceof BaseDocument) ? (BaseDocument) document : null; + if (baseDocument == null) { + return; + } + String aliasedName = fqInsertName; + if (!aliasName.isEmpty()) { + aliasedName = aliasedName + " as " + aliasName; // NOI18N + } + AutoImportResolver resolver = AutoImportResolver.create(aliasedName, type, parserResult, namespaceScope, baseDocument); + resolver.resolve(); + insertUseStatement(resolver, baseDocument); + } + + private boolean canInsert(String fqInsertName, NamespaceScope namespaceScope) { + boolean result = true; + if (!fqInsertName.contains(CodeUtils.NS_SEPARATOR) && StringUtils.isEmpty(namespaceScope.getName())) { + result = false; + } else { + String name = namespaceScope.getName(); + if (name.equals(QualifiedName.create(fqInsertName).getNamespaceName())) { + result = false; + } + } + return result; + } + + private void insertUseStatement(AutoImportResolver resolver, BaseDocument baseDocument) { + if (!resolver.canImport()) { + return; + } + int insertOffset = resolver.getInsertOffset(); + String insertString = resolver.getInsertString(); + EditList editList = new EditList(baseDocument); + editList.replace(insertOffset, 0, insertString, true, 0); + editList.apply(); + } + + private static final class AutoImportResolver { + + private static final Logger LOGGER = Logger.getLogger(AutoImportResolver.class.getName()); + + private final String insertName; + private final UseScope.Type type; + private final PHPParseResult parserResult; + private final NamespaceScope namespaceScope; + private final BaseDocument baseDocument; + private final TokenSequence tokenSequence; + private final List declaredGroupUses; + private final List declaredSingleUses; + private final List typeUseScopes = new ArrayList<>(); + private final List constUseScopes = new ArrayList<>(); + private final List functionUseScopes = new ArrayList<>(); + private final Map typeNames = new LinkedHashMap<>(); + private final Map constNames = new LinkedHashMap<>(); + private final Map functionNames = new LinkedHashMap<>(); + private int insertOffset = -1; + private String insertString = CodeUtils.EMPTY_STRING; + private int indexOfInsertName = -1; + private boolean canImport = true; + private boolean addNewLineBeforeUse = false; + + public static AutoImportResolver create(String insertName, UseScope.Type type, PHPParseResult parserResult, NamespaceScope namespaceScope, BaseDocument baseDocument) { + Collection declaredGroupUses = namespaceScope.getDeclaredGroupUses(); + Collection declaredSingleUses = namespaceScope.getDeclaredSingleUses(); + AutoImportResolver autoImportResolver = new AutoImportResolver(insertName, type, parserResult, namespaceScope, declaredGroupUses, declaredSingleUses, baseDocument); + autoImportResolver.init(); + return autoImportResolver; + } + + private AutoImportResolver(String insertName, UseScope.Type type, PHPParseResult parserResult, NamespaceScope namespaceScope, Collection declaredGroupUses, Collection declaredSingleUses, BaseDocument baseDocument) { + this.insertName = insertName; + this.insertString = insertName; + this.type = type; + this.parserResult = parserResult; + this.namespaceScope = namespaceScope; + this.declaredGroupUses = new ArrayList<>(declaredGroupUses); + this.declaredSingleUses = new ArrayList<>(declaredSingleUses); + this.baseDocument = baseDocument; + this.tokenSequence = parserResult.getSnapshot().getTokenHierarchy().tokenSequence(PHPTokenId.language()); + } + + public int getInsertOffset() { + return insertOffset; + } + + public String getInsertString() { + return insertString; + } + + public boolean canImport() { + return canImport && insertOffset != -1; + } + + public void resolve() { + // get use scopes of curent use type + Map useScopeNames = getNamedUseScopes(type); + if (useScopeNames.keySet().contains(insertName)) { + canImport = false; + return; + } + List names = getUseScopeNames(useScopeNames); + indexOfInsertName = findInsertNameIndex(names); + if (indexOfInsertName > 0) { + // check whether we can insert it top of group use + String name = names.get(indexOfInsertName); + if (canInsertIntoNextGroupUse(name, useScopeNames)) { + processInsertingBeforeNextUse(names, useScopeNames, indexOfInsertName); + } else { + processInsertingAfterPreviousUse(names, useScopeNames, indexOfInsertName); + } + } else if (indexOfInsertName == 0) { + processInsertingBeforeNextUse(names, useScopeNames, 0); + } else { + processInserting(); + } + } + + private boolean canInsertIntoNextGroupUse(String name, Map useScopeNames) { + // check whether we can insert it top of group use + UseScope useScope = useScopeNames.get(name); + if (useScope != null && useScope.isPartOfGroupUse()) { + String groupUseBaseName = getGroupUseBaseName(useScope); + if (insertName.startsWith(groupUseBaseName)) { + return true; + } + } + return false; + } + + private boolean isPartOfMultipleUse(UseScope useScope) { + tokenSequence.move(useScope.getOffset()); + if (tokenSequence.moveNext()) { + Token useToken = LexUtilities.findPreviousToken(tokenSequence, Arrays.asList(PHPTokenId.PHP_USE)); + assert useToken != null : "Use statement should start with \"use\", but not found it"; // NOI18N + while (tokenSequence.moveNext()) { + if (tokenSequence.token().id() == PHPTokenId.PHP_SEMICOLON) { + break; + } + if (tokenSequence.token().id() == PHPTokenId.PHP_TOKEN + && TokenUtilities.equals(tokenSequence.token().text(), ",")) { // NOI18N + return true; + } + } + } + return false; + } + + private int getEndOfUseStetement(UseScope useScope) { + tokenSequence.move(useScope.getOffset()); + while (tokenSequence.moveNext()) { + if (tokenSequence.token().id() == PHPTokenId.PHP_SEMICOLON) { + return tokenSequence.offset() + tokenSequence.token().length(); + } + } + return getLineEnd(useScope.getOffset()); + } + + private void processInsertingAfterPreviousUse(List names, Map useScopeNames, int indexOfInsertName) { + String previousName = names.get(indexOfInsertName - 1); + UseScope previousUseScope = useScopeNames.get(previousName); + if (previousUseScope.isPartOfGroupUse()) { + String baseName = getGroupUseBaseName(previousUseScope); + if (insertName.startsWith(baseName)) { + insertOffset = previousUseScope.getNameRange().getEnd(); + insertString = ", " + insertName.substring(baseName.length() + CodeUtils.NS_SEPARATOR.length()); + } else { + // use Vendor\Package\AAA\{A1, A2, A3}; + // insertName: Vendor\Package\BBB\B1 + GroupUseScope previousGroupUseScope = findGroupUseScope(previousUseScope); + if (previousGroupUseScope != null) { + insertOffset = getLineEnd(previousGroupUseScope.getNameRange().getEnd()); + insertString = CodeUtils.NEW_LINE + createSingleUseStatement(); + } + } + } else if (isPartOfMultipleUse(previousUseScope)) { + // add single use statement + insertOffset = getEndOfUseStetement(previousUseScope); + insertString = CodeUtils.NEW_LINE + createSingleUseStatement(); + } else { + // add single use statment + insertOffset = getLineEnd(previousUseScope.getNameRange().getEnd()); + insertString = createSingleUseStatement(); + } + } + + private void processInsertingBeforeNextUse(List names, Map useScopeNames, int indexOfInsertName) { + if (!names.isEmpty()) { + String nextName = names.get(indexOfInsertName); + UseScope nextUseScope = useScopeNames.get(nextName); + if (nextUseScope.isPartOfGroupUse()) { + String groupUseBaseName = getGroupUseBaseName(nextUseScope); + if (insertName.startsWith(groupUseBaseName)) { + insertOffset = nextUseScope.getNameRange().getStart(); + insertString = insertName.substring(groupUseBaseName.length() + CodeUtils.NS_SEPARATOR.length()) + ", "; // NOI18N + } else { + // use Vendor\Package\AAA\{A1, A2, A3}; + // insertName: Vendor\Package\AA1\B1 + GroupUseScope nextGroupUseScope = findGroupUseScope(nextUseScope); + if (nextGroupUseScope != null) { + insertOffset = getLineStart(nextGroupUseScope.getNameRange().getStart()); + insertString = createSingleUseStatement(); + } + } + } else { + insertOffset = getLineStart(nextUseScope.getOffset()); + insertString = createSingleUseStatement(); + } + } + } + + private void processInserting() { + List typeScopes = getUseScopes(UseScope.Type.TYPE); + List functionScopes = getUseScopes(UseScope.Type.FUNCTION); + List constScopes = getUseScopes(UseScope.Type.CONST); + if (typeScopes.isEmpty() && functionScopes.isEmpty() && constScopes.isEmpty()) { + processInsertingFirstUse(); + } else { + processInsertingFirstUseKind(typeScopes, functionScopes, constScopes); + } + } + + private void processInsertingFirstUse() { + int offset = namespaceScope.getBlockRange().getStart(); + String word = getWord(offset); + if (word != null && word.equals("{")) { // NOI18N + offset++; + } + List elements = namespaceScope.getElements(); + if (!elements.isEmpty()) { + offset = getLineStart(elements.get(0).getOffset()); + // find attribute + int attributeStart = findAttributeStart(offset); + while (attributeStart != -1) { + // e.g. #[A1]#[A2] class C {} + offset = attributeStart; + attributeStart = findAttributeStart(attributeStart); + } + int phpDocStart = findPhpDocStart(offset); + if (phpDocStart != -1) { + offset = phpDocStart; + } + int start = findInsertStart(offset); + if (start != -1) { + offset = start; + } + offset = getLineStart(offset); + } else { + // find declare statement + DeclareStatement lastDeclareStatement = findLastDeclareStatement(); + if (lastDeclareStatement != null) { + Statement body = lastDeclareStatement.getBody(); + if (!(body instanceof EmptyStatement)) { + // e.g. + // declare(ticks=1) { + // } + addNewLineBeforeUse = true; + } + offset = lastDeclareStatement.getEndOffset(); + } + } + insertOffset = offset; + insertString = createSingleUseStatement(); + } + + private int findAttributeStart(int offset) { + int result = -1; + tokenSequence.move(offset); + if (tokenSequence.movePrevious()) { + List ignores = Arrays.asList( + PHPTokenId.PHP_LINE_COMMENT, + PHPTokenId.PHPDOC_COMMENT, + PHPTokenId.PHPDOC_COMMENT_START, + PHPTokenId.PHPDOC_COMMENT_END, + PHPTokenId.PHP_COMMENT, + PHPTokenId.PHP_COMMENT_START, + PHPTokenId.PHP_COMMENT_END, + PHPTokenId.WHITESPACE + ); + Token findPrevious = LexUtilities.findPrevious(tokenSequence, ignores); + if (findPrevious != null + && TokenUtilities.textEquals(findPrevious.text(), "]")) { // NOI18N + Token attributeToken = LexUtilities.findPreviousToken(tokenSequence, Arrays.asList(PHPTokenId.PHP_ATTRIBUTE)); + if (attributeToken != null) { + return tokenSequence.offset(); + } + } + } + return result; + } + + private int findPhpDocStart(int offset) { + int result = -1; + tokenSequence.move(offset); + if (tokenSequence.movePrevious()) { + List ignores = Arrays.asList( + PHPTokenId.WHITESPACE + ); + Token findPrevious = LexUtilities.findPrevious(tokenSequence, ignores); + if (findPrevious != null + && findPrevious.id() == PHPTokenId.PHPDOC_COMMENT_END) { + Token phpDocStart = LexUtilities.findPreviousToken(tokenSequence, Arrays.asList(PHPTokenId.PHPDOC_COMMENT_START)); + if (phpDocStart != null) { + return tokenSequence.offset(); + } + } + } + return result; + } + + private int findInsertStart(int offset) { + int result = -1; + tokenSequence.move(offset); + while (tokenSequence.movePrevious()) { + PHPTokenId id = tokenSequence.token().id(); + if (id == PHPTokenId.WHITESPACE) { + if (hasBlankLine(tokenSequence.token())) { + result = tokenSequence.offset() + tokenSequence.token().length(); + break; + } + } + if (id != PHPTokenId.WHITESPACE + && id != PHPTokenId.PHPDOC_COMMENT_START + && id != PHPTokenId.PHPDOC_COMMENT + && id != PHPTokenId.PHPDOC_COMMENT_END + && id != PHPTokenId.PHP_COMMENT_START + && id != PHPTokenId.PHP_COMMENT + && id != PHPTokenId.PHP_COMMENT_END + && id != PHPTokenId.PHP_LINE_COMMENT + ) { + break; + } + if (id == PHPTokenId.PHPDOC_COMMENT_START + || id == PHPTokenId.PHP_COMMENT_START + || id == PHPTokenId.PHP_LINE_COMMENT) { + result = tokenSequence.offset(); + } + } + return result; + } + + @CheckForNull + private DeclareStatement findLastDeclareStatement() { + Program program = parserResult.getProgram(); + if (program != null) { + CheckVisitor checkVisitor = new CheckVisitor(); + program.accept(checkVisitor); + List declareStatements = checkVisitor.getDeclareStatements(); + if (!declareStatements.isEmpty()) { + return declareStatements.get(declareStatements.size() - 1); + } + } + return null; + } + + private void processInsertingFirstUseKind(List typeScopes, List functionScopes, List constScopes) { + List allUseScopes = getAllUseScopes(); + CodeStyle codeStyle = CodeStyle.get(baseDocument); + boolean isPSR12 = codeStyle.putInPSR12Order(); + switch (type) { + case TYPE: + // add to top + setInsertOffsetBeforeTop(allUseScopes); + break; + case CONST: + // const scopes is empty + if (isPSR12) { + setInsertOffsetAfterBottom(allUseScopes); + } else { + if (!typeScopes.isEmpty()) { + setInsertOffsetAfterBottom(typeScopes); + } else { + setInsertOffsetBeforeTop(functionScopes); + } + } + break; + case FUNCTION: + // function scopes is empty + if (isPSR12) { + if (!typeScopes.isEmpty()) { + setInsertOffsetAfterBottom(typeScopes); + } else { + setInsertOffsetBeforeTop(constScopes); + } + } else { + setInsertOffsetAfterBottom(allUseScopes); + } + break; + default: + assert false : "Unknown type: " + type; // NOI18N + break; + } + insertString = createSingleUseStatement(); + } + + private void setInsertOffsetBeforeTop(List useScopes) { + UseScope topScope = useScopes.get(0); + setInsertOffsetBefore(topScope); + } + + private void setInsertOffsetBefore(UseScope topUseScope) { + if (topUseScope.isPartOfGroupUse()) { + GroupUseScope groupUseScope = findGroupUseScope(topUseScope); + if (groupUseScope != null) { + insertOffset = getLineStart(groupUseScope.getNameRange().getStart()); + } + } else { + insertOffset = getLineStart(topUseScope.getNameRange().getStart()); + } + } + + private void setInsertOffsetAfterBottom(List useScopes) { + UseScope bottomScope = useScopes.get(useScopes.size() - 1); + setInsertOffsetAfter(bottomScope); + } + + private void setInsertOffsetAfter(UseScope bottomUseScope) { + if (bottomUseScope.isPartOfGroupUse()) { + GroupUseScope groupUseScope = findGroupUseScope(bottomUseScope); + if (groupUseScope != null) { + insertOffset = getLineEnd(groupUseScope.getNameRange().getEnd()); + addNewLineBeforeUse = true; + } + } else if (isPartOfMultipleUse(bottomUseScope)) { + insertOffset = getEndOfUseStetement(bottomUseScope); + addNewLineBeforeUse = true; + } else { + insertOffset = getLineEnd(bottomUseScope.getNameRange().getEnd()); + } + } + + private List getUseScopeNames(Map useScopeNames) { + List names = new ArrayList<>(useScopeNames.keySet()); + if (!names.isEmpty()) { + names.add(insertName); // sentinel + } + return names; + } + + private int findInsertNameIndex(List names) { + int insertNameIndex = -1; + for (String name : names) { + int currentIndex = names.indexOf(name); + if (insertName.compareToIgnoreCase(name) <= 0) { + insertNameIndex = currentIndex; + break; + } + if (name.compareToIgnoreCase(names.get(currentIndex + 1)) > 0) { + insertNameIndex = currentIndex + 1; + break; + } + } + if (insertNameIndex == -1 && !names.isEmpty()) { + insertNameIndex = 0; + } + return insertNameIndex; + } + + @CheckForNull + private String getWord(int offset) { + try { + return LineDocumentUtils.getWord(baseDocument, offset); + } catch (BadLocationException ex) { + LOGGER.log(Level.WARNING, "Invalid offset: {0}", ex.offsetRequested()); // NOI18N + } + return null; + } + + private int getLineStart(int offset) { + return LineDocumentUtils.getLineStart(baseDocument, offset); + } + + private int getLineEnd(int offset) { + try { + return LineDocumentUtils.getLineEnd(baseDocument, offset); + } catch (BadLocationException ex) { + LOGGER.log(Level.WARNING, "Invalid offset: {0}", ex.offsetRequested()); // NOI18N + } + return offset; + } + + private boolean hasOtherTypeUseAbove() { + if (insertOffset != -1) { + List useScopes = getUseScopesExceptFor(type); + sortByOffset(useScopes); + if (!useScopes.isEmpty()) { + for (UseScope useScope : useScopes) { + if (useScope.getOffset() < insertOffset) { + return true; + } + } + } + } + return false; + } + + private boolean hasBlankLinesBeforeInsertOffset() { + if (insertOffset != -1) { + tokenSequence.move(insertOffset); + if (tokenSequence.moveNext()) { + Token token = tokenSequence.token(); + if (token.id() == PHPTokenId.WHITESPACE) { + return hasBlankLine(token); + } + if (token.id() != PHPTokenId.PHP_USE) { + return false; + } + } + if (tokenSequence.movePrevious()) { + Token token = tokenSequence.token(); + if (token.id() == PHPTokenId.WHITESPACE) { + return hasBlankLine(token); + } + } + } + return false; + } + + private boolean hasBlankLine(Token token) { + return token.text().chars().filter(c -> c == '\n').count() >= 2; + } + + private String getBlankLinesBeteenUseTypes() { + StringBuilder sb = new StringBuilder(); + CodeStyle codeStyle = CodeStyle.get(baseDocument); + if (codeStyle.getBlankLinesBetweenUseTypes() > 0 && hasOtherTypeUseAbove()) { + for (int i = 0; i < codeStyle.getBlankLinesBetweenUseTypes(); i++) { + sb.append(CodeUtils.NEW_LINE); + } + } + return sb.toString(); + } + + private String createSingleUseStatement() { + StringBuilder extraSpaces = new StringBuilder(); + if (addToTopOfUseType() && !hasBlankLinesBeforeInsertOffset()) { + // e.g. + // use Vendor\Package\Type; + // use function Vendor\Package\func00; // add here + // use function Vendor\Package\func01; + extraSpaces.append(getBlankLinesBeteenUseTypes()); + } + if (extraSpaces.length() == 0 && addNewLineBeforeUse) { + extraSpaces.append(CodeUtils.NEW_LINE); + } + OffsetRange blockRange = namespaceScope.getBlockRange(); + String blockStartWord = null; + if (blockRange != null) { + blockStartWord = getWord(blockRange.getStart()); + } + if (blockStartWord != null && blockStartWord.startsWith("{")) { // NOI18N + // e.g. namespace Foo\Bar {} + CodeStyle codeStyle = CodeStyle.get(baseDocument); + extraSpaces.append(IndentUtils.createIndentString(codeStyle.getIndentSize(), codeStyle.expandTabToSpaces(), codeStyle.getTabSize())); + } + return createSingleUseStatement(extraSpaces.toString()); + } + + private String createSingleUseStatement(String extraSpaces) { + StringBuilder sb = new StringBuilder(); + if (insertOffset == 0) { + sb.append(""); // NOI18N + } + sb.append(CodeUtils.NEW_LINE); + return sb.toString(); + } + + private boolean addToTopOfUseType() { + return indexOfInsertName == 0; + } + + private String getGroupUseBaseName(UseScope useScope) { + String baseNamespaceName = QualifiedName.create(useScope.getName()).getNamespaceName(); + if (useScope.isPartOfGroupUse()) { + GroupUseScope groupUseScope = findGroupUseScope(useScope); + if (groupUseScope != null) { + boolean find = false; + while (!find && !StringUtils.isEmpty(baseNamespaceName)) { + find = true; + for (UseScope useScope1 : groupUseScope.getUseScopes()) { + if (!useScope1.getName().startsWith(baseNamespaceName)) { + find = false; + break; + } + } + if (find) { + break; + } + baseNamespaceName = QualifiedName.create(baseNamespaceName).getNamespaceName(); + } + } + } + return baseNamespaceName; + } + + @CheckForNull + private GroupUseScope findGroupUseScope(UseScope useScope) { + for (GroupUseScope declaredGroupUse : declaredGroupUses) { + for (UseScope declaredUseScope : declaredGroupUse.getUseScopes()) { + if (useScope == declaredUseScope) { + return declaredGroupUse; + } + } + } + return null; + } + + private List getAllUseScopes() { + List allUseScopes = new ArrayList<>(); + allUseScopes.addAll(getUseScopes(UseScope.Type.TYPE)); + allUseScopes.addAll(getUseScopes(UseScope.Type.FUNCTION)); + allUseScopes.addAll(getUseScopes(UseScope.Type.CONST)); + sortByOffset(allUseScopes); + return allUseScopes; + } + + private List getUseScopes(UseScope.Type type) { + switch (type) { + case TYPE: + return Collections.unmodifiableList(typeUseScopes); + case FUNCTION: + return Collections.unmodifiableList(functionUseScopes); + case CONST: + return Collections.unmodifiableList(constUseScopes); + default: + assert false : "Unknown type: " + type; // NOI18N + return Collections.emptyList(); + } + } + + private List getUseScopesExceptFor(UseScope.Type type) { + List useScopes = new ArrayList<>(); + switch (type) { + case TYPE: + useScopes.addAll(getUseScopes(UseScope.Type.FUNCTION)); + useScopes.addAll(getUseScopes(UseScope.Type.CONST)); + break; + case FUNCTION: + useScopes.addAll(getUseScopes(UseScope.Type.TYPE)); + useScopes.addAll(getUseScopes(UseScope.Type.CONST)); + break; + case CONST: + useScopes.addAll(getUseScopes(UseScope.Type.TYPE)); + useScopes.addAll(getUseScopes(UseScope.Type.FUNCTION)); + break; + default: + assert false : "Unknown type: " + type; // NOI18N + return Collections.emptyList(); + } + return useScopes; + } + + private Map getNamedUseScopes(UseScope.Type type) { + Map names = new LinkedHashMap<>(); + switch (type) { + case TYPE: + names.putAll(typeNames); + break; + case CONST: + names.putAll(constNames); + break; + case FUNCTION: + names.putAll(functionNames); + break; + default: + assert false : "Unknown type: " + type; // NOI18N + break; + } + return names; + } + + private void init() { + processGroupUses(); + processSingleUses(); + sortEachUseKindScope(); + for (UseScope useScope : typeUseScopes) { + addUseScope(typeNames, useScope); + } + for (UseScope useScope : constUseScopes) { + addUseScope(constNames, useScope); + } + for (UseScope useScope : functionUseScopes) { + addUseScope(functionNames, useScope); + } + } + + private void addUseScope(Map useScopeNames, UseScope useScope) { + String name = useScope.getName(); + AliasedName aliasedName = useScope.getAliasedName(); + if (aliasedName != null) { + name += " as " + aliasedName.getAliasName(); // NOI18N + } + useScopeNames.put(name, useScope); + } + + private void processGroupUses() { + for (GroupUseScope declaredGroupUse : declaredGroupUses) { + switch (declaredGroupUse.getType()) { + case TYPE: + typeUseScopes.addAll(declaredGroupUse.getUseScopes()); + break; + case CONST: + constUseScopes.addAll(declaredGroupUse.getUseScopes()); + break; + case FUNCTION: + functionUseScopes.addAll(declaredGroupUse.getUseScopes()); + break; + default: + assert false : "Unhandled Type: " + declaredGroupUse.getType(); // NOI18N + break; + } + } + } + + private void processSingleUses() { + for (UseScope declaredSingleUse : declaredSingleUses) { + switch (declaredSingleUse.getType()) { + case TYPE: + typeUseScopes.add(declaredSingleUse); + break; + case CONST: + constUseScopes.add(declaredSingleUse); + break; + case FUNCTION: + functionUseScopes.add(declaredSingleUse); + break; + default: + assert false : "Unhandled Type: " + declaredSingleUse.getType(); // NOI18N + break; + } + } + } + + private void sortEachUseKindScope() { + sortByOffset(typeUseScopes); + sortByOffset(constUseScopes); + sortByOffset(functionUseScopes); + } + + private void sortByOffset(List useScopes) { + useScopes.sort((use1, use2) -> Integer.compare(use1.getOffset(), use2.getOffset())); + } + } + + private static class CheckVisitor extends DefaultVisitor { + + private final List declareStatements = new ArrayList<>(); + + @Override + public void visit(DeclareStatement node) { + declareStatements.add(node); + super.visit(node); + } + + public List getDeclareStatements() { + return Collections.unmodifiableList(declareStatements); + } + } + + public static final class Hints { + + private final String fqName; + private final String useType; + @NullAllowed + private final String aliasName; + + public Hints(String fqName, String useType, @NullAllowed String aliasName) { + this.fqName = fqName; + assert !useType.isEmpty(); + this.useType = useType; + this.aliasName = aliasName; + } + + public Hints(String fqName, String useType) { + this(fqName, useType, null); + } + + public String getFqName() { + return fqName; + } + + public String getUseType() { + return useType; + } + + public UseScope.Type getUseScopeType() { + return AutoImport.getUseScopeType(useType); + } + + @CheckForNull + public String getAliasName() { + return aliasName; + } + } +} diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/codegen/PHPCodeTemplateProcessor.java b/php/php.editor/src/org/netbeans/modules/php/editor/codegen/PHPCodeTemplateProcessor.java index 1f0301a2cf29..deb3c1eae33d 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/codegen/PHPCodeTemplateProcessor.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/codegen/PHPCodeTemplateProcessor.java @@ -16,7 +16,6 @@ * specific language governing permissions and limitations * under the License. */ - package org.netbeans.modules.php.editor.codegen; import java.util.ArrayList; @@ -32,6 +31,8 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.text.Document; +import javax.swing.text.JTextComponent; +import org.netbeans.api.annotations.common.CheckForNull; import org.netbeans.lib.editor.codetemplates.spi.CodeTemplateInsertRequest; import org.netbeans.lib.editor.codetemplates.spi.CodeTemplateParameter; import org.netbeans.lib.editor.codetemplates.spi.CodeTemplateProcessor; @@ -44,6 +45,7 @@ import org.netbeans.modules.parsing.spi.ParseException; import org.netbeans.modules.parsing.spi.Parser; import org.netbeans.modules.php.api.util.StringUtils; +import org.netbeans.modules.php.editor.CodeUtils; import org.netbeans.modules.php.editor.model.Model; import org.netbeans.modules.php.editor.model.ModelUtils; import org.netbeans.modules.php.editor.model.TypeScope; @@ -87,6 +89,71 @@ public void updateDefaultValues() { param.setValue(value); } } + updateImport(); + } + + private void updateImport() { + final AutoImport.Hints autoImportHints = getAutoImportHints(); + if (autoImportHints != null) { + JTextComponent component = request.getComponent(); + if (component == null) { + return; + } + final Document doc = component.getDocument(); + if (doc == null) { + return; + } + RP.schedule(() -> { + try { + PHPParseResult[] result = new PHPParseResult[1]; + ParserManager.parse(Collections.singleton(Source.create(doc)), new UserTask() { + + @Override + public void run(ResultIterator resultIterator) throws Exception { + Parser.Result parserResult = resultIterator.getParserResult(); + if (parserResult instanceof PHPParseResult) { + result[0] = (PHPParseResult) parserResult; + } + } + }); + AutoImport.get(result[0]).insert(autoImportHints, component.getCaretPosition()); + } catch (ParseException ex) { + LOGGER.log(Level.WARNING, null, ex); + } + }, 300, TimeUnit.MILLISECONDS); + } + } + + @CheckForNull + private AutoImport.Hints getAutoImportHints() { + String fqName = CodeUtils.EMPTY_STRING; + String aliasName = CodeUtils.EMPTY_STRING; + String useType = CodeUtils.EMPTY_STRING; + for (CodeTemplateParameter param : request.getMasterParameters()) { + if (param.getName().equals(AutoImport.PARAM_NAME)) { + for (Entry entry : param.getHints().entrySet()) { + String key = entry.getKey(); + switch (key) { + case AutoImport.PARAM_KEY_FQ_NAME: + fqName = entry.getValue(); + break; + case AutoImport.PARAM_KEY_ALIAS_NAME: + aliasName = entry.getValue(); + break; + case AutoImport.PARAM_KEY_USE_TYPE: + useType = entry.getValue(); + break; + default: + // noop + break; + } + } + if (!fqName.isEmpty() && !useType.isEmpty()) { + return new AutoImport.Hints(fqName, useType, aliasName); + } + } + } + return null; } @Override diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java index aad423e775b0..5772b0112bbe 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java @@ -41,6 +41,7 @@ import javax.swing.ImageIcon; import javax.swing.text.BadLocationException; import javax.swing.text.Document; +import org.netbeans.api.annotations.common.CheckForNull; import org.netbeans.api.annotations.common.NullAllowed; import org.netbeans.api.editor.EditorRegistry; import org.netbeans.api.editor.completion.Completion; @@ -105,7 +106,9 @@ import static org.netbeans.modules.php.editor.PredefinedSymbols.Attributes.OVERRIDE; import org.netbeans.modules.php.editor.api.elements.EnumCaseElement; import org.netbeans.modules.php.editor.api.elements.EnumElement; +import org.netbeans.modules.php.editor.codegen.AutoImport; import org.netbeans.modules.php.editor.elements.ElementUtils; +import org.netbeans.modules.php.editor.options.CodeCompletionPanel; import org.netbeans.modules.php.editor.options.CodeCompletionPanel.CodeCompletionType; import org.netbeans.modules.php.editor.options.OptionsUtils; import org.netbeans.modules.php.editor.parser.PHPParseResult; @@ -129,16 +132,23 @@ public abstract class PHPCompletionItem implements CompletionProposal { protected static final ImageIcon KEYWORD_ICON = IconsUtils.loadKeywordIcon(); protected static final ImageIcon ENUM_CASE_ICON = IconsUtils.loadEnumCaseIcon(); private static final int TYPE_NAME_MAX_LENGTH = Integer.getInteger("nb.php.editor.ccTypeNameMaxLength", 30); // NOI18N - final CompletionRequest request; - private final ElementHandle element; - private QualifiedNameKind generateAs; - private static ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); private static final Cache PROPERTIES_CACHE = new Cache<>(new WeakHashMap<>()); + private static final String AUTO_IMPORT_PARAM_FORMAT = "%s${php-auto-import default=\"\" fqName=%s aliasName=\"%s\" useType=%s editable=false}"; // NOI18N + private static ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); + private static volatile Boolean ADD_FIRST_CLASS_CALLABLE = null; // for unit tests + + final CompletionRequest request; + private final ElementHandle element; private final boolean isPlatform; private final boolean isDeprecated; + private QualifiedNameKind generateAs; + + // for unit tests private PhpVersion phpVersion; - private static volatile Boolean ADD_FIRST_CLASS_CALLABLE = null; // for unit tests + private CodeCompletionType codeCompletionType; + private Boolean isAutoImport = null; + private Boolean isGlobalItemImportable = null; PHPCompletionItem(ElementHandle element, CompletionRequest request, QualifiedNameKind generateAs) { this.request = request; @@ -289,19 +299,23 @@ public String getInsertPrefix() { } if (props.getPhpVersion() != PhpVersion.PHP_5) { if (generateAs == null) { - CodeCompletionType codeCompletionType = OptionsUtils.codeCompletionType(); - switch (codeCompletionType) { + CodeCompletionType completionType = getCodeCompletionType(); + switch (completionType) { case FULLY_QUALIFIED: template.append(ifq.getFullyQualifiedName()); return template.toString(); case UNQUALIFIED: + String autoImportTemplate = createAutoImportTemplate(ifq); + if (autoImportTemplate != null) { + return autoImportTemplate; + } template.append(getName()); return template.toString(); case SMART: generateAs = qn.getKind(); break; default: - assert false : codeCompletionType; + assert false : completionType; } } } else { @@ -359,12 +373,121 @@ public String getInsertPrefix() { assert false : "[" + tpl + "] should start with [" + extraPrefix + "]"; } } + String autoImportTemplate = createAutoImportTemplate(ifq); + if (autoImportTemplate != null) { + return autoImportTemplate; + } return tpl; } return getName(); } + @CheckForNull + private String createAutoImportTemplate(FullyQualifiedElement fullyQualifiedElement) { + if (isAutoImport()) { + String fqName = fullyQualifiedElement.getFullyQualifiedName().toString().substring(CodeUtils.NS_SEPARATOR.length()); + String name = getName(); + String useType = getUseType(); + String aliasName = CodeUtils.EMPTY_STRING; + boolean isGlobalNamespace = !fqName.contains(CodeUtils.NS_SEPARATOR); + Model model = request.result.getModel(); + NamespaceDeclaration namespaceDeclaration = findEnclosingNamespace(request.result, request.anchor); + NamespaceScope namespaceScope = ModelUtils.getNamespaceScope(namespaceDeclaration, model.getFileScope()); + if (!useType.isEmpty() && isImportableScope() && !AutoImport.sameUseNameExists(name, fqName, AutoImport.getUseScopeType(useType), namespaceScope)) { + if (isAutoImportContext(request.context) && !fullyQualifiedElement.isAliased() && isGlobalItemImportable(isGlobalNamespace)) { + // note: add an empty parameter(hidden parameter) after a name to avoid filtering completion items + // if we add a default value to the parameter template, completion items are removed(filtered) from a completion list when we move the caret. + // see: org.netbeans.modules.csl.editor.completion.GsfCompletionProvider.JavaCompletionQuery.getFilteredData() + return String.format(AUTO_IMPORT_PARAM_FORMAT, name, fqName, aliasName, useType); + } + } + } + return null; + } + + // for unit tests + void setAutoImport(boolean isAutoImport) { + this.isAutoImport = isAutoImport; + } + + private boolean isAutoImport() { + if (isAutoImport != null) { + // for unit tests + return isAutoImport; + } + return OptionsUtils.autoImport(); + } + + // for unit tests + void setCodeCompletionType(CodeCompletionType codeCompletionType) { + this.codeCompletionType = codeCompletionType; + } + + private CodeCompletionType getCodeCompletionType() { + if (codeCompletionType != null) { + // for unit tests + return codeCompletionType; + } + return OptionsUtils.codeCompletionType(); + } + + // for unit tests + void setGlobalItemImportable(boolean isGlobalItemImportable) { + this.isGlobalItemImportable = isGlobalItemImportable; + } + + private boolean isGlobalItemImportable(boolean isGlobalNamespace) { + if (isGlobalNamespace) { + if (isGlobalItemImportable != null) { + // for unit tests + return isGlobalItemImportable; + } + CodeCompletionPanel.GlobalNamespaceAutoImportType globalNSImport = null; + switch (getUseType()) { + case AutoImport.USE_TYPE: + globalNSImport = OptionsUtils.globalNSImportType(); + break; + case AutoImport.USE_FUNCTION: + globalNSImport = OptionsUtils.globalNSImportFunction(); + break; + case AutoImport.USE_CONST: + globalNSImport = OptionsUtils.globalNSImportConst(); + break; + default: + assert false : "Unknown use type: " + getUseType(); // NOI18N + } + return globalNSImport == CodeCompletionPanel.GlobalNamespaceAutoImportType.IMPORT; + } + return true; + } + + private boolean isImportableScope() { + Model model = request.result.getModel(); + Collection declaredNamespaces = model.getFileScope().getDeclaredNamespaces(); + NamespaceDeclaration namespaceDeclaration = findEnclosingNamespace(request.result, request.anchor); + if (declaredNamespaces.size() > 1 && namespaceDeclaration == null) { + return false; + } else if (declaredNamespaces.size() == 1) { + return OptionsUtils.autoImportFileScope(); + } else if (namespaceDeclaration != null) { + return OptionsUtils.autoImportNamespaceScope(); + } + return false; + } + + private String getUseType() { + String useType = CodeUtils.EMPTY_STRING; + if (getKind() == ElementKind.CLASS || getKind() == ElementKind.CONSTRUCTOR) { + useType = AutoImport.USE_TYPE; + } else if (this instanceof ConstantItem) { + useType = AutoImport.USE_CONST; + } else if (this instanceof FunctionElementItem) { + useType = AutoImport.USE_FUNCTION; + } + return useType; + } + @Override public String getRhsHtml(HtmlFormatter formatter) { if (element instanceof TypeMemberElement) { @@ -478,6 +601,15 @@ private boolean isNewClassContext(CompletionContext context) { || context.equals(CompletionContext.ATTRIBUTE); } + private boolean isAutoImportContext(CompletionContext context) { + return context != CompletionContext.GROUP_USE_KEYWORD + && context != CompletionContext.GROUP_USE_FUNCTION_KEYWORD + && context != CompletionContext.GROUP_USE_CONST_KEYWORD + && context != CompletionContext.USE_KEYWORD + && context != CompletionContext.USE_FUNCTION_KEYWORD + && context != CompletionContext.USE_CONST_KEYWORD; + } + static class NewClassItem extends MethodElementItem { /** @@ -1794,6 +1926,11 @@ public String getName() { return super.getName(); } + @Override + public String getCustomInsertTemplate() { + return super.getInsertPrefix(); + } + @Override public String getLhsHtml(HtmlFormatter formatter) { ElementHandle element = getElement(); @@ -1844,6 +1981,10 @@ public ElementKind getKind() { return ElementKind.CLASS; } + @Override + public String getCustomInsertTemplate() { + return super.getInsertPrefix(); + } } static class ClassItem extends PHPCompletionItem { diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/options/Bundle.properties b/php/php.editor/src/org/netbeans/modules/php/editor/options/Bundle.properties index 2990238b6b26..819d87132c2d 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/options/Bundle.properties +++ b/php/php.editor/src/org/netbeans/modules/php/editor/options/Bundle.properties @@ -90,3 +90,18 @@ CodeCompletionPanel.trueFalseNullCheckBox.text="TRUE", "FALSE", "NULL" C&onstant CodeCompletionPanel.autoCompletionCommentAsteriskLabel.text=C&omment Completion: CodeCompletionPanel.autoCompletionCommentAsteriskCheckBox.text=&Insert " * " after a line break (Multi line comment /* */ only) CodeCompletionPanel.codeCompletionFirstClassCallableCheckBox.text=Add First Class Callable Syntax +CodeCompletionPanel.autoImportInfoLabel.text=Fix imports after completing names without namespace names if possible
Otherwise, the behavior is the same as "Smart" or "Unqualified" +CodeCompletionPanel.autoImportGlobalNamespaceLabel.text=Auto Import for Global Namespace Names (e.g. "\\MyClass"): +CodeCompletionPanel.autoImportGlobalNamespaceTypeLabel.text=T&ype: +CodeCompletionPanel.autoImportGlobalNamespaceTypeDoNotImportRadioButton.text=Do&n't Import +CodeCompletionPanel.autoImportGlobalNamespaceTypeImportRadioButton.text=P&refer Import +CodeCompletionPanel.autoImportGlobalNamespaceFunctionLabel.text=&Function: +CodeCompletionPanel.autoImportGlobalNamespaceFunctionImportRadioButton.text=Prefer &Import +CodeCompletionPanel.autoImportGlobalNamespaceFunctionDoNotImportRadioButton.text=Don't Impor&t +CodeCompletionPanel.autoImportGlobalNamespaceConstLabel.text=&Const: +CodeCompletionPanel.autoImportGlobalNamespaceConstImportRadioButton.text=Prefer I&mport +CodeCompletionPanel.autoImportGlobalNamespaceConstDoNotImportRadioButton.text=Don't Impo&rt +CodeCompletionPanel.autoImportForScopeLabel.text=&Auto Import for Scope: +CodeCompletionPanel.autoImportFileScopeCheckBox.text=&File Scope +CodeCompletionPanel.autoImportNamesapceScopeCheckBox.text=Namespace Sc&ope +CodeCompletionPanel.autoImportCheckBox.text=&Auto Import (only "Smart" and "Unqualified" completion) diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/options/CodeCompletionPanel.form b/php/php.editor/src/org/netbeans/modules/php/editor/options/CodeCompletionPanel.form index 71d38a15db54..ca7630bb1b63 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/options/CodeCompletionPanel.form +++ b/php/php.editor/src/org/netbeans/modules/php/editor/options/CodeCompletionPanel.form @@ -29,6 +29,12 @@ + + + + + + @@ -53,67 +59,75 @@ - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + @@ -165,7 +179,37 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -179,7 +223,7 @@ - + @@ -507,6 +551,13 @@ + + + + + + + @@ -577,5 +628,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/options/CodeCompletionPanel.java b/php/php.editor/src/org/netbeans/modules/php/editor/options/CodeCompletionPanel.java index f52dd8ea21be..17cf59ffc406 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/options/CodeCompletionPanel.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/options/CodeCompletionPanel.java @@ -49,7 +49,8 @@ public class CodeCompletionPanel extends JPanel { public static enum CodeCompletionType { SMART, FULLY_QUALIFIED, - UNQUALIFIED; + UNQUALIFIED, + ; public static CodeCompletionType resolve(String value) { if (value != null) { @@ -79,6 +80,23 @@ public static VariablesScope resolve(String value) { } } + public static enum GlobalNamespaceAutoImportType { + IMPORT, + DO_NOT_IMPORT, + ; + + public static GlobalNamespaceAutoImportType resolve(String value) { + if (value != null) { + try { + return valueOf(value); + } catch (IllegalArgumentException ex) { + // ignored + } + } + return IMPORT; + } + } + static final String PHP_AUTO_COMPLETION_FULL = "phpAutoCompletionFull"; // NOI18N static final String PHP_AUTO_COMPLETION_VARIABLES = "phpAutoCompletionVariables"; // NOI18N static final String PHP_AUTO_COMPLETION_TYPES = "phpAutoCompletionTypes"; // NOI18N @@ -93,6 +111,12 @@ public static VariablesScope resolve(String value) { static final String PHP_AUTO_STRING_CONCATINATION = "phpCodeCompletionStringAutoConcatination"; //NOI18N static final String PHP_AUTO_COMPLETION_USE_LOWERCASE_TRUE_FALSE_NULL = "phpAutoCompletionUseLowercaseTrueFalseNull"; //NOI18N static final String PHP_AUTO_COMPLETION_COMMENT_ASTERISK = "phpAutoCompletionCommentAsterisk"; // NOI18N + static final String PHP_AUTO_IMPORT = "phpAutoImport"; // NOI18N + static final String PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE = "phpAutoImportGlobalNSImportType"; // NOI18N + static final String PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION = "phpAutoImportGlobalNSImportFunction"; // NOI18N + static final String PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST = "phpAutoImportGlobalNSImportConst"; // NOI18N + static final String PHP_AUTO_IMPORT_FILE_SCOPE = "phpAutoImportFileScope"; //NOI18N + static final String PHP_AUTO_IMPORT_NAMESPACE_SCOPE = "phpAutoImportNamespaceScope"; //NOI18N // default values static final boolean PHP_AUTO_COMPLETION_FULL_DEFAULT = true; @@ -107,6 +131,12 @@ public static VariablesScope resolve(String value) { static final boolean PHP_AUTO_STRING_CONCATINATION_DEFAULT = true; static final boolean PHP_AUTO_COMPLETION_USE_LOWERCASE_TRUE_FALSE_NULL_DEFAULT = true; static final boolean PHP_AUTO_COMPLETION_COMMENT_ASTERISK_DEFAULT = true; + static final boolean PHP_AUTO_IMPORT_DEFAULT = false; + static final boolean PHP_AUTO_IMPORT_FILE_SCOPE_DEFAULT = false; + static final boolean PHP_AUTO_IMPORT_NAMESPACE_SCOPE_DEFAULT = true; + static final String PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE_DEFAULT = GlobalNamespaceAutoImportType.DO_NOT_IMPORT.name(); + static final String PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION_DEFAULT = GlobalNamespaceAutoImportType.DO_NOT_IMPORT.name(); + static final String PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST_DEFAULT = GlobalNamespaceAutoImportType.DO_NOT_IMPORT.name(); private final Preferences preferences; private final ItemListener defaultCheckBoxListener = new DefaultCheckBoxListener(); @@ -123,6 +153,7 @@ public CodeCompletionPanel(Preferences preferences) { initCodeCompletionForMethods(); initCodeCompletionForVariables(); initCodeCompletionType(); + initGlobalNamespaceAutoImportType(); id2Saved.put(PHP_AUTO_COMPLETION_FULL, autoCompletionFullRadioButton.isSelected()); id2Saved.put(PHP_AUTO_COMPLETION_VARIABLES, autoCompletionVariablesCheckBox.isSelected()); id2Saved.put(PHP_AUTO_COMPLETION_TYPES, autoCompletionTypesCheckBox.isSelected()); @@ -139,6 +170,15 @@ public CodeCompletionPanel(Preferences preferences) { id2Saved.put(PHP_AUTO_STRING_CONCATINATION, autoStringConcatenationCheckBox.isSelected()); id2Saved.put(PHP_AUTO_COMPLETION_USE_LOWERCASE_TRUE_FALSE_NULL, trueFalseNullCheckBox.isSelected()); id2Saved.put(PHP_AUTO_COMPLETION_COMMENT_ASTERISK, autoCompletionCommentAsteriskCheckBox.isSelected()); + id2Saved.put(PHP_AUTO_IMPORT, autoImportCheckBox.isSelected()); + id2Saved.put(PHP_AUTO_IMPORT_FILE_SCOPE, autoImportFileScopeCheckBox.isSelected()); + id2Saved.put(PHP_AUTO_IMPORT_NAMESPACE_SCOPE, autoImportNamesapceScopeCheckBox.isSelected()); + GlobalNamespaceAutoImportType typeType = GlobalNamespaceAutoImportType.resolve(preferences.get(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE, PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE_DEFAULT)); + id2Saved.put(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE, typeType == null ? null : typeType.name()); + GlobalNamespaceAutoImportType functionType = GlobalNamespaceAutoImportType.resolve(preferences.get(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION, PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION_DEFAULT)); + id2Saved.put(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION, functionType == null ? null : functionType.name()); + GlobalNamespaceAutoImportType constType = GlobalNamespaceAutoImportType.resolve(preferences.get(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST, PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST_DEFAULT)); + id2Saved.put(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST, constType == null ? null : constType.name()); } public static PreferencesCustomizer.Factory getCustomizerFactory() { @@ -249,6 +289,24 @@ private void initCodeCompletionForMethods() { PHP_CODE_COMPLETION_FIRST_CLASS_CALLABLE_DEFAULT); codeCompletionFirstClassCallableCheckBox.setSelected(codeCompletionFirstClassCallable); codeCompletionFirstClassCallableCheckBox.addItemListener(defaultCheckBoxListener); + + boolean autoImport = preferences.getBoolean( + PHP_AUTO_IMPORT, + PHP_AUTO_IMPORT_DEFAULT); + autoImportCheckBox.setSelected(autoImport); + autoImportCheckBox.addItemListener(defaultCheckBoxListener); + + boolean autoImportFileScope = preferences.getBoolean( + PHP_AUTO_IMPORT_FILE_SCOPE, + PHP_AUTO_IMPORT_FILE_SCOPE_DEFAULT); + autoImportFileScopeCheckBox.setSelected(autoImportFileScope); + autoImportFileScopeCheckBox.addItemListener(defaultCheckBoxListener); + + boolean autoImportNamespaceScope = preferences.getBoolean( + PHP_AUTO_IMPORT_NAMESPACE_SCOPE, + PHP_AUTO_IMPORT_NAMESPACE_SCOPE_DEFAULT); + autoImportNamesapceScopeCheckBox.setSelected(autoImportNamespaceScope); + autoImportNamesapceScopeCheckBox.addItemListener(defaultCheckBoxListener); } private void initCodeCompletionForVariables() { @@ -287,6 +345,31 @@ private void initCodeCompletionType() { unqualifiedRadioButton.addItemListener(defaultRadioButtonListener); } + private void initGlobalNamespaceAutoImportType() { + GlobalNamespaceAutoImportType typeType = GlobalNamespaceAutoImportType.resolve(preferences.get(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE, GlobalNamespaceAutoImportType.IMPORT.name())); + initAutoImportButton(typeType, autoImportGlobalNamespaceTypeImportRadioButton, autoImportGlobalNamespaceTypeDoNotImportRadioButton); + GlobalNamespaceAutoImportType functionType = GlobalNamespaceAutoImportType.resolve(preferences.get(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION, GlobalNamespaceAutoImportType.DO_NOT_IMPORT.name())); + initAutoImportButton(functionType, autoImportGlobalNamespaceFunctionImportRadioButton, autoImportGlobalNamespaceFunctionDoNotImportRadioButton); + GlobalNamespaceAutoImportType constType = GlobalNamespaceAutoImportType.resolve(preferences.get(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST, GlobalNamespaceAutoImportType.DO_NOT_IMPORT.name())); + initAutoImportButton(constType, autoImportGlobalNamespaceConstImportRadioButton, autoImportGlobalNamespaceConstDoNotImportRadioButton); + } + + private void initAutoImportButton(GlobalNamespaceAutoImportType type, JRadioButton importButton, JRadioButton doNotImportButton) { + switch (type) { + case IMPORT: + importButton.setSelected(true); + break; + case DO_NOT_IMPORT: + doNotImportButton.setSelected(true); + break; + default: + assert false : "Unknown Import Type: " + type; // NOI18N + break; + } + importButton.addItemListener(defaultRadioButtonListener); + doNotImportButton.addItemListener(defaultRadioButtonListener); + } + void validateData() { preferences.putBoolean(PHP_AUTO_COMPLETION_FULL, autoCompletionFullRadioButton.isSelected()); preferences.putBoolean(PHP_AUTO_COMPLETION_VARIABLES, autoCompletionVariablesCheckBox.isSelected()); @@ -301,6 +384,9 @@ void validateData() { preferences.putBoolean(PHP_AUTO_STRING_CONCATINATION, autoStringConcatenationCheckBox.isSelected()); preferences.putBoolean(PHP_AUTO_COMPLETION_USE_LOWERCASE_TRUE_FALSE_NULL, trueFalseNullCheckBox.isSelected()); preferences.putBoolean(PHP_AUTO_COMPLETION_COMMENT_ASTERISK, autoCompletionCommentAsteriskCheckBox.isSelected()); + preferences.putBoolean(PHP_AUTO_IMPORT, autoImportCheckBox.isSelected()); + preferences.putBoolean(PHP_AUTO_IMPORT_FILE_SCOPE, autoImportFileScopeCheckBox.isSelected()); + preferences.putBoolean(PHP_AUTO_IMPORT_NAMESPACE_SCOPE, autoImportNamesapceScopeCheckBox.isSelected()); VariablesScope variablesScope = null; if (allVariablesRadioButton.isSelected()) { @@ -321,6 +407,33 @@ void validateData() { } assert type != null; preferences.put(PHP_CODE_COMPLETION_TYPE, type.name()); + + GlobalNamespaceAutoImportType typeType = null; + if (autoImportGlobalNamespaceTypeImportRadioButton.isSelected()) { + typeType = GlobalNamespaceAutoImportType.IMPORT; + } else if (autoImportGlobalNamespaceTypeDoNotImportRadioButton.isSelected()) { + typeType = GlobalNamespaceAutoImportType.DO_NOT_IMPORT; + } + assert typeType != null; + preferences.put(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE, typeType.name()); + + GlobalNamespaceAutoImportType functionType = null; + if (autoImportGlobalNamespaceFunctionImportRadioButton.isSelected()) { + functionType = GlobalNamespaceAutoImportType.IMPORT; + } else if (autoImportGlobalNamespaceFunctionDoNotImportRadioButton.isSelected()) { + functionType = GlobalNamespaceAutoImportType.DO_NOT_IMPORT; + } + assert functionType != null; + preferences.put(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION, functionType.name()); + + GlobalNamespaceAutoImportType constType = null; + if (autoImportGlobalNamespaceConstImportRadioButton.isSelected()) { + constType = GlobalNamespaceAutoImportType.IMPORT; + } else if (autoImportGlobalNamespaceConstDoNotImportRadioButton.isSelected()) { + constType = GlobalNamespaceAutoImportType.DO_NOT_IMPORT; + } + assert constType != null; + preferences.put(PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST, constType.name()); } void setAutoCompletionState(boolean enabled) { @@ -341,6 +454,9 @@ private void initComponents() { codeCompletionTypeButtonGroup = new ButtonGroup(); codeCompletionVariablesScopeButtonGroup = new ButtonGroup(); autoCompletionButtonGroup = new ButtonGroup(); + autoImportGlobalNSTypebuttonGroup = new ButtonGroup(); + autoImportGlobalNSFunctionbuttonGroup = new ButtonGroup(); + autoImportGlobalNSConstbuttonGroup = new ButtonGroup(); enableAutocompletionLabel = new JLabel(); autoCompletionFullRadioButton = new JRadioButton(); autoCompletionCustomizeRadioButton = new JRadioButton(); @@ -360,6 +476,7 @@ private void initComponents() { fullyQualifiedInfoLabel = new JLabel(); unqualifiedRadioButton = new JRadioButton(); unqualifiedInfoLabel = new JLabel(); + autoImportInfoLabel = new JLabel(); codeCompletionSmartParametersPreFillingCheckBox = new JCheckBox(); codeCompletionFirstClassCallableCheckBox = new JCheckBox(); autoCompletionSmartQuotesLabel = new JLabel(); @@ -369,6 +486,20 @@ private void initComponents() { trueFalseNullCheckBox = new JCheckBox(); autoCompletionCommentAsteriskLabel = new JLabel(); autoCompletionCommentAsteriskCheckBox = new JCheckBox(); + autoImportGlobalNamespaceLabel = new JLabel(); + autoImportGlobalNamespaceTypeLabel = new JLabel(); + autoImportGlobalNamespaceTypeImportRadioButton = new JRadioButton(); + autoImportGlobalNamespaceTypeDoNotImportRadioButton = new JRadioButton(); + autoImportGlobalNamespaceFunctionLabel = new JLabel(); + autoImportGlobalNamespaceFunctionImportRadioButton = new JRadioButton(); + autoImportGlobalNamespaceFunctionDoNotImportRadioButton = new JRadioButton(); + autoImportGlobalNamespaceConstLabel = new JLabel(); + autoImportGlobalNamespaceConstImportRadioButton = new JRadioButton(); + autoImportGlobalNamespaceConstDoNotImportRadioButton = new JRadioButton(); + autoImportForScopeLabel = new JLabel(); + autoImportFileScopeCheckBox = new JCheckBox(); + autoImportNamesapceScopeCheckBox = new JCheckBox(); + autoImportCheckBox = new JCheckBox(); enableAutocompletionLabel.setLabelFor(autoCompletionFullRadioButton); Mnemonics.setLocalizedText(enableAutocompletionLabel, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.enableAutocompletionLabel.text")); // NOI18N @@ -423,6 +554,8 @@ private void initComponents() { unqualifiedInfoLabel.setLabelFor(unqualifiedRadioButton); Mnemonics.setLocalizedText(unqualifiedInfoLabel, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.unqualifiedInfoLabel.text")); // NOI18N + Mnemonics.setLocalizedText(autoImportInfoLabel, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportInfoLabel.text")); // NOI18N + codeCompletionSmartParametersPreFillingCheckBox.setSelected(true); Mnemonics.setLocalizedText(codeCompletionSmartParametersPreFillingCheckBox, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.codeCompletionSmartParametersPreFillingCheckBox.text")); // NOI18N @@ -444,59 +577,108 @@ private void initComponents() { Mnemonics.setLocalizedText(autoCompletionCommentAsteriskCheckBox, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoCompletionCommentAsteriskCheckBox.text")); // NOI18N + Mnemonics.setLocalizedText(autoImportGlobalNamespaceLabel, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceLabel.text")); // NOI18N + + autoImportGlobalNamespaceTypeLabel.setLabelFor(autoImportGlobalNamespaceTypeImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceTypeLabel, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceTypeLabel.text")); // NOI18N + + autoImportGlobalNSTypebuttonGroup.add(autoImportGlobalNamespaceTypeImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceTypeImportRadioButton, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceTypeImportRadioButton.text")); // NOI18N + + autoImportGlobalNSTypebuttonGroup.add(autoImportGlobalNamespaceTypeDoNotImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceTypeDoNotImportRadioButton, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceTypeDoNotImportRadioButton.text")); // NOI18N + + autoImportGlobalNamespaceFunctionLabel.setLabelFor(autoImportGlobalNamespaceFunctionImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceFunctionLabel, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceFunctionLabel.text")); // NOI18N + + autoImportGlobalNSFunctionbuttonGroup.add(autoImportGlobalNamespaceFunctionImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceFunctionImportRadioButton, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceFunctionImportRadioButton.text")); // NOI18N + + autoImportGlobalNSFunctionbuttonGroup.add(autoImportGlobalNamespaceFunctionDoNotImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceFunctionDoNotImportRadioButton, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceFunctionDoNotImportRadioButton.text")); // NOI18N + + autoImportGlobalNamespaceConstLabel.setLabelFor(autoImportGlobalNamespaceConstImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceConstLabel, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceConstLabel.text")); // NOI18N + + autoImportGlobalNSConstbuttonGroup.add(autoImportGlobalNamespaceConstImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceConstImportRadioButton, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceConstImportRadioButton.text")); // NOI18N + + autoImportGlobalNSConstbuttonGroup.add(autoImportGlobalNamespaceConstDoNotImportRadioButton); + Mnemonics.setLocalizedText(autoImportGlobalNamespaceConstDoNotImportRadioButton, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportGlobalNamespaceConstDoNotImportRadioButton.text")); // NOI18N + + autoImportForScopeLabel.setLabelFor(autoImportFileScopeCheckBox); + Mnemonics.setLocalizedText(autoImportForScopeLabel, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportForScopeLabel.text")); // NOI18N + + Mnemonics.setLocalizedText(autoImportFileScopeCheckBox, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportFileScopeCheckBox.text")); // NOI18N + + Mnemonics.setLocalizedText(autoImportNamesapceScopeCheckBox, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportNamesapceScopeCheckBox.text")); // NOI18N + + Mnemonics.setLocalizedText(autoImportCheckBox, NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.autoImportCheckBox.text")); // NOI18N + GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING) .addGroup(layout.createSequentialGroup() + .addGap(12, 12, 12) .addGroup(layout.createParallelGroup(Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addGap(12, 12, 12) - .addGroup(layout.createParallelGroup(Alignment.LEADING) - .addComponent(autoCompletionCustomizeRadioButton) - .addComponent(autoCompletionFullRadioButton) - .addComponent(methodCodeCompletionLabel) - .addComponent(codeCompletionNonStaticMethodsCheckBox) - .addComponent(codeCompletionStaticMethodsCheckBox) - .addComponent(enableAutocompletionLabel) - .addComponent(currentFileVariablesRadioButton) - .addComponent(allVariablesRadioButton) - .addComponent(codeCompletionVariablesScopeLabel) - .addComponent(codeCompletionSmartParametersPreFillingCheckBox) - .addGroup(layout.createSequentialGroup() - .addGap(21, 21, 21) - .addGroup(layout.createParallelGroup(Alignment.LEADING) - .addComponent(autoCompletionTypesCheckBox) - .addComponent(autoCompletionVariablesCheckBox) - .addComponent(autoCompletionNamespacesCheckBox))) - .addComponent(autoCompletionSmartQuotesLabel) - .addComponent(autoCompletionSmartQuotesCheckBox) - .addComponent(autoStringConcatenationCheckBox) - .addComponent(codeCompletionFirstClassCallableCheckBox))) + .addGap(21, 21, 21) + .addComponent(autoImportInfoLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addComponent(autoImportCheckBox) + .addComponent(autoImportForScopeLabel) + .addComponent(autoImportGlobalNamespaceLabel) + .addComponent(autoCompletionCustomizeRadioButton) + .addComponent(autoCompletionFullRadioButton) + .addComponent(methodCodeCompletionLabel) + .addComponent(codeCompletionNonStaticMethodsCheckBox) + .addComponent(codeCompletionStaticMethodsCheckBox) + .addComponent(enableAutocompletionLabel) + .addComponent(currentFileVariablesRadioButton) + .addComponent(allVariablesRadioButton) + .addComponent(codeCompletionVariablesScopeLabel) + .addComponent(codeCompletionSmartParametersPreFillingCheckBox) + .addComponent(autoCompletionSmartQuotesLabel) + .addComponent(autoCompletionSmartQuotesCheckBox) + .addComponent(autoStringConcatenationCheckBox) + .addComponent(codeCompletionFirstClassCallableCheckBox) + .addComponent(codeCompletionTypeLabel) + .addComponent(smartRadioButton) + .addComponent(fullyQualifiedRadioButton) + .addComponent(unqualifiedRadioButton) + .addComponent(useLowercaseLabel) + .addComponent(trueFalseNullCheckBox) + .addComponent(autoCompletionCommentAsteriskLabel) + .addComponent(autoCompletionCommentAsteriskCheckBox) .addGroup(layout.createSequentialGroup() - .addGap(12, 12, 12) + .addGap(21, 21, 21) .addGroup(layout.createParallelGroup(Alignment.LEADING) - .addComponent(codeCompletionTypeLabel) - .addComponent(smartRadioButton) - .addComponent(fullyQualifiedRadioButton) - .addComponent(unqualifiedRadioButton) - .addGroup(layout.createSequentialGroup() - .addGap(21, 21, 21) - .addGroup(layout.createParallelGroup(Alignment.LEADING) - .addComponent(smartInfoLabel) - .addComponent(fullyQualifiedInfoLabel) - .addComponent(unqualifiedInfoLabel))))) - .addGroup(layout.createSequentialGroup() - .addGap(12, 12, 12) - .addComponent(useLowercaseLabel)) - .addGroup(layout.createSequentialGroup() - .addGap(12, 12, 12) - .addComponent(trueFalseNullCheckBox)) + .addComponent(autoCompletionTypesCheckBox) + .addComponent(autoCompletionVariablesCheckBox) + .addComponent(autoCompletionNamespacesCheckBox) + .addComponent(smartInfoLabel) + .addComponent(fullyQualifiedInfoLabel) + .addComponent(unqualifiedInfoLabel))) .addGroup(layout.createSequentialGroup() - .addGap(12, 12, 12) - .addComponent(autoCompletionCommentAsteriskLabel)) + .addGap(6, 6, 6) + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(autoImportGlobalNamespaceTypeLabel) + .addComponent(autoImportGlobalNamespaceFunctionLabel) + .addComponent(autoImportGlobalNamespaceConstLabel)) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(autoImportGlobalNamespaceFunctionImportRadioButton) + .addComponent(autoImportGlobalNamespaceTypeImportRadioButton) + .addComponent(autoImportGlobalNamespaceConstImportRadioButton)) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(autoImportGlobalNamespaceConstDoNotImportRadioButton) + .addComponent(autoImportGlobalNamespaceFunctionDoNotImportRadioButton) + .addComponent(autoImportGlobalNamespaceTypeDoNotImportRadioButton))) .addGroup(layout.createSequentialGroup() - .addGap(12, 12, 12) - .addComponent(autoCompletionCommentAsteriskCheckBox))) + .addGap(6, 6, 6) + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(autoImportNamesapceScopeCheckBox) + .addComponent(autoImportFileScopeCheckBox)))) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING) @@ -544,6 +726,33 @@ private void initComponents() { .addPreferredGap(ComponentPlacement.RELATED) .addComponent(unqualifiedInfoLabel) .addPreferredGap(ComponentPlacement.UNRELATED) + .addComponent(autoImportCheckBox) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(autoImportInfoLabel, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addComponent(autoImportForScopeLabel) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(autoImportFileScopeCheckBox) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(autoImportNamesapceScopeCheckBox) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addComponent(autoImportGlobalNamespaceLabel) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(Alignment.BASELINE) + .addComponent(autoImportGlobalNamespaceTypeLabel) + .addComponent(autoImportGlobalNamespaceTypeImportRadioButton) + .addComponent(autoImportGlobalNamespaceTypeDoNotImportRadioButton)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(Alignment.BASELINE) + .addComponent(autoImportGlobalNamespaceFunctionLabel) + .addComponent(autoImportGlobalNamespaceFunctionImportRadioButton) + .addComponent(autoImportGlobalNamespaceFunctionDoNotImportRadioButton)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(Alignment.BASELINE) + .addComponent(autoImportGlobalNamespaceConstDoNotImportRadioButton) + .addComponent(autoImportGlobalNamespaceConstImportRadioButton) + .addComponent(autoImportGlobalNamespaceConstLabel)) + .addPreferredGap(ComponentPlacement.UNRELATED) .addComponent(autoCompletionSmartQuotesLabel) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(autoCompletionSmartQuotesCheckBox) @@ -557,7 +766,7 @@ private void initComponents() { .addComponent(autoCompletionCommentAsteriskLabel) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(autoCompletionCommentAsteriskCheckBox) - .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(44, Short.MAX_VALUE)) ); enableAutocompletionLabel.getAccessibleContext().setAccessibleName(NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.enableAutocompletionLabel.AccessibleContext.accessibleName")); // NOI18N @@ -613,6 +822,24 @@ private void initComponents() { private JLabel autoCompletionSmartQuotesLabel; private JCheckBox autoCompletionTypesCheckBox; private JCheckBox autoCompletionVariablesCheckBox; + private JCheckBox autoImportCheckBox; + private JCheckBox autoImportFileScopeCheckBox; + private JLabel autoImportForScopeLabel; + private ButtonGroup autoImportGlobalNSConstbuttonGroup; + private ButtonGroup autoImportGlobalNSFunctionbuttonGroup; + private ButtonGroup autoImportGlobalNSTypebuttonGroup; + private JRadioButton autoImportGlobalNamespaceConstDoNotImportRadioButton; + private JRadioButton autoImportGlobalNamespaceConstImportRadioButton; + private JLabel autoImportGlobalNamespaceConstLabel; + private JRadioButton autoImportGlobalNamespaceFunctionDoNotImportRadioButton; + private JRadioButton autoImportGlobalNamespaceFunctionImportRadioButton; + private JLabel autoImportGlobalNamespaceFunctionLabel; + private JLabel autoImportGlobalNamespaceLabel; + private JRadioButton autoImportGlobalNamespaceTypeDoNotImportRadioButton; + private JRadioButton autoImportGlobalNamespaceTypeImportRadioButton; + private JLabel autoImportGlobalNamespaceTypeLabel; + private JLabel autoImportInfoLabel; + private JCheckBox autoImportNamesapceScopeCheckBox; private JCheckBox autoStringConcatenationCheckBox; private JCheckBox codeCompletionFirstClassCallableCheckBox; private JCheckBox codeCompletionNonStaticMethodsCheckBox; diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/options/OptionsUtils.java b/php/php.editor/src/org/netbeans/modules/php/editor/options/OptionsUtils.java index 2abee8da9d67..65b41de611f2 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/options/OptionsUtils.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/options/OptionsUtils.java @@ -110,6 +110,36 @@ public void preferenceChange(PreferenceChangeEvent evt) { if (settingName == null || CodeCompletionPanel.PHP_CODE_COMPLETION_TYPE.equals(settingName)) { codeCompletionType = CodeCompletionPanel.CodeCompletionType.resolve(preferences.get(CodeCompletionPanel.PHP_CODE_COMPLETION_TYPE, null)); } + + if (settingName == null || CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE.equals(settingName)) { + globalNSImportType = CodeCompletionPanel.GlobalNamespaceAutoImportType.resolve(preferences.get(CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE, CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_TYPE_DEFAULT)); + } + + if (settingName == null || CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION.equals(settingName)) { + globalNSImportFunction = CodeCompletionPanel.GlobalNamespaceAutoImportType.resolve(preferences.get(CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION, CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_FUNCTION_DEFAULT)); + } + + if (settingName == null || CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST.equals(settingName)) { + globalNSImportConst = CodeCompletionPanel.GlobalNamespaceAutoImportType.resolve(preferences.get(CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST, CodeCompletionPanel.PHP_AUTO_IMPORT_GLOBAL_NS_IMPORT_CONST_DEFAULT)); + } + + if (settingName == null || CodeCompletionPanel.PHP_AUTO_IMPORT.equals(settingName)) { + autoImport = preferences.getBoolean( + CodeCompletionPanel.PHP_AUTO_IMPORT, + CodeCompletionPanel.PHP_AUTO_IMPORT_DEFAULT); + } + + if (settingName == null || CodeCompletionPanel.PHP_AUTO_IMPORT_FILE_SCOPE.equals(settingName)) { + autoImportFileScope = preferences.getBoolean( + CodeCompletionPanel.PHP_AUTO_IMPORT_FILE_SCOPE, + CodeCompletionPanel.PHP_AUTO_IMPORT_FILE_SCOPE_DEFAULT); + } + + if (settingName == null || CodeCompletionPanel.PHP_AUTO_IMPORT_NAMESPACE_SCOPE.equals(settingName)) { + autoImportNamespaceScope = preferences.getBoolean( + CodeCompletionPanel.PHP_AUTO_IMPORT_NAMESPACE_SCOPE, + CodeCompletionPanel.PHP_AUTO_IMPORT_NAMESPACE_SCOPE_DEFAULT); + } } }; @@ -128,10 +158,16 @@ public void preferenceChange(PreferenceChangeEvent evt) { private static Boolean codeCompletionNonStaticMethods = null; private static Boolean codeCompletionSmartParametersPreFilling = null; private static Boolean codeCompletionFirstClassCallable = null; + private static Boolean autoImport = null; + private static Boolean autoImportFileScope = null; + private static Boolean autoImportNamespaceScope = null; private static CodeCompletionPanel.VariablesScope codeCompletionVariablesScope = null; private static CodeCompletionPanel.CodeCompletionType codeCompletionType = null; + private static CodeCompletionPanel.GlobalNamespaceAutoImportType globalNSImportType = null; + private static CodeCompletionPanel.GlobalNamespaceAutoImportType globalNSImportFunction = null; + private static CodeCompletionPanel.GlobalNamespaceAutoImportType globalNSImportConst = null; private OptionsUtils() { } @@ -274,6 +310,59 @@ public static CodeCompletionPanel.CodeCompletionType codeCompletionType() { return codeCompletionType; } + public static CodeCompletionPanel.GlobalNamespaceAutoImportType globalNSImportType() { + lazyInit(); + assert globalNSImportType != null; + return globalNSImportType; + } + + public static CodeCompletionPanel.GlobalNamespaceAutoImportType globalNSImportFunction() { + lazyInit(); + assert globalNSImportFunction != null; + return globalNSImportFunction; + } + + public static CodeCompletionPanel.GlobalNamespaceAutoImportType globalNSImportConst() { + lazyInit(); + assert globalNSImportConst != null; + return globalNSImportConst; + } + + /** + * Check whether auto import is enabled. + * + * @return {@code true} if auto import is enabled, {@code false} otherwise + */ + public static boolean autoImport() { + lazyInit(); + assert autoImport != null; + return autoImport; + } + + /** + * Auto import for a file scope. + * + * @return {@code true} if import a use in a file scope, otherwise + * {@code false} + */ + public static boolean autoImportFileScope() { + lazyInit(); + assert autoImportFileScope != null; + return autoImportFileScope; + } + + /** + * Auto import for a namespace scope. + * + * @return {@code true} if import a use in a namespace scope, otherwise + * {@code false} + */ + public static boolean autoImportNamespaceScope() { + lazyInit(); + assert autoImportNamespaceScope != null; + return autoImportNamespaceScope; + } + private static void lazyInit() { if (INITED.compareAndSet(false, true)) { preferences = MimeLookup.getLookup(FileUtils.PHP_MIME_TYPE).lookup(Preferences.class); diff --git a/php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php b/php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php new file mode 100644 index 000000000000..421eaa71bf78 --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/autoimport/testGroupUsesC01/testGroupUsesC01.php @@ -0,0 +1,29 @@ + + createClassPathsForTest() { + return Collections.singletonMap( + PhpSourcePath.SOURCE_CP, + ClassPathSupport.createClassPath(new FileObject[] { + FileUtil.toFileObject(new File(getDataDir(), getTestFolderPath())) + }) + ); + } + + public void testInSameNamespace01_Type() throws Exception { + insertTest("^// test", "Same\\NS\\Test\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses01_Type() throws Exception { + insertTest("^// test", "In\\GlobalNS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses01_Function() throws Exception { + insertTest("^// test", "In\\GlobalNS\\function1", UseScope.Type.FUNCTION); + } + + public void testNoExistingUses01_CONST() throws Exception { + insertTest("^// test", "In\\GlobalNS\\const1", UseScope.Type.CONST); + } + + public void testNoExistingUses02_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses02_Function() throws Exception { + insertTest("^// test", "In\\NS\\function1", UseScope.Type.FUNCTION); + } + + public void testNoExistingUses02_CONST() throws Exception { + insertTest("^// test", "In\\NS\\const1", UseScope.Type.CONST); + } + + public void testNoExistingUses03_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses04a_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses04b_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses05_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses06a_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses06b_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses07_Type() throws Exception { + insertTest("^// test", "PhpDoc\\Attributes\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses08_Type() throws Exception { + insertTest("^// test", "Comment\\LineComment\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUses09_Type() throws Exception { + insertTest("^// test", "Comment\\LineComment\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUsesWithDeclare01a_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUsesWithDeclare01b_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUsesWithDeclare02a_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUsesWithDeclare02b_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUsesWithDeclare02c_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUsesWithDeclare03_Type() throws Exception { + insertTest("^// test", "In\\NS\\Class1", UseScope.Type.TYPE); + } + + public void testNoExistingUsesWithDeclare04_Function() throws Exception { + insertTest("^// test", "In\\NS\\function1", UseScope.Type.FUNCTION); + } + + public void testTypeInGlobal01_01() throws Exception { + insertTest("^// test", "Class1", UseScope.Type.TYPE); + } + + public void testTypeInGlobal01_02() throws Exception { + insertTest("^// test", "Vendor\\Pacage\\Class1", UseScope.Type.TYPE); + } + + public void testTypeInGlobal02_01() throws Exception { + insertTest("^// test", "Class1", UseScope.Type.TYPE); + } + + public void testTypeInGlobal02_02() throws Exception { + insertTest("^// test", "Vendor\\Pacage\\Class1", UseScope.Type.TYPE); + } + + public void testTypeInGlobalWithBlock01_01() throws Exception { + insertTest("^// test", "Class1", UseScope.Type.TYPE); + } + + public void testTypeInGlobalWithBlock01_02() throws Exception { + insertTest("^// test", "Vendor\\Package\\Class1", UseScope.Type.TYPE); + } + + // only type singe uses + public void testSingleUsesT01_Type01() throws Exception { + insertTest("^// test", "Vendor\\Package\\Class1", UseScope.Type.TYPE); + } + + public void testSingleUsesT01_Type02() throws Exception { + insertTest("^// test", "Single\\Uses\\Class1", UseScope.Type.TYPE); + } + + public void testSingleUsesT01_Type03() throws Exception { + insertTest("^// test", "Single\\Uses\\Type0", UseScope.Type.TYPE); + } + + public void testSingleUsesT01_Type04() throws Exception { + insertTest("^// test", "Single\\Uses02\\Type0", UseScope.Type.TYPE); + } + + public void testSingleUsesT01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function1", UseScope.Type.FUNCTION); + } + + public void testSingleUsesT01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function1", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesT01_Function02a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type0", UseScope.Type.FUNCTION); + } + + public void testSingleUsesT01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type0", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesT01_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST); + } + + public void testSingleUsesT01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST, option); + } + + public void testSingleUsesT01_Const02a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type0", UseScope.Type.CONST); + } + + public void testSingleUsesT01_Const02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type0", UseScope.Type.CONST, option); + } + + public void testSingleUsesT02_Type01() throws Exception { + insertTest("^// test", "Single\\Uses\\Type2", UseScope.Type.TYPE); + } + + public void testSingleUsesT02_Type02() throws Exception { + insertTest("^// test", "Single\\Uses\\Type6", UseScope.Type.TYPE); + } + + public void testSingleUsesT02_Type03() throws Exception { + insertTest("^// test", "Single\\Type1", UseScope.Type.TYPE); + } + + public void testSingleUsesT02_Type04() throws Exception { + insertTest("^// test", "Type1", UseScope.Type.TYPE); + } + + public void testSingleUsesT02_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesT02_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesT02_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST); + } + + public void testSingleUsesT02_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST, option); + } + + public void testSingleUsesT03_Type01() throws Exception { + insertTest("^// test", "Single\\Uses\\Type3", UseScope.Type.TYPE); + } + + public void testSingleUsesT03_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesT03_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesT03_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST); + } + + public void testSingleUsesT03_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST, option); + } + + // only function singe uses + public void testSingleUsesF01_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type1", UseScope.Type.TYPE); + } + + public void testSingleUsesF01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type1", UseScope.Type.TYPE, option); + } + + public void testSingleUsesF01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesF01_Function02() throws Exception { + insertTest("^// test", "Single\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF01_Function03() throws Exception { + insertTest("^// test", "Single\\Uses\\function1", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF01_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST); + } + + public void testSingleUsesF01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST, option); + } + + public void testSingleUsesF02_Type01a() throws Exception { + insertTest("^// test", "Single\\Type1", UseScope.Type.TYPE); + } + + public void testSingleUsesF02_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Type1", UseScope.Type.TYPE, option); + } + + public void testSingleUsesF02_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF02_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesF02_Function02a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF02_Function02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesF02_Function03() throws Exception { + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF02_Function04() throws Exception { + insertTest("^// test", "function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF02_Function05() throws Exception { + insertTest("^// test", "Single\\test", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF02_Function06() throws Exception { + insertTest("^// test", "functions", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF02_Function07() throws Exception { + insertTest("^// test", "Single\\function02", UseScope.Type.FUNCTION); + } + +// public void testSingleUsesF02_Function06b() throws Exception { +// Option option = new Option() +// .isPSR12(false) +// .hasBlankLineBetweenUseTypes(true); +// insertTest("^// test", "functions", UseScope.Type.FUNCTION, option); +// } +// +// public void testSingleUsesF02_Function06c() throws Exception { +// Option option = new Option() +// .isPSR12(true) +// .hasBlankLineBetweenUseTypes(true); +// insertTest("^// test", "functions", UseScope.Type.FUNCTION, option); +// } + + public void testSingleUsesF02_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST); + } + + public void testSingleUsesF02_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST, option); + } + + public void testSingleUsesF02_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST, option); + } + + public void testSingleUsesF03_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.TYPE); + } + + public void testSingleUsesF03_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.TYPE, option); + } + + public void testSingleUsesF03_Function01() throws Exception { + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF03_Function02() throws Exception { + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF03_Function03() throws Exception { + insertTest("^// test", "Single\\Uses\\function06", UseScope.Type.FUNCTION); + } + + public void testSingleUsesF03_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.CONST); + } + + public void testSingleUsesF03_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.CONST, option); + } + + public void testSingleUsesF03_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.CONST, option); + } + + // only const singe uses + public void testSingleUsesC01_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type1", UseScope.Type.TYPE); + } + + public void testSingleUsesC01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type1", UseScope.Type.TYPE, option); + } + + public void testSingleUsesC01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesC01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesC01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesC01_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST); + } + + public void testSingleUsesC01_Const02() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST1", UseScope.Type.CONST); + } + + public void testSingleUsesC01_Const03() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST12", UseScope.Type.CONST); + } + + public void testSingleUsesC01_Const04() throws Exception { + insertTest("^// test", "CONSTANT", UseScope.Type.CONST); + } + + public void testSingleUsesC02_Type01a() throws Exception { + insertTest("^// test", "Single\\Type01", UseScope.Type.TYPE); + } + + public void testSingleUsesC02_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Type01", UseScope.Type.TYPE, option); + } + + public void testSingleUsesC02_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesC02_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesC02_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesC02_Function02a() throws Exception { + insertTest("^// test", "count", UseScope.Type.FUNCTION); + } + + public void testSingleUsesC02_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "count", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesC02_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "count", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesC02_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.CONST); + } + + public void testSingleUsesC02_Const02() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST02", UseScope.Type.CONST); + } + + public void testSingleUsesC02_Const03() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST03", UseScope.Type.CONST); + } + + public void testSingleUsesC02_Const04() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST05", UseScope.Type.CONST); + } + + public void testSingleUsesC02_Const05() throws Exception { + insertTest("^// test", "constant", UseScope.Type.CONST); + } + + public void testSingleUsesC03_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST02", UseScope.Type.TYPE); + } + + public void testSingleUsesC03_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONST02", UseScope.Type.TYPE, option); + } + + public void testSingleUsesC03_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesC03_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesC03_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesC03_Function02() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesC03_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST02", UseScope.Type.CONST); + } + + public void testSingleUsesC03_Const02() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST03", UseScope.Type.CONST); + } + + public void testSingleUsesTF01_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type02", UseScope.Type.TYPE); + } + + public void testSingleUsesTF01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type02", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTF01_Type01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type02", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTF01_Type02a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE); + } + + public void testSingleUsesTF01_Type02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTF01_Type02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTF01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTF01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF01_Function02a() throws Exception { + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTF01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF01_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF01_Function03() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTF01_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST); + } + + public void testSingleUsesTF01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testSingleUsesTF01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testSingleUsesTF01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testSingleUsesTF02_Type01() throws Exception { + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE); + } + + public void testSingleUsesTF02_Type02() throws Exception { + insertTest("^// test", "Single\\Uses\\Type01", UseScope.Type.TYPE); + } + + public void testSingleUsesTF02_Type03a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type02", UseScope.Type.TYPE); + } + + public void testSingleUsesTF02_Type03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type02", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTF02_Type03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\Type02", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTF02_Type03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type02", UseScope.Type.TYPE, option); + } + + + public void testSingleUsesTF02_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTF02_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF02_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF02_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF02_Function02a() throws Exception { + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTF02_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF02_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF02_Function02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTF02_Function03() throws Exception { + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTF02_Function04() throws Exception { + insertTest("^// test", "Single\\Uses\\function06", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTF02_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST); + } + + public void testSingleUsesTF02_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testSingleUsesTF02_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testSingleUsesTF02_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC01_Type01() throws Exception { + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE); + } + + public void testSingleUsesTC01_Type02() throws Exception { + insertTest("^// test", "Single\\Uses\\type01", UseScope.Type.TYPE); + } + + public void testSingleUsesTC01_Type03a() throws Exception { + insertTest("^// test", "Single\\Uses\\type02", UseScope.Type.TYPE); + } + + public void testSingleUsesTC01_Type03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\type02", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTC01_Type03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\type02", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTC01_Type03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\type02", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTC01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTC01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTC01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTC01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTC01_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST); + } + + public void testSingleUsesTC01_Const02a() throws Exception { + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST); + } + + public void testSingleUsesTC01_Const02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC01_Const02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC01_Const02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC01_Const03() throws Exception { + insertTest("^// test", "Single\\Uses\\const03", UseScope.Type.CONST); + } + + public void testSingleUsesTC02_Type01() throws Exception { + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE); + } + + public void testSingleUsesTC02_Type02() throws Exception { + insertTest("^// test", "Single\\Uses\\type05", UseScope.Type.TYPE); + } + + public void testSingleUsesTC02_Type03a() throws Exception { + insertTest("^// test", "Single\\Uses\\type06", UseScope.Type.TYPE); + } + + public void testSingleUsesTC02_Type03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\type06", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTC02_Type03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\type06", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTC02_Type03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\type06", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTC02_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTC02_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTC02_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTC02_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTC02_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\const01", UseScope.Type.CONST); + } + + public void testSingleUsesTC02_Const02a() throws Exception { + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST); + } + + public void testSingleUsesTC02_Const02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC02_Const02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC02_Const02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC02_Const03() throws Exception { + insertTest("^// test", "Single\\Uses\\const03", UseScope.Type.CONST); + } + + public void testSingleUsesTC02_Const04a() throws Exception { + insertTest("^// test", "Single\\Uses\\const06", UseScope.Type.CONST); + } + + public void testSingleUsesTC02_Const04b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const06", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC02_Const04c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\const06", UseScope.Type.CONST, option); + } + + public void testSingleUsesTC02_Const04d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const06", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC01_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE); + } + + public void testSingleUsesFC01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesFC01_Function01() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesFC01_Function02a() throws Exception { + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesFC01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFC01_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFC01_Function02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFC01_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT01", UseScope.Type.CONST); + } + + public void testSingleUsesFC01_Const02a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST); + } + + public void testSingleUsesFC01_Const02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC01_Const02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC01_Const02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC01_Const03a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT02", UseScope.Type.CONST); + } + + public void testSingleUsesFC01_Const03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT02", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC01_Const03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\CONSTANT02", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC01_Const03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT02", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC02_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE); + } + + public void testSingleUsesFC02_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesFC02_Function01() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesFC02_Function02() throws Exception { + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesFC02_Function03a() throws Exception { + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION); + } + + public void testSingleUsesFC02_Function03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFC02_Function03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFC02_Function03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFC02_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT03", UseScope.Type.CONST); + } + + public void testSingleUsesFC02_Const02a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST); + } + + public void testSingleUsesFC02_Const02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC02_Const02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC02_Const02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC02_Const03a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT05", UseScope.Type.CONST); + } + + public void testSingleUsesFC02_Const03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT05", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC02_Const03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\CONSTANT05", UseScope.Type.CONST, option); + } + + public void testSingleUsesFC02_Const03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT05", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF01_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE); + } + + public void testSingleUsesCF01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesCF01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesCF01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF01_Function02a() throws Exception { + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesCF01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF01_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF01_Function02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF01_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT01", UseScope.Type.CONST); + } + + public void testSingleUsesCF01_Const02a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST); + } + + public void testSingleUsesCF01_Const02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF01_Const02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF01_Const02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF01_Const03a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT02", UseScope.Type.CONST); + } + + public void testSingleUsesCF01_Const03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT02", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF01_Const03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\CONSTANT02", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF01_Const03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT02", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF02_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE); + } + + public void testSingleUsesCF02_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesCF02_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesCF02_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF02_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF02_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF02_Function02() throws Exception { + insertTest("^// test", "Single\\Uses\\function02", UseScope.Type.FUNCTION); + } + + public void testSingleUsesCF02_Function03a() throws Exception { + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION); + } + + public void testSingleUsesCF02_Function03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF02_Function03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF02_Function03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCF02_Const01() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT03", UseScope.Type.CONST); + } + + public void testSingleUsesCF02_Const02a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST); + } + + public void testSingleUsesCF02_Const02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF02_Const02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF02_Const02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT00", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF02_Const03a() throws Exception { + insertTest("^// test", "Single\\Uses\\CONSTANT05", UseScope.Type.CONST); + } + + public void testSingleUsesCF02_Const03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT05", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF02_Const03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\CONSTANT05", UseScope.Type.CONST, option); + } + + public void testSingleUsesCF02_Const03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\CONSTANT05", UseScope.Type.CONST, option); + } + + public void testSingleUsesTFC01_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE); + } + + public void testSingleUsesTFC01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTFC01_Type02() throws Exception { + insertTest("^// test", "Single\\Uses\\Type02", UseScope.Type.TYPE); + } + + public void testSingleUsesTFC01_Type03a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type06", UseScope.Type.TYPE); + } + + public void testSingleUsesTFC01_Type03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type06", UseScope.Type.TYPE, option); + } + + public void testSingleUsesTFC01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTFC01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function02a() throws Exception { + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTFC01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function03a() throws Exception { + insertTest("^// test", "Single\\Uses\\function03", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTFC01_Function03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function03", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function03", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function03", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function04a() throws Exception { + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTFC01_Function04b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function04c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function04d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function05a() throws Exception { + insertTest("^// test", "function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesTFC01_Function05b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function05c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Function05d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesTFC01_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST); + } + + public void testSingleUsesTFC01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTFC01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTFC01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesTFC01_Const02() throws Exception { + insertTest("^// test", "Single\\Uses\\Const00", UseScope.Type.CONST); + } + + public void testSingleUsesTFC01_Const03() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST00", UseScope.Type.CONST); + } + + public void testSingleUsesTFC01_Const04a() throws Exception { + insertTest("^// test", "Single\\Uses\\const02", UseScope.Type.CONST); + } + + public void testSingleUsesTFC01_Const04b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const02", UseScope.Type.CONST, option); + } + + public void testSingleUsesTFC01_Const04c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\const02", UseScope.Type.CONST, option); + } + + public void testSingleUsesTFC01_Const04d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const02", UseScope.Type.CONST, option); + } + + public void testSingleUsesFCT01_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE); + } + + public void testSingleUsesFCT01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesFCT01_Type01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesFCT01_Type01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesFCT01_Type02a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type06", UseScope.Type.TYPE); + } + + public void testSingleUsesFCT01_Type02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type06", UseScope.Type.TYPE, option); + } + + public void testSingleUsesFCT01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesFCT01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFCT01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFCT01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFCT01_Function02a() throws Exception { + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION); + } + + public void testSingleUsesFCT01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFCT01_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFCT01_Function02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFCT01_Function03() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function04", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesFCT01_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST); + } + + public void testSingleUsesFCT01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesFCT01_Const02a() throws Exception { + insertTest("^// test", "const00", UseScope.Type.CONST); + } + + public void testSingleUsesFCT01_Const02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesFCT01_Const03a() throws Exception { + insertTest("^// test", "Single\\Uses\\const05", UseScope.Type.CONST); + } + + public void testSingleUsesFCT01_Const03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const05", UseScope.Type.CONST, option); + } + + public void testSingleUsesCFT01_Type01a() throws Exception { + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE); + } + + public void testSingleUsesCFT01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesCFT01_Type02a() throws Exception { + insertTest("^// test", "type00", UseScope.Type.TYPE); + } + + public void testSingleUsesCFT01_Type02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "type00", UseScope.Type.TYPE, option); + } + + public void testSingleUsesCFT01_Function01a() throws Exception { + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION); + } + + public void testSingleUsesCFT01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCFT01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCFT01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\function00", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCFT01_Function02a() throws Exception { + insertTest("^// test", "Test\\function05", UseScope.Type.FUNCTION); + } + + public void testSingleUsesCFT01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Test\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCFT01_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Test\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCFT01_Function02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Test\\function05", UseScope.Type.FUNCTION, option); + } + + public void testSingleUsesCFT01_Const01a() throws Exception { + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST); + } + + public void testSingleUsesCFT01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const00", UseScope.Type.CONST, option); + } + + public void testSingleUsesCFT01_Const02a() throws Exception { + insertTest("^// test", "Single\\Uses\\const03", UseScope.Type.CONST); + } + + public void testSingleUsesCFT01_Const02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Single\\Uses\\const03", UseScope.Type.CONST, option); + } + + public void testSingleUsesCFT01_Const03() throws Exception { + insertTest("^// test", "Single\\Uses\\CONST04", UseScope.Type.CONST); + } + + public void testSingleUsesCFT01_Const04a() throws Exception { + insertTest("^// test", "test\\Uses\\CONST04", UseScope.Type.CONST); + } + + public void testSingleUsesCFT01_Const04b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "test\\Uses\\CONST04", UseScope.Type.CONST, option); + } + + public void testSingleUsesCFT01_Const05a() throws Exception { + insertTest("^// test", "CONST00", UseScope.Type.CONST); + } + + public void testSingleUsesCFT01_Const05b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "CONST00", UseScope.Type.CONST, option); + } + + // multiple + public void testMultipleUsesT01_Type01() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testMultipleUsesT01_Type02() throws Exception { + insertTest("^// test", "Multiple\\Uses00\\Type01", UseScope.Type.TYPE); + } + + public void testMultipleUsesT01_Type03() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\Type01", UseScope.Type.TYPE); + } + + public void testMultipleUsesT01_Function01a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\function00", UseScope.Type.FUNCTION); + } + + public void testMultipleUsesT01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMultipleUsesT01_Const01a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\const00", UseScope.Type.CONST); + } + + public void testMultipleUsesT01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\const00", UseScope.Type.CONST, option); + } + + public void testMultipleUsesT02_Type01() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testMultipleUsesT02_Type02() throws Exception { + insertTest("^// test", "Multiple\\Uses00\\Type01", UseScope.Type.TYPE); + } + + public void testMultipleUsesT02_Type03() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\Type01", UseScope.Type.TYPE); + } + + public void testMultipleUsesT02_Type04() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\Type04", UseScope.Type.TYPE); + } + + public void testMultipleUsesT02_Type05() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\Type06", UseScope.Type.TYPE); + } + + public void testMultipleUsesF01_Type01a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testMultipleUsesF01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\Type00", UseScope.Type.TYPE, option); + } + + public void testMultipleUsesF01_Function01() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\function00", UseScope.Type.FUNCTION); + } + + public void testMultipleUsesF01_Function02a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\function01", UseScope.Type.FUNCTION); + } + + public void testMultipleUsesF01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testMultipleUsesF01_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Multiple\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testMultipleUsesF01_Function02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testMultipleUsesF01_Function03a() throws Exception { + insertTest("^// test", "Multiple\\Uses00\\function01", UseScope.Type.FUNCTION); + } + + public void testMultipleUsesF01_Function03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses00\\function01", UseScope.Type.FUNCTION, option); + } + + public void testMultipleUsesF01_Const01a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\const00", UseScope.Type.CONST); + } + + public void testMultipleUsesF01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\const00", UseScope.Type.CONST, option); + } + + public void testMultipleUsesF01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Multiple\\Uses01\\const00", UseScope.Type.CONST, option); + } + + public void testMultipleUsesF01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\const00", UseScope.Type.CONST, option); + } + + public void testMultipleUsesC01_Type01a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testMultipleUsesC01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\Type00", UseScope.Type.TYPE, option); + } + + public void testMultipleUsesC01_Function01a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\function01", UseScope.Type.FUNCTION); + } + + public void testMultipleUsesC01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testMultipleUsesC01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Multiple\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testMultipleUsesC01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testMultipleUsesC01_Const01() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\const03", UseScope.Type.CONST); + } + + public void testMultipleUsesC01_Const02a() throws Exception { + insertTest("^// test", "Multiple\\Uses00\\const01", UseScope.Type.CONST); + } + + public void testMultipleUsesC01_Const02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMultipleUsesC01_Const03a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\const01", UseScope.Type.CONST); + } + + public void testMultipleUsesC01_Const03b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\const01", UseScope.Type.CONST, option); + } + + public void testMultipleUsesC01_Const03c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Multiple\\Uses01\\const01", UseScope.Type.CONST, option); + } + + public void testMultipleUsesC01_Const03d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\const01", UseScope.Type.CONST, option); + } + + public void testMultipleUsesC01_Const04a() throws Exception { + insertTest("^// test", "Multiple\\Uses01\\const04", UseScope.Type.CONST); + } + + public void testMultipleUsesC01_Const04b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\const04", UseScope.Type.CONST, option); + } + + public void testMultipleUsesC01_Const04c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Multiple\\Uses01\\const04", UseScope.Type.CONST, option); + } + + public void testMultipleUsesC01_Const04d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Multiple\\Uses01\\const04", UseScope.Type.CONST, option); + } + + // Group uses + public void testGroupUsesT01_Type01() throws Exception { + insertTest("^// test", "Group\\Uses\\Type01", UseScope.Type.TYPE); + } + + public void testGroupUsesT01_Type02a() throws Exception { + insertTest("^// test", "Group\\Uses\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT01_Type02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testGroupUsesT01_Type03a() throws Exception { + insertTest("^// test", "Group\\Uses\\Type02", UseScope.Type.TYPE); + } + + public void testGroupUsesT01_Type03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\Type02", UseScope.Type.TYPE, option); + } + + public void testGroupUsesT01_Type04() throws Exception { + insertTest("^// test", "Group\\Uses\\test01", UseScope.Type.TYPE); + } + + public void testGroupUsesT01_Type05() throws Exception { + insertTest("^// test", "Group\\Type01", UseScope.Type.TYPE); + } + + public void testGroupUsesT01_Type06a() throws Exception { + insertTest("^// test", "Type01", UseScope.Type.TYPE); + } + + public void testGroupUsesT01_Type06b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Type01", UseScope.Type.TYPE, option); + } + + public void testGroupUsesT01_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testGroupUsesT01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesT01_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST); + } + + public void testGroupUsesT01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testGroupUsesT02_Type01() throws Exception { + insertTest("^// test", "Example\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT02_Type02() throws Exception { + insertTest("^// test", "Group\\Uses\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT02_Type03() throws Exception { + insertTest("^// test", "Group\\Uses\\Type02", UseScope.Type.TYPE); + } + + public void testGroupUsesT02_Type04() throws Exception { + insertTest("^// test", "Group\\Uses\\Test\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT02_Type05() throws Exception { + insertTest("^// test", "Group\\Uses\\Type05", UseScope.Type.TYPE); + } + + public void testGroupUsesT02_Type06a() throws Exception { + insertTest("^// test", "Uses\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT02_Type06b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Uses\\Type00", UseScope.Type.TYPE, option); + } + + public void testGroupUsesT02_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testGroupUsesT02_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesT02_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST); + } + + public void testGroupUsesT02_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testGroupUsesT03_Type01() throws Exception { + insertTest("^// test", "Group\\Uses00\\Type01", UseScope.Type.TYPE); + } + + public void testGroupUsesT03_Type02() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT03_Type03() throws Exception { + insertTest("^// test", "Group\\Uses02\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT03_Type04() throws Exception { + insertTest("^// test", "Group\\Uses03\\Type05", UseScope.Type.TYPE); + } + + public void testGroupUsesT03_Type05() throws Exception { + insertTest("^// test", "Group\\Uses04\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT03_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testGroupUsesT03_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesT03_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST); + } + + public void testGroupUsesT03_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testGroupUsesT04_Type01() throws Exception { + insertTest("^// test", "Group\\Uses00\\Type01", UseScope.Type.TYPE); + } + + public void testGroupUsesT04_Type02() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type01", UseScope.Type.TYPE); + } + + public void testGroupUsesT04_Type03a() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type02", UseScope.Type.TYPE); + } + + public void testGroupUsesT04_Type03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true) + .wrapGroupUse(false); + insertTest("^// test", "Group\\Uses01\\Type02", UseScope.Type.TYPE, option); + } + + public void testGroupUsesT04_Type04() throws Exception { + insertTest("^// test", "Group\\Uses02\\Type02", UseScope.Type.TYPE); + } + + public void testGroupUsesT04_Type05() throws Exception { + insertTest("^// test", "Group\\Uses03\\Type05", UseScope.Type.TYPE); + } + + public void testGroupUsesT04_Type06() throws Exception { + insertTest("^// test", "Group\\Uses04\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesT04_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testGroupUsesT04_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesT04_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST); + } + + public void testGroupUsesT04_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01a_Type01() throws Exception { + insertTest("^// test", "Group\\Uses00\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTC01a_Type02a() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTC01a_Type02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\Type00", UseScope.Type.TYPE, option); + } + + public void testGroupUsesTC01a_Type03a() throws Exception { + insertTest("^// test", "Group\\Uses02\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTC01a_Type03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\Type00", UseScope.Type.TYPE, option); + } + + public void testGroupUsesTC01a_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTC01a_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTC01a_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTC01a_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTC01a_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTC01a_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01a_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01a_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01a_Const02a() throws Exception { + insertTest("^// test", "Group\\Uses01\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTC01a_Const02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01a_Const02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses01\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01a_Const02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01a_Const03() throws Exception { + insertTest("^// test", "Group\\Uses01\\const02\\const02", UseScope.Type.CONST); + } + + public void testGroupUsesTC01a_Const04() throws Exception { + insertTest("^// test", "Group\\Uses01\\const07", UseScope.Type.CONST); + } + + public void testGroupUsesTC01a_Const05a() throws Exception { + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTC01a_Const05b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01b_Type01() throws Exception { + insertTest("^// test", "Group\\Uses00\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTC01b_Type02a() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTC01b_Type02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\Type00", UseScope.Type.TYPE, option); + } + + public void testGroupUsesTC01b_Type03a() throws Exception { + insertTest("^// test", "Group\\Uses02\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTC01b_Type03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\Type00", UseScope.Type.TYPE, option); + } + + public void testGroupUsesTC01b_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTC01b_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTC01b_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTC01b_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTC01b_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTC01b_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01b_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01b_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01b_Const02a() throws Exception { + insertTest("^// test", "Group\\Uses01\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTC01b_Const02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTC01b_Const03() throws Exception { + insertTest("^// test", "Group\\Uses01\\const02\\const02", UseScope.Type.CONST); + } + + public void testGroupUsesTC01b_Const04() throws Exception { + insertTest("^// test", "Group\\Uses01\\const07", UseScope.Type.CONST); + } + + public void testGroupUsesTC01b_Const05a() throws Exception { + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTC01b_Const05b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTF01_Type01() throws Exception { + insertTest("^// test", "Group\\Uses00\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTF01_Type02() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTF01_Type03() throws Exception { + insertTest("^// test", "Group\\Uses02\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTF01_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTF01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTF01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTF01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTF01_Function02a() throws Exception { + insertTest("^// test", "Group\\Uses01\\function03", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTF01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\function03", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTF01_Function03a() throws Exception { + insertTest("^// test", "Group\\Uses02\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTF01_Function03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTF01_Function04() throws Exception { + insertTest("^// test", "Group\\Uses03\\function11", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTF01_Function05() throws Exception { + insertTest("^// test", "Group\\Uses03\\Sub\\function11", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTF01_Function06() throws Exception { + insertTest("^// test", "Group\\Uses03\\Sub\\Sub\\function11", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTFC01_Type01() throws Exception { + insertTest("^// test", "Group\\Uses00\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTFC01_Type02() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTFC01_Type03() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub01\\Sub02\\Sub03\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTFC01_Type04() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub01\\Sub02\\Sub03\\Sub04\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTFC01_Type05() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub01\\Sub02\\Sub03\\Type02", UseScope.Type.TYPE); + } + + public void testGroupUsesTFC01_Type06() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub04\\Sub05\\Type04", UseScope.Type.TYPE); + } + + public void testGroupUsesTFC01_Type07a() throws Exception { + insertTest("^// test", "Group\\Uses02\\Type00", UseScope.Type.TYPE); + } + + public void testGroupUsesTFC01_Type07b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\Type00", UseScope.Type.TYPE, option); + } + + public void testGroupUsesTFC01_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTFC01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTFC01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTFC01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTFC01_Function02a() throws Exception { + insertTest("^// test", "Group\\Uses01\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTFC01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTFC01_Function03() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub01\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTFC01_Function04() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub01\\function02", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTFC01_Function05() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub02\\function04", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTFC01_Function06() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub03\\Sub04\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTFC01_Function07a() throws Exception { + insertTest("^// test", "Group\\Uses02\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesTFC01_Function07b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTFC01_Function07c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses02\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTFC01_Function07d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesTFC01_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTFC01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTFC01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTFC01_Const02() throws Exception { + insertTest("^// test", "Group\\Uses01\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const03() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub01\\Sub02\\const02", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const04() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub01\\Sub02\\Sub03\\const02", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const05() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub03\\Sub04\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const06() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub04\\const03", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const07() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub04\\const04", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const08() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub05\\Sub06\\const06", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const09() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub05\\Sub06\\Sub07\\const06", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const10a() throws Exception { + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesTFC01_Const10b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTFC01_Const10c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesTFC01_Const10d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesF01_Type01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\Type01", UseScope.Type.TYPE); + } + + public void testGroupUsesF01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\Type01", UseScope.Type.TYPE, option); + } + + public void testGroupUsesF01_Function01() throws Exception { + insertTest("^// test", "Group\\Uses01\\function01", UseScope.Type.FUNCTION); + } + + public void testGroupUsesF01_Function02a() throws Exception { + insertTest("^// test", "Group\\Uses01\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesF01_Function02b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesF01_Function02c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses01\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesF01_Function02d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesF01_Function03a() throws Exception { + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testGroupUsesF01_Function03b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesF01_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\const01", UseScope.Type.CONST); + } + + public void testGroupUsesF01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testGroupUsesF01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testGroupUsesF01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testGroupUsesC01_Type01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\Type01", UseScope.Type.TYPE); + } + + public void testGroupUsesC01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\Type01", UseScope.Type.TYPE, option); + } + + public void testGroupUsesC01_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses01\\function01", UseScope.Type.FUNCTION); + } + + public void testGroupUsesC01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesC01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Group\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesC01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses01\\function01", UseScope.Type.FUNCTION, option); + } + + public void testGroupUsesC01_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesC01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testGroupUsesC01_Const02() throws Exception { + insertTest("^// test", "Group\\Uses01\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesC01_Const03() throws Exception { + insertTest("^// test", "Group\\Uses01\\Sub\\SubConst02", UseScope.Type.CONST); + } + + public void testGroupUsesC01_Const04a() throws Exception { + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST); + } + + public void testGroupUsesC01_Const04b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses02\\const00", UseScope.Type.CONST, option); + } + + // mixed + public void testMixedUsesT01_Type01() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesT01_Type02() throws Exception { + insertTest("^// test", "Group\\Uses01\\Type02", UseScope.Type.TYPE); + } + + public void testMixedUsesT01_Type03a() throws Exception { + insertTest("^// test", "Group\\Uses03\\Type02", UseScope.Type.TYPE); + } + + public void testMixedUsesT01_Type03b() throws Exception { + insertTest("^// test", "Group\\Uses03\\Type04", UseScope.Type.TYPE); + } + + public void testMixedUsesT01_Type04() throws Exception { + insertTest("^// test", "Group\\Uses04\\Type04", UseScope.Type.TYPE); + } + + public void testMixedUsesT01_Type05() throws Exception { + insertTest("^// test", "Group\\Uses05\\Type06", UseScope.Type.TYPE); + } + + public void testMixedUsesT01_Function01a() throws Exception { + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION); + } + + public void testMixedUsesT01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\function01", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesT01_Const01a() throws Exception { + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesT01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Group\\Uses\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTF01_Type01() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTF01_Type02() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTF01_Type03() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTF01_Type04() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Sub02\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTF01_Type05() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Sub02\\Sub03\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTF01_Type06() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTF01_Type07a() throws Exception { + insertTest("^// test", "Mixed\\Uses06\\Sub01\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTF01_Type07b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses06\\Sub01\\Type00", UseScope.Type.TYPE, option); + } + + public void testMixedUsesTF01_Function01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesTF01_Function02() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Function03() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Function04() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Sub01\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Function05() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Sub01\\Sub02\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Function06() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Sub01\\Sub02\\Sub03\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Function07() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Sub01\\Sub07\\Sub08\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Function08() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Sub04\\Sub07\\Sub08\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Function09() throws Exception { + insertTest("^// test", "Mixed\\Uses08\\Sub04\\Sub07\\Sub08\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTF01_Const01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTF01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTF01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTF01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTC01_Type01() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTC01_Type02() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTC01_Type03() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Sub02\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTC01_Type04() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Sub02\\Sub03\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTC01_Type05() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Sub02\\Sub06\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTC01_Type06a() throws Exception { + insertTest("^// test", "Mixed\\Uses04\\Sub01\\Sub02\\Sub03\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTC01_Type06b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses04\\Sub01\\Sub02\\Sub03\\Type00", UseScope.Type.TYPE, option); + } + + public void testMixedUsesTC01_Function01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTC01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesTC01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesTC01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesTC01_Const01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTC01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTC01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTC01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTC01_Const02() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesTC01_Const03() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub02\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesTC01_Const04() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub03\\Sub04\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesTC01_Const05() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub03\\Sub04\\Sub05\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesTC01_Const06() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesTC01_Const07() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\const32", UseScope.Type.CONST); + } + + public void testMixedUsesTC01_Const08() throws Exception { + insertTest("^// test", "Mixed\\Uses04\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesTC01_Const09() throws Exception { + insertTest("^// test", "Mixed\\Uses06\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesTCF01_Type01() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTCF01_Type02() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub02\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTCF01_Type03() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub02\\Sub03\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTCF01_Type04() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub02\\Sub04\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTCF01_Type05() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub02\\Sub04\\Sub05\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTCF01_Type06() throws Exception { + insertTest("^// test", "Mixed\\Uses02\\Sub01\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTCF01_Type07a() throws Exception { + insertTest("^// test", "Mixed\\Uses04\\Sub01\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesTCF01_Type07b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses04\\Sub01\\Type00", UseScope.Type.TYPE, option); + } + + public void testMixedUsesTCF01_Function01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTCF01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesTCF01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesTCF01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesTCF01_Function02() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub02\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTCF01_Function03() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub02\\Sub03\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTCF01_Function04() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\Sub02\\Sub03\\Sub04\\Sub05\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTCF01_Function05() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub05\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTCF01_Function06() throws Exception { + insertTest("^// test", "Mixed\\Uses04\\Sub01\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesTCF01_Const01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTCF01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTCF01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTCF01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTCF01_Const02() throws Exception { + insertTest("^// test", "Mixed\\Uses02\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTCF01_Const03() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTCF01_Const04() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTCF01_Const05() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Sub02\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTCF01_Const06() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Sub05\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTCF01_Const07a() throws Exception { + insertTest("^// test", "Mixed\\Uses04\\const01", UseScope.Type.CONST); + } + + public void testMixedUsesTCF01_Const07b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses04\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTCF01_Const07c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Mixed\\Uses04\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesTCF01_Const07d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses04\\const01", UseScope.Type.CONST, option); + } + + public void testMixedUsesF01_Type01a() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesF01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses01\\Type00", UseScope.Type.TYPE, option); + } + + public void testMixedUsesF01_Function01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesF01_Function02() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Function03() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub01\\Sub02\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Function04() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub03\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Function05() throws Exception { + insertTest("^// test", "Mixed\\Uses03\\Sub04\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Function06() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Function07() throws Exception { + insertTest("^// test", "Mixed\\Uses06\\Sub01\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Function08() throws Exception { + insertTest("^// test", "Mixed\\Uses06\\Sub01\\Sub02\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Function09() throws Exception { + insertTest("^// test", "Mixed\\Uses07\\Sub01\\Sub02\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesF01_Const01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesF01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testMixedUsesF01_Const01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Mixed\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testMixedUsesF01_Const01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testMixedUsesC01_Type01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\Type00", UseScope.Type.TYPE); + } + + public void testMixedUsesC01_Type01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\Type00", UseScope.Type.TYPE, option); + } + + public void testMixedUsesC01_Function01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION); + } + + public void testMixedUsesC01_Function01b() throws Exception { + Option option = new Option() + .isPSR12(false) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesC01_Function01c() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(false); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesC01_Function01d() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\function00", UseScope.Type.FUNCTION, option); + } + + public void testMixedUsesC01_Const01a() throws Exception { + insertTest("^// test", "Mixed\\Uses00\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const01b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses00\\const00", UseScope.Type.CONST, option); + } + + public void testMixedUsesC01_Const02() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const03() throws Exception { + insertTest("^// test", "Mixed\\Uses01\\Sub01\\const02", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const04() throws Exception { + insertTest("^// test", "Mixed\\Uses02\\Sub01\\const02", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const05() throws Exception { + insertTest("^// test", "Mixed\\Uses04\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const06() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\const00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const07() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Sub01\\Sub02\\CONST00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const08() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Sub02\\Sub03\\CONST00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const09() throws Exception { + insertTest("^// test", "Mixed\\Uses05\\Sub04\\Sub05\\Sub06\\CONST00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const10() throws Exception { + insertTest("^// test", "Mixed\\Uses06\\CONST00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const11a() throws Exception { + insertTest("^// test", "Mixed\\Uses06\\Sub01\\CONST00", UseScope.Type.CONST); + } + + public void testMixedUsesC01_Const11b() throws Exception { + Option option = new Option() + .isPSR12(true) + .hasBlankLineBetweenUseTypes(true); + insertTest("^// test", "Mixed\\Uses06\\Sub01\\CONST00", UseScope.Type.CONST, option); + } + + private void insertTest(final String caretLine, String fqName, UseScope.Type useType) throws Exception { + insertTest(caretLine, fqName, useType, new Option()); + } + + private void insertTest(final String caretLine, String fqName, UseScope.Type useType, Option option) throws Exception { + String exactFileName = getTestPath(); + String result = getTestResult(exactFileName, caretLine, fqName, useType, option); + assertDescriptionMatches(exactFileName, result, true, ".autoimport"); + } + + private String getTestResult(final String fileName, final String caretLine, String fqName, UseScope.Type useType, Option option) throws Exception { + FileObject testFile = getTestFile(fileName); + String text = readFile(testFile); + final BaseDocument doc = getDocument(text); + assertNotNull(doc); + option.setCodeStyle(doc); + Source testSource = Source.create(doc); + final int caretOffset; + if (caretLine != null) { + caretOffset = getCaretOffset(testSource.createSnapshot().getText().toString(), caretLine); + enforceCaretOffset(testSource, caretOffset); + } else { + caretOffset = -1; + } + final PHPParseResult[] result = new PHPParseResult[1]; + ParserManager.parse(Collections.singleton(testSource), new UserTask() { + + @Override + public void run(final ResultIterator resultIterator) throws Exception { + Parser.Result res = caretOffset == -1 ? resultIterator.getParserResult() : resultIterator.getParserResult(caretOffset); + if (res != null) { + assertTrue(res instanceof ParserResult); + PHPParseResult phpResult = (PHPParseResult) res; + result[0] = phpResult; + } + } + }); + PHPParseResult phpParseResult = result[0]; + AutoImport autoImport = AutoImport.get(phpParseResult); + autoImport.insert(fqName, useType, caretOffset); + return doc.getText(0, doc.getLength()); + } + + private String getTestFolderPath() { + return "testfiles/autoimport/" + getTestDirName(); + } + + private String getTestPath() { + return getTestFolderPath() + "/" + getTestDirName() + ".php"; + } + + private String getTestDirName() { + String name = getName(); + int indexOf = name.indexOf("_"); + if (indexOf != -1) { + name = name.substring(0, indexOf); + } + return name; + } + + private static final class Option { + + private boolean isPSR12 = false; + private boolean hasBlankLineBetweenUseTypes = false; + private boolean wrapGroupUse = true; + + public static Option create() { + return new Option(); + } + + public Option isPSR12(boolean isPSR12) { + this.isPSR12 = isPSR12; + return this; + } + + public Option hasBlankLineBetweenUseTypes(boolean hasBlankLineBetweenUseTypes) { + this.hasBlankLineBetweenUseTypes = hasBlankLineBetweenUseTypes; + return this; + } + + public Option wrapGroupUse(boolean wrapGroupUse) { + this.wrapGroupUse = wrapGroupUse; + return this; + } + + public void setCodeStyle(Document document) { + Map options = new HashMap<>(FmtOptions.getDefaults()); + options.put(FmtOptions.PUT_IN_PSR12_ORDER, isPSR12); + options.put(FmtOptions.BLANK_LINES_BETWEEN_USE_TYPES, (hasBlankLineBetweenUseTypes ? 1 : 0)); + options.put(FmtOptions.WRAP_GROUP_USE_LIST, (wrapGroupUse ? FmtOptions.WRAP_ALWAYS : FmtOptions.WRAP_NEVER)); + Preferences prefs = CodeStylePreferences.get(document).getPreferences(); + for (Map.Entry entry : options.entrySet()) { + String option = entry.getKey(); + Object value = entry.getValue(); + if (value instanceof Integer) { + prefs.putInt(option, ((Integer) value)); + } else if (value instanceof String) { + prefs.put(option, (String) value); + } else if (value instanceof Boolean) { + prefs.put(option, ((Boolean) value).toString()); + } else if (value instanceof CodeStyle.BracePlacement) { + prefs.put(option, ((CodeStyle.BracePlacement) value).name()); + } else if (value instanceof CodeStyle.WrapStyle) { + prefs.put(option, ((CodeStyle.WrapStyle) value).name()); + } + } + } + } +} diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionAutoImportTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionAutoImportTest.java new file mode 100644 index 000000000000..58bab4ef101d --- /dev/null +++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionAutoImportTest.java @@ -0,0 +1,648 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.netbeans.modules.php.editor.completion; + +import java.io.File; +import org.netbeans.modules.php.editor.options.CodeCompletionPanel.CodeCompletionType; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; + +public class PHPCodeCompletionAutoImportTest extends PHPCodeCompletionTestBase { + + public PHPCodeCompletionAutoImportTest(String testName) { + super(testName); + } + + @Override + protected FileObject[] createSourceClassPathsForTest() { + return new FileObject[]{FileUtil.toFileObject(new File(getDataDir(), "/testfiles/completion/lib/autoImport/" + getTestDirName()))}; + } + + private String getTestDirName() { + String name = getName(); + int indexOf = name.indexOf("_"); + if (indexOf != -1) { + name = name.substring(0, indexOf); + } + return name; + } + + private String getTestPath() { + return String.format("testfiles/completion/lib/autoImport/%s/%s.php", getTestDirName(), getTestDirName()); + } + + private void checkAutoImportCustomTemplateResult(String caretLine, AutoImportOptions autoImportOptions) throws Exception { + checkCompletionCustomTemplateResult(getTestPath(), caretLine, null, true, autoImportOptions); + } + + public void testType01_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testType01_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testType01_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testType01_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testType01_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testType01_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testType02_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("new Example^ // test", options); + } + + public void testType02_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("new Example^ // test", options); + } + + public void testType02_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("new Example^ // test", options); + } + + public void testType02_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("new Example^ // test", options); + } + + public void testType02_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("new Example^ // test", options); + } + + public void testType02_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("new Example^ // test", options); + } + + public void testType03_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testType03_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testType03_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testType03_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testType03_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testType03_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testType04_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" private Example^ // test", options); + } + + public void testType04_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" private Example^ // test", options); + } + + public void testType04_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" private Example^ // test", options); + } + + public void testType04_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" private Example^ // test", options); + } + + public void testType04_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" private Example^ // test", options); + } + + public void testType04_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" private Example^ // test", options); + } + + public void testType05_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" public function paramTest(Example^): void {", options); + } + + public void testType05_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" public function paramTest(Example^): void {", options); + } + + public void testType05_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" public function paramTest(Example^): void {", options); + } + + public void testType05_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" public function paramTest(Example^): void {", options); + } + + public void testType05_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" public function paramTest(Example^): void {", options); + } + + public void testType05_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" public function paramTest(Example^): void {", options); + } + + public void testType06_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" public function returnTypeTest(): Example^ {", options); + } + + public void testType06_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" public function returnTypeTest(): Example^ {", options); + } + + public void testType06_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" public function returnTypeTest(): Example^ {", options); + } + + public void testType06_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" public function returnTypeTest(): Example^ {", options); + } + + public void testType06_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" public function returnTypeTest(): Example^ {", options); + } + + public void testType06_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" public function returnTypeTest(): Example^ {", options); + } + + public void testTypeAlias01_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("Alias^ // test", options); + } + + public void testTypeAlias01_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("Alias^ // test", options); + } + + public void testTypeAlias01_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("Alias^ // test", options); + } + + public void testTypeAlias01_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("Alias^ // test", options); + } + + public void testTypeAlias01_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("Alias^ // test", options); + } + + public void testTypeAlias01_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("Alias^ // test", options); + } + + public void testTypeAlias02_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" use AliasTrait^; // test", options); + } + + public void testTypeAlias02_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" use AliasTrait^; // test", options); + } + + public void testTypeAlias02_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" use AliasTrait^; // test", options); + } + + public void testTypeAlias02_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" use AliasTrait^; // test", options); + } + + public void testTypeAlias02_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" use AliasTrait^; // test", options); + } + + public void testTypeAlias02_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" use AliasTrait^; // test", options); + } + + public void testFunction01_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testFunction01_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testFunction01_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testFunction01_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testFunction01_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testFunction01_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testConst01_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testConst01_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testConst01_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testConst01_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testConst01_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testConst01_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("example^ // test", options); + } + + public void testTypeWithSameName01_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testTypeWithSameName01_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testTypeWithSameName01_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testTypeWithSameName01_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testTypeWithSameName01_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testTypeWithSameName01_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult("Example^ // test", options); + } + + public void testTypeWithSameName02_Smart01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testTypeWithSameName02_Smart02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testTypeWithSameName02_Unqualified01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testTypeWithSameName02_Unqualified02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testTypeWithSameName02_FQN01() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testTypeWithSameName02_FQN02() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(false) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" use ExampleTrait^;", options); + } + + public void testGlobalNamespaceItem01_Smart01a() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" Globa^l // test", options); + } + + public void testGlobalNamespaceItem01_Unqualified01a() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" Globa^l // test", options); + } + + public void testGlobalNamespaceItem01_FQN01a() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" Globa^l // test", options); + } + + public void testGlobalNamespaceItem01_Smart01b() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART) + .globalItemImportable(true); + checkAutoImportCustomTemplateResult(" Globa^l // test", options); + } + + public void testGlobalNamespaceItem01_Unqualified01b() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED) + .globalItemImportable(true); + checkAutoImportCustomTemplateResult(" Globa^l // test", options); + } + + public void testGlobalNamespaceItem01_FQN01b() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED) + .globalItemImportable(true); + checkAutoImportCustomTemplateResult(" Globa^l // test", options); + } + + public void testGlobalNamespaceItem02_Smart01a() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART); + checkAutoImportCustomTemplateResult(" use GlobalNSTrai^t;", options); + } + + public void testGlobalNamespaceItem02_Unqualified01a() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED); + checkAutoImportCustomTemplateResult(" use GlobalNSTrai^t;", options); + } + + public void testGlobalNamespaceItem02_FQN01a() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED); + checkAutoImportCustomTemplateResult(" use GlobalNSTrai^t;", options); + } + + public void testGlobalNamespaceItem02_Smart01b() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.SMART) + .globalItemImportable(true); + checkAutoImportCustomTemplateResult(" use GlobalNSTrai^t;", options); + } + + public void testGlobalNamespaceItem02_Unqualified01b() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.UNQUALIFIED) + .globalItemImportable(true); + checkAutoImportCustomTemplateResult(" use GlobalNSTrai^t;", options); + } + + public void testGlobalNamespaceItem02_FQN01b() throws Exception { + AutoImportOptions options = new AutoImportOptions() + .autoImport(true) + .codeCompletionType(CodeCompletionType.FULLY_QUALIFIED) + .globalItemImportable(true); + checkAutoImportCustomTemplateResult(" use GlobalNSTrai^t;", options); + } + +} diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java index 82a234029e27..afa24d451ac2 100644 --- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java +++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java @@ -28,6 +28,7 @@ import javax.swing.text.Document; import static junit.framework.TestCase.assertNotNull; import static junit.framework.TestCase.assertTrue; +import org.netbeans.api.annotations.common.NullAllowed; import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.editor.BaseDocument; import org.netbeans.modules.csl.api.CodeCompletionContext; @@ -43,6 +44,7 @@ import org.netbeans.modules.parsing.spi.Parser; import org.netbeans.modules.php.api.PhpVersion; import org.netbeans.modules.php.editor.PHPTestBase; +import org.netbeans.modules.php.editor.options.CodeCompletionPanel; import org.netbeans.modules.php.project.api.PhpSourcePath; import org.netbeans.spi.java.classpath.support.ClassPathSupport; import org.openide.filesystems.FileObject; @@ -80,6 +82,10 @@ protected FileObject[] createSourceClassPathsForTest() { } protected void checkCompletionCustomTemplateResult(final String file, final String caretLine, CompletionProposalFilter filter, boolean checkAllItems) throws Exception { + checkCompletionCustomTemplateResult(file, caretLine, filter, checkAllItems, null); + } + + protected void checkCompletionCustomTemplateResult(final String file, final String caretLine, CompletionProposalFilter filter, boolean checkAllItems, @NullAllowed AutoImportOptions autoImportOptions) throws Exception { final CodeCompletionHandler.QueryType type = CodeCompletionHandler.QueryType.COMPLETION; final boolean caseSensitive = true; @@ -181,6 +187,14 @@ public boolean isCaseSensitive() { List proposals = completionResult.getItems(); for (CompletionProposal proposal : proposals) { if (completionProposalFilter.accept(proposal)) { + if (proposal instanceof PHPCompletionItem) { + PHPCompletionItem phpCompletionItem = (PHPCompletionItem) proposal; + if (autoImportOptions != null) { + phpCompletionItem.setAutoImport(autoImportOptions.isAutoImport()); + phpCompletionItem.setCodeCompletionType(autoImportOptions.getCodeCompletionType()); + phpCompletionItem.setGlobalItemImportable(autoImportOptions.isGlobalItemImportable()); + } + } completionProposals.add(proposal); if (!checkAllItems) { break; @@ -204,14 +218,14 @@ public boolean isCaseSensitive() { } //~ Inner class - public interface CompletionProposalFilter { + public static interface CompletionProposalFilter { CompletionProposalFilter ACCEPT_ALL = proposal -> true; boolean accept(CompletionProposal proposal); } - public final class DefaultFilter implements CompletionProposalFilter { + public static final class DefaultFilter implements CompletionProposalFilter { private final PhpVersion phpVersion; private final String prefix; @@ -247,4 +261,38 @@ public boolean accept(CompletionProposal proposal) { return false; } } + + static final class AutoImportOptions { + + private CodeCompletionPanel.CodeCompletionType codeCompletionType = CodeCompletionPanel.CodeCompletionType.SMART; + private boolean autoImport = false; + private boolean globalItemImportable = false; + + public CodeCompletionPanel.CodeCompletionType getCodeCompletionType() { + return codeCompletionType; + } + + public boolean isAutoImport() { + return autoImport; + } + + public boolean isGlobalItemImportable() { + return globalItemImportable; + } + + public AutoImportOptions codeCompletionType(CodeCompletionPanel.CodeCompletionType codeCompletionType) { + this.codeCompletionType = codeCompletionType; + return this; + } + + public AutoImportOptions autoImport(boolean autoImport) { + this.autoImport = autoImport; + return this; + } + + public AutoImportOptions globalItemImportable(boolean globalItemImportable) { + this.globalItemImportable = globalItemImportable; + return this; + } + } }