77
88import com .intellij .codeInsight .completion .CompletionContributor ;
99import com .intellij .codeInsight .completion .CompletionParameters ;
10- import com .intellij .codeInsight .completion .CompletionType ;
1110import com .intellij .codeInsight .completion .CompletionProvider ;
1211import com .intellij .codeInsight .completion .CompletionResultSet ;
13- import com .intellij .codeInsight .completion .InsertionContext ;
12+ import com .intellij .codeInsight .completion .CompletionType ;
1413import com .intellij .codeInsight .completion .InsertHandler ;
14+ import com .intellij .codeInsight .completion .InsertionContext ;
1515import com .intellij .codeInsight .lookup .AutoCompletionPolicy ;
1616import com .intellij .codeInsight .lookup .LookupElement ;
1717import com .intellij .codeInsight .lookup .LookupElementBuilder ;
2525import com .microsoft .azure .toolkit .intellij .link .LinkMySQLToModuleDialog ;
2626import com .microsoft .azure .toolkit .intellij .link .base .LinkType ;
2727import com .microsoft .azure .toolkit .intellij .link .po .LinkPO ;
28+ import com .microsoft .azuretools .authmanage .AuthMethodManager ;
2829import com .microsoft .intellij .AzureLinkStorage ;
2930import com .microsoft .intellij .helpers .AzureIconLoader ;
3031import com .microsoft .tooling .msservices .serviceexplorer .AzureIconSymbol ;
3132import org .apache .commons .lang3 .StringUtils ;
3233import org .jetbrains .annotations .NotNull ;
34+ import org .jetbrains .annotations .Nullable ;
3335
3436import java .util .Objects ;
3537
3638public class SpringDatasourceCompletionContributor extends CompletionContributor {
3739
3840 public SpringDatasourceCompletionContributor () {
41+ super ();
3942 extend (CompletionType .BASIC , PlatformPatterns .psiElement (),
40- new CompletionProvider <CompletionParameters >() {
43+ new CompletionProvider <CompletionParameters >() {
4144 @ Override
4245 public void addCompletions (@ NotNull CompletionParameters parameters ,
4346 @ NotNull ProcessingContext context ,
4447 @ NotNull CompletionResultSet resultSet ) {
48+ final Module module = ModuleUtil .findModuleForFile (parameters .getOriginalFile ());
49+ if (!AuthMethodManager .getInstance ().isSignedIn () && getLinkForModule (module ) == null ) {
50+ // Do not show hint if user not signed in and no service link for file module
51+ return ;
52+ }
4553 resultSet .addElement (LookupElementBuilder
46- .create ("spring.datasource.url" )
47- .withIcon (AzureIconLoader .loadIcon (AzureIconSymbol .MySQL .BIND_INTO ))
48- .withInsertHandler (new MyInsertHandler ())
49- .withBoldness (true )
50- .withTypeText ("String" )
51- .withTailText (" (Connect to Azure Datasource for MySQL)" )
52- .withAutoCompletionPolicy (AutoCompletionPolicy .SETTINGS_DEPENDENT )
53- );
54+ .create ("spring.datasource.url" )
55+ .withIcon (AzureIconLoader .loadIcon (AzureIconSymbol .MySQL .BIND_INTO ))
56+ .withInsertHandler (new MyInsertHandler ())
57+ .withBoldness (true )
58+ .withTypeText ("String" )
59+ .withTailText (" (Connect to Azure Datasource for MySQL)" )
60+ .withAutoCompletionPolicy (AutoCompletionPolicy .SETTINGS_DEPENDENT ));
5461 }
55- }
56- );
57-
62+ });
5863 }
5964
60- private class MyInsertHandler implements InsertHandler <LookupElement > {
65+ private static class MyInsertHandler implements InsertHandler <LookupElement > {
6166
6267 @ Override
6368 public void handleInsert (@ NotNull InsertionContext insertionContext , @ NotNull LookupElement lookupElement ) {
64- Module module = ModuleUtil .findModuleForFile (insertionContext .getFile ().getVirtualFile (), insertionContext .getProject ());
65- LinkPO moduleLink = AzureLinkStorage .getProjectStorage (insertionContext .getProject ()).getLinkByModuleId (module .getName ())
66- .stream ()
67- .filter (e -> LinkType .SERVICE_WITH_MODULE == e .getType ())
68- .findFirst ().orElse (null );
69+ final Module module = ModuleUtil .findModuleForFile (insertionContext .getFile ().getVirtualFile (), insertionContext .getProject ());
70+ final LinkPO moduleLink = getLinkForModule (module );
6971 if (Objects .nonNull (moduleLink )) {
70- String envPrefix = moduleLink .getEnvPrefix ();
72+ final String envPrefix = moduleLink .getEnvPrefix ();
7173 this .insertSpringDatasourceProperties (envPrefix , insertionContext );
7274 } else {
7375 ApplicationManager .getApplication ().invokeLater (() -> {
7476 final LinkMySQLToModuleDialog dialog = new LinkMySQLToModuleDialog (insertionContext .getProject (), null , module );
75- String envPrefix = dialog .showAndGetEnvPrefix ();
77+ final String envPrefix = dialog .showAndGetEnvPrefix ();
7678 WriteCommandAction .runWriteCommandAction (insertionContext .getProject (), () -> {
7779 if (StringUtils .isNotBlank (envPrefix )) {
7880 this .insertSpringDatasourceProperties (envPrefix , insertionContext );
@@ -86,12 +88,20 @@ public void handleInsert(@NotNull InsertionContext insertionContext, @NotNull Lo
8688 }
8789
8890 private void insertSpringDatasourceProperties (String envPrefix , @ NotNull InsertionContext insertionContext ) {
89- StringBuilder builder = new StringBuilder ();
91+ final StringBuilder builder = new StringBuilder ();
9092 builder .append ("=${" ).append (envPrefix ).append ("URL}" ).append (StringUtils .LF )
91- .append ("spring.datasource.username=${" ).append (envPrefix ).append ("USERNAME}" ).append (StringUtils .LF )
92- .append ("spring.datasource.password=${" ).append (envPrefix ).append ("PASSWORD}" ).append (StringUtils .LF );
93+ .append ("spring.datasource.username=${" ).append (envPrefix ).append ("USERNAME}" ).append (StringUtils .LF )
94+ .append ("spring.datasource.password=${" ).append (envPrefix ).append ("PASSWORD}" ).append (StringUtils .LF );
9395 EditorModificationUtil .insertStringAtCaret (insertionContext .getEditor (), builder .toString (), true );
9496 }
9597 }
9698
99+ @ Nullable
100+ private static LinkPO getLinkForModule (@ Nullable final Module module ) {
101+ return module == null ? null : AzureLinkStorage .getProjectStorage (module .getProject ()).getLinkByModuleId (module .getName ())
102+ .stream ()
103+ .filter (e -> LinkType .SERVICE_WITH_MODULE == e .getType ())
104+ .findFirst ().orElse (null );
105+ }
106+
97107}
0 commit comments