[gnome-builder] snippets: Add java snippets



commit 6aa5b1db130501b5a5fe56c49ce3ff2b325f0bdd
Author: Alberto Fanjul <albertofanjul gmail com>
Date:   Thu May 31 01:29:07 2018 +0200

    snippets: Add java snippets

 data/snippets/java.snippets                       | 64 +++++++++++++++++++++++
 data/snippets/licenses.snippets                   |  6 +--
 src/libide/libide.gresource.xml                   |  1 +
 src/libide/snippets/ide-source-snippet-context.c  | 41 +++++++++++++++
 src/libide/snippets/ide-source-snippets-manager.c |  2 +
 src/libide/sourceview/ide-source-view.c           | 26 ++++++++-
 6 files changed, 136 insertions(+), 4 deletions(-)
---
diff --git a/data/snippets/java.snippets b/data/snippets/java.snippets
new file mode 100644
index 000000000..c7329ee58
--- /dev/null
+++ b/data/snippets/java.snippets
@@ -0,0 +1,64 @@
+snippet clas
+- desc Creates a java class definition
+- scope java, groovy
+       package ${$relative_dirname|descend_path|descend_path|descend_path|slash_to_dots};
+       
+       public class ${$filename|stripsuffix}
+         {
+           $0
+         }
+snippet iface
+- desc Creates a java interface definition
+- scope java, groovy
+       package ${$relative_dirname|descend_path|descend_path|descend_path|slash_to_dots};
+       
+       public interface ${$filename|stripsuffix}
+         {
+           $0
+         }
+snippet psvm
+- desc Creates main java method
+- scope java, groovy
+       public static void main(String[] args)
+         {
+           $0
+         }
+snippet itar
+- desc Creates a for loop
+- scope java, groovy
+       for (int ${1:i = 0}; ${2:i < }; ${3:i++})
+         {
+           $0
+         }
+snippet iter
+- desc Creates a for each loop on a collection
+- scope java, groovy
+       for (${2:type} ${3:var}: ${1:collection})
+         {
+           $0
+         }
+snippet itit
+- desc Creates a for loop on an iterator
+- scope java, groovy
+       while (${1:it}.hasNext())
+         {
+           Object next = $1.next();
+           $0
+         }
+snippet comment
+- scope java, groovy
+       /*
+        * $0
+        */
+snippet javadoc
+- scope java, groovy
+       /**
+        * $0
+        */
+snippet sout
+- scope java
+       System.out.println($0);
+snippet serr
+- scope java
+       System.err.println($0);
+
diff --git a/data/snippets/licenses.snippets b/data/snippets/licenses.snippets
index 812a237da..3283dee2a 100644
--- a/data/snippets/licenses.snippets
+++ b/data/snippets/licenses.snippets
@@ -1,5 +1,5 @@
 snippet gpl
-- scope c, chdr, cpp, css, js, vala
+- scope c, chdr, cpp, css, js, vala, java
        /* ${1:$filename}
         *
         * Copyright $year ${2:$fullname} <${3:$email}>
@@ -62,7 +62,7 @@ snippet gpl
        // SPDX-License-Identifier: GPL-3.0-or-later
        $0
 snippet lgpl
-- scope c, chdr, cpp, css, js, vala
+- scope c, chdr, cpp, css, js, vala, java
        /* ${1:$filename}
         *
         * Copyright $year ${2:$fullname} <${3:$email}>
@@ -125,7 +125,7 @@ snippet lgpl
        // SPDX-License-Identifier: LGPL-3.0-or-later
        $0
 snippet mit
-- scope c, chdr, cpp, css, js, vala
+- scope c, chdr, cpp, css, js, vala, java
        /* ${1:$filename}
         *
         * Copyright $year ${2:$fullname} <${3:$email}>
diff --git a/src/libide/libide.gresource.xml b/src/libide/libide.gresource.xml
index cfee83b87..2419d7737 100644
--- a/src/libide/libide.gresource.xml
+++ b/src/libide/libide.gresource.xml
@@ -4,6 +4,7 @@
     <file alias="c.snippets">../../data/snippets/c.snippets</file>
     <file alias="chdr.snippets">../../data/snippets/chdr.snippets</file>
     <file alias="gobject.snippets">../../data/snippets/gobject.snippets</file>
+    <file alias="java.snippets">../../data/snippets/java.snippets</file>
     <file alias="js.snippets">../../data/snippets/js.snippets</file>
     <file alias="licenses.snippets">../../data/snippets/licenses.snippets</file>
     <file alias="main.snippets">../../data/snippets/main.snippets</file>
diff --git a/src/libide/snippets/ide-source-snippet-context.c 
b/src/libide/snippets/ide-source-snippet-context.c
index d77d7a31a..663f177ef 100644
--- a/src/libide/snippets/ide-source-snippet-context.c
+++ b/src/libide/snippets/ide-source-snippet-context.c
@@ -408,6 +408,24 @@ filter_space (const gchar *input)
   return g_string_free (str, FALSE);
 }
 
+static gchar *
+filter_descend_path (const gchar *input)
+{
+   const char* pos = strchr (input, G_DIR_SEPARATOR);
+   if (pos == input)
+     {
+       input++;
+       pos = strchr (input, G_DIR_SEPARATOR);
+     }
+   if (pos)
+     {
+       pos++;
+       return g_strdup (pos);
+     }
+
+   return NULL;
+}
+
 static gchar *
 filter_stripsuffix (const gchar *input)
 {
@@ -422,6 +440,27 @@ filter_stripsuffix (const gchar *input)
   return g_strdup (input);
 }
 
+static gchar *
+filter_slash_to_dots (const gchar *input)
+{
+  gunichar c;
+  GString *str;
+
+  str = g_string_new (NULL);
+
+  for (; *input; input = g_utf8_next_char (input))
+    {
+      c = g_utf8_get_char (input);
+
+      if (c == G_DIR_SEPARATOR)
+        g_string_append_c (str, '.');
+      else
+        g_string_append_c (str, c);
+    }
+
+  return g_string_free (str, FALSE);
+}
+
 static gchar *
 apply_filter (gchar       *input,
               const gchar *filter)
@@ -681,6 +720,8 @@ ide_source_snippet_context_class_init (IdeSourceSnippetContextClass *klass)
   g_hash_table_insert (filters, (gpointer) "space", filter_space);
   g_hash_table_insert (filters, (gpointer) "stripsuffix", filter_stripsuffix);
   g_hash_table_insert (filters, (gpointer) "instance", filter_instance);
+  g_hash_table_insert (filters, (gpointer) "slash_to_dots", filter_slash_to_dots);
+  g_hash_table_insert (filters, (gpointer) "descend_path", filter_descend_path);
 }
 
 static void
diff --git a/src/libide/snippets/ide-source-snippets-manager.c 
b/src/libide/snippets/ide-source-snippets-manager.c
index f8b1abe4e..4df26660e 100644
--- a/src/libide/snippets/ide-source-snippets-manager.c
+++ b/src/libide/snippets/ide-source-snippets-manager.c
@@ -117,6 +117,8 @@
  *  - stripsuffix: removes a filename suffix, such as ".txt" from the input
  *  - class: guess the class name from the input text
  *  - instance: guess the instance name from the input text
+ *  - slash_to_dots: replaces "/" with "."
+ *  - descend_path: removes first leading path
  *
  * You may chain multiple post-processing functions together.
  *
diff --git a/src/libide/sourceview/ide-source-view.c b/src/libide/sourceview/ide-source-view.c
index cb6b5db87..9d31dbed9 100644
--- a/src/libide/sourceview/ide-source-view.c
+++ b/src/libide/sourceview/ide-source-view.c
@@ -3807,7 +3807,9 @@ ide_source_view_real_push_snippet (IdeSourceView           *self,
   IdeContext *ide_context;
   IdeSourceSnippetContext *context;
   IdeFile *file;
-  GFile *gfile;
+  GFile *gfile = NULL;
+  g_autoptr(GFile) gparentfile = NULL;
+
 
   g_assert (IDE_IS_SOURCE_VIEW (self));
   g_assert (IDE_IS_SOURCE_SNIPPET (snippet));
@@ -3821,17 +3823,39 @@ ide_source_view_real_push_snippet (IdeSourceView           *self,
           (gfile = ide_file_get_file (file)))
         {
           g_autofree gchar *name = NULL;
+          g_autofree gchar *path = NULL;
+          g_autofree gchar *dirname = NULL;
 
           name = g_file_get_basename (gfile);
+          gparentfile = g_file_get_parent(gfile);
+          dirname = g_file_get_path (gparentfile);
+          path = g_file_get_path (gfile);
           ide_source_snippet_context_add_variable (context, "filename", name);
+          ide_source_snippet_context_add_variable (context, "dirname", dirname);
+          ide_source_snippet_context_add_variable (context, "path", path);
         }
 
       if ((ide_context = ide_buffer_get_context (priv->buffer)))
         {
           IdeVcs *vcs;
           IdeVcsConfig *vcs_config;
+          GFile *workdir;
 
           vcs = ide_context_get_vcs (ide_context);
+          workdir = ide_vcs_get_working_directory (vcs);
+          if (workdir && gfile)
+            {
+              g_autofree gchar *relative_path = NULL;
+              relative_path = g_file_get_relative_path (workdir, gfile);
+              ide_source_snippet_context_add_variable (context, "relative_path", relative_path);
+            }
+          if (workdir && gparentfile)
+            {
+              g_autofree gchar *relative_dirname = NULL;
+              relative_dirname = g_file_get_relative_path (workdir, gparentfile);
+              ide_source_snippet_context_add_variable (context, "relative_dirname", relative_dirname);
+            }
+
           if ((vcs_config = ide_vcs_get_config (vcs)))
             {
               GValue value = G_VALUE_INIT;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]