From 1ea125c2d761c60a1c422f1dc785014a94570104 Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Tue, 29 May 2007 14:38:40 +0400 Subject: [PATCH] spring patterns: hibernate + datasource --- .../template/macro/DescendantClassesEnumMacro.java | 26 ++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/codeInsight/impl/com/intellij/codeInsight/template/macro/DescendantClassesEnumMacro.java b/codeInsight/impl/com/intellij/codeInsight/template/macro/DescendantClassesEnumMacro.java index 517e494d74..a08d2e69bd 100644 --- a/codeInsight/impl/com/intellij/codeInsight/template/macro/DescendantClassesEnumMacro.java +++ b/codeInsight/impl/com/intellij/codeInsight/template/macro/DescendantClassesEnumMacro.java @@ -6,6 +6,8 @@ import com.intellij.codeInsight.lookup.LookupItemUtil; import com.intellij.codeInsight.template.*; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiManager; +import com.intellij.psi.PsiModifier; +import com.intellij.psi.PsiModifierList; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiElementProcessor; import com.intellij.psi.search.PsiSearchHelper; @@ -15,7 +17,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -public class DescendantClassesEnumMacro implements Macro{ +public class DescendantClassesEnumMacro implements Macro { public String getName() { return "descendantClassesEnum"; } @@ -52,19 +54,20 @@ public class DescendantClassesEnumMacro implements Macro{ final String paramResult = params[0].calculateResult(context).toString(); if (paramResult == null) return null; - final PsiClass myBaseClass = instance.findClass( - paramResult, - GlobalSearchScope.allScope(context.getProject()) - ); - if (myBaseClass!=null) { + final boolean isAllowAbstract = isAllowAbstract(context, params); + final PsiClass myBaseClass = instance.findClass(paramResult, GlobalSearchScope.allScope(context.getProject())); + + if (myBaseClass != null) { PsiSearchHelper helper = instance.getSearchHelper(); final List classes = new ArrayList(); helper.processInheritors(new PsiElementProcessor() { public boolean execute(PsiClass element) { - classes.add(element); + if (isAllowAbstract || !isAbstractOrInterface(element)) { + classes.add(element); + } return true; } @@ -99,4 +102,13 @@ public class DescendantClassesEnumMacro implements Macro{ return set.toArray(new LookupItem[set.size()]); } + private static boolean isAbstractOrInterface(final PsiClass psiClass) { + final PsiModifierList modifierList = psiClass.getModifierList(); + + return psiClass.isInterface() || (modifierList != null && modifierList.hasModifierProperty(PsiModifier.ABSTRACT)); + } + + private static boolean isAllowAbstract(final ExpressionContext context, final Expression[] params) { + return params.length > 2 ? Boolean.valueOf(params[2].calculateResult(context).toString()) : true; + } } \ No newline at end of file -- 2.11.4.GIT