IDEA-255333 File templates: some variables are not expanded on file creating
authorDmitry Avdeev <dmitry.avdeev@jetbrains.com>
Tue, 22 Dec 2020 17:15:12 +0000 (20:15 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Tue, 22 Dec 2020 17:53:17 +0000 (17:53 +0000)
GitOrigin-RevId: 40c52ddb2f6fafa904b624509ca19aa9f3bf75d8

java/java-tests/testSrc/com/intellij/java/ide/fileTemplates/impl/FileTemplatesTest.groovy
platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java

index 50f311d89f9df9698435e1b62dee3135d741f40e..3a6b37708f7d0d7b8a7c6bb9933e78bca587356f 100644 (file)
@@ -127,19 +127,27 @@ class FileTemplatesTest extends JavaProjectTestCase {
   }
 
   void testDefaultPackage() {
-    String name = "my_class"
-    FileTemplate template = addTestTemplate(name, 'package ${PACKAGE_NAME}; public class ${NAME} {}')
-
-    VirtualFile tempDir = getTempDir().createVirtualDir()
-
-    PsiTestUtil.addSourceRoot(getModule(), tempDir)
-
-    VirtualFile sourceRoot = ModuleRootManager.getInstance(getModule()).getSourceRoots()[0]
-    PsiDirectory psiDirectory = PsiManager.getInstance(getProject()).findDirectory(sourceRoot)
+    doClassTest('package ${PACKAGE_NAME}; public class ${NAME} {}', "public class XXX {\n}")
+  }
 
+  private void doClassTest(String templateText, String result) {
+    String name = "my_class"
+    FileTemplate template = addTestTemplate(name, templateText)
+    PsiDirectory psiDirectory = createDirectory()
     PsiClass psiClass = JavaDirectoryService.getInstance().createClass(psiDirectory, "XXX", name)
     assertNotNull(psiClass)
-    assertEquals("public class XXX {\n}", psiClass.getContainingFile().getText())
+    assertEquals(result, psiClass.getContainingFile().getText())
+    FileTemplateManager.getInstance(getProject()).removeTemplate(template)
+  }
+
+  void testPopulateDefaultProperties() {
+    String name = "my_class"
+    FileTemplate template = addTestTemplate(name, 'package ${PACKAGE_NAME}; \n' +
+                                                  '// ${USER} \n' +
+                                                  'public class ${NAME} {}')
+    PsiDirectory psiDirectory = createDirectory()
+    PsiClass psiClass = JavaDirectoryService.getInstance().createClass(psiDirectory, "XXX", name)
+    assertFalse(psiClass.getContainingFile().getText().contains('${USER}'))
     FileTemplateManager.getInstance(getProject()).removeTemplate(template)
   }
 
@@ -176,6 +184,13 @@ class FileTemplatesTest extends JavaProjectTestCase {
     template
   }
 
+  private PsiDirectory createDirectory() {
+    VirtualFile tempDir = getTempDir().createVirtualDir()
+    PsiTestUtil.addSourceRoot(getModule(), tempDir)
+    VirtualFile sourceRoot = ModuleRootManager.getInstance(getModule()).getSourceRoots()[0]
+    PsiManager.getInstance(getProject()).findDirectory(sourceRoot)
+  }
+
   void doTestSaveLoadTemplate(String name, String ext) {
     FTManager templateManager = new FTManager("test", getTestConfigRoot())
     FileTemplate template = templateManager.addTemplate(name, ext)
index c0f3d214e3fc52f2f33314d75187c959867ea6c5..f219529626dbf2e44b9a6ee0f6331c4ccd9cb2dd 100644 (file)
@@ -394,7 +394,7 @@ public final class FileTemplateUtil {
       String s = (String)e.nextElement();
 
       //noinspection UseOfPropertiesAsHashtable
-      props.putIfAbsent(s, p.get(s)); // DO NOT CALL getProperty() cause it returns STRING | NULL
+      props.putIfAbsent(s, p.containsKey(s) ? p.get(s) : p.getProperty(s)); // pass object for explicit values or string for defaults
     }
   }