WI-8389 Live Templates: Add Live Template variable <filename>
authorNikolay Matveev <Nikolay.Matveev@jetbrains.com>
Thu, 5 Jan 2012 14:21:48 +0000 (18:21 +0400)
committerNikolay Matveev <Nikolay.Matveev@jetbrains.com>
Thu, 5 Jan 2012 15:00:26 +0000 (19:00 +0400)
platform/lang-impl/src/com/intellij/codeInsight/template/macro/FileNameMacro.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/codeInsight/template/macro/FileNameWithoutExtensionMacro.java [new file with mode: 0644]
platform/platform-resources-en/src/messages/CodeInsightBundle.properties
platform/platform-resources/src/META-INF/LangExtensions.xml

diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/macro/FileNameMacro.java b/platform/lang-impl/src/com/intellij/codeInsight/template/macro/FileNameMacro.java
new file mode 100644 (file)
index 0000000..1c517c8
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed 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 com.intellij.codeInsight.template.macro;
+
+import com.intellij.codeInsight.CodeInsightBundle;
+import com.intellij.codeInsight.template.*;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiDocumentManager;
+import com.intellij.psi.PsiFile;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Nikolay Matveev
+ */
+public class FileNameMacro extends Macro {
+
+  @Override
+  public String getName() {
+    return "fileName";
+  }
+
+  @Override
+  public String getPresentableName() {
+    return CodeInsightBundle.message("macro.file.name");
+  }
+
+  @Override
+  public Result calculateResult(@NotNull Expression[] params, ExpressionContext context) {
+    final PsiFile file = PsiDocumentManager.getInstance(context.getProject()).getPsiFile(context.getEditor().getDocument());
+    if (file != null) {
+      final VirtualFile virtualFile = file.getVirtualFile();
+      if (virtualFile != null) {
+        return calculateResult(virtualFile);
+      }
+    }
+    return null;
+  }
+
+  @Nullable
+  protected TextResult calculateResult(@NotNull VirtualFile virtualFile) {
+    return new TextResult(virtualFile.getName());
+  }
+}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/macro/FileNameWithoutExtensionMacro.java b/platform/lang-impl/src/com/intellij/codeInsight/template/macro/FileNameWithoutExtensionMacro.java
new file mode 100644 (file)
index 0000000..80c5904
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed 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 com.intellij.codeInsight.template.macro;
+
+import com.intellij.codeInsight.CodeInsightBundle;
+import com.intellij.codeInsight.template.TextResult;
+import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author Nikolay Matveev
+ */
+public class FileNameWithoutExtensionMacro extends FileNameMacro {
+
+  @Override
+  public String getName() {
+    return "fileNameWithoutExtension";
+  }
+
+  @Override
+  public String getPresentableName() {
+    return CodeInsightBundle.message("macro.file.name.without.extension");
+  }
+
+  @Override
+  protected TextResult calculateResult(@NotNull VirtualFile virtualFile) {
+    return new TextResult(virtualFile.getNameWithoutExtension());
+  }
+}
index fc7fbe6340e383a50618bf6049c53d6fc252e96e..9fb3b066d22eae59ebed43adacd6041b4c8a8e7a 100644 (file)
@@ -332,6 +332,8 @@ macro.suggest.index.name=suggestIndexName()
 macro.suggest.variable.name=suggestVariableName()
 macro.suggest.first.variable.name=suggestFirstVariableName()
 macro.variable.of.type=variableOfType(Type)
+macro.file.name=fileName()
+macro.file.name.without.extension=fileNameWithoutExtension()
 command.name.surround.with.runtime.cast=Surround with runtime cast
 inspection.i18n.expression.is.invalid.error.message=The I18nized Expression template is not a valid expression
 inspection.error.dialog.title=Error
index ffacea4830b6a82195df1a0743d6fbabf0b35410..d9be805af7111ed276981e65e1efce2a467adb9a 100644 (file)
   <liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.FirstWordMacro"/>
   <liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.ReplaceUnderscoresWithSpacesMacro"/>
   <liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.LineNumberMacro"/>
+  <liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.FileNameMacro"/>
+  <liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.FileNameWithoutExtensionMacro"/>
   <liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.ReplaceUnderscoresToCamelCaseMacro"/>
   <liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.CapitalizeAndUnderscoreMacro"/>