Support enum in filter expression.
diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
index 8509eb8..248e22e 100644
--- a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
@@ -107,6 +107,10 @@
         conditionExpression.setValue(ctx.getText());
     }
 
+    @Override public void enterEnumConditionValue(OALParser.EnumConditionValueContext ctx) {
+        conditionExpression.setValue(ctx.getText());
+    }
+
     /////////////
     // Expression end.
     ////////////
diff --git a/oal-parser/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl
index 1779c27..f999e2a 100644
--- a/oal-parser/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl
+++ b/oal-parser/src/main/resources/code-templates/EndpointDispatcherTemplate.ftl
@@ -19,10 +19,15 @@
 package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (endpointIndicators?size>0) || indicator.filterExpressions?? >
+<#if (endpointIndicators?size>0)>
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+    <#list endpointIndicators as indicator>
+        <#if indicator.filterExpressions??>
+import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*;
+        </#if>
+    </#list>
 </#if>
-import org.apache.skywalking.oap.server.core.source.Endpoint;
+import org.apache.skywalking.oap.server.core.source.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
diff --git a/oal-parser/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl
index 2513062..0d97284 100644
--- a/oal-parser/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl
+++ b/oal-parser/src/main/resources/code-templates/ServiceDispatcherTemplate.ftl
@@ -19,10 +19,15 @@
 package org.apache.skywalking.oap.server.core.analysis.generated.service;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceIndicators?size>0) || indicator.filterExpressions??>
+<#if (serviceIndicators?size>0)>
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+    <#list serviceIndicators as indicator>
+        <#if indicator.filterExpressions??>
+import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*;
+        </#if>
+    </#list>
 </#if>
-import org.apache.skywalking.oap.server.core.source.Service;
+import org.apache.skywalking.oap.server.core.source.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
diff --git a/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl
index cdca95f..067b17e 100644
--- a/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl
+++ b/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMCPUDispatcherTemplate.ftl
@@ -19,10 +19,15 @@
 package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmcpu;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceJVMCPUIndicators?size>0) || indicator.filterExpressions??>
+<#if (serviceInstanceJVMCPUIndicators?size>0)>
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+    <#list serviceInstanceJVMCPUIndicators as indicator>
+        <#if indicator.filterExpressions??>
+import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*;
+        </#if>
+    </#list>
 </#if>
-import org.apache.skywalking.oap.server.core.source.ServiceInstanceJVMCPU;
+import org.apache.skywalking.oap.server.core.source.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
diff --git a/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl
index 75f4013..221a58e 100644
--- a/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl
+++ b/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMGCDispatcherTemplate.ftl
@@ -19,10 +19,15 @@
 package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceJVMGCIndicators?size>0) || indicator.filterExpressions??>
+<#if (serviceInstanceJVMGCIndicators?size>0)>
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+    <#list serviceInstanceJVMGCIndicators as indicator>
+        <#if indicator.filterExpressions??>
+import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*;
+        </#if>
+    </#list>
 </#if>
-import org.apache.skywalking.oap.server.core.source.ServiceInstanceJVMGC;
+import org.apache.skywalking.oap.server.core.source.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
diff --git a/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl
index 401d1c3..a8915c3 100644
--- a/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl
+++ b/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMMemoryDispatcherTemplate.ftl
@@ -19,10 +19,15 @@
 package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceJVMMemoryIndicators?size>0) || indicator.filterExpressions??>
+<#if (serviceInstanceJVMMemoryIndicators?size>0)>
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+    <#list serviceInstanceJVMMemoryIndicators as indicator>
+        <#if indicator.filterExpressions??>
+import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*;
+        </#if>
+    </#list>
 </#if>
-import org.apache.skywalking.oap.server.core.source.ServiceInstanceJVMMemory;
+import org.apache.skywalking.oap.server.core.source.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
diff --git a/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl b/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl
index 953ce51..f0a23ec 100644
--- a/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl
+++ b/oal-parser/src/main/resources/code-templates/ServiceInstanceJVMMemoryPoolDispatcherTemplate.ftl
@@ -19,10 +19,15 @@
 package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemorypool;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-<#if (serviceInstanceJVMMemoryPoolIndicators?size>0) || indicator.filterExpressions??>
+<#if (serviceInstanceJVMMemoryPoolIndicators?size>0)>
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+    <#list serviceInstanceJVMMemoryPoolIndicators as indicator>
+        <#if indicator.filterExpressions??>
+import org.apache.skywalking.oap.server.core.analysis.indicator.expression.*;
+        </#if>
+    </#list>
 </#if>
-import org.apache.skywalking.oap.server.core.source.ServiceInstanceJVMMemoryPool;
+import org.apache.skywalking.oap.server.core.source.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
diff --git a/oal-parser/src/test/resources/oal_test.oal b/oal-parser/src/test/resources/oal_test.oal
index 10c473c..030a5aa 100644
--- a/oal-parser/src/test/resources/oal_test.oal
+++ b/oal-parser/src/test/resources/oal_test.oal
@@ -30,4 +30,4 @@
 
 instance_jvm_memory_pool_max = from(ServiceInstanceJVMMemoryPool.max).longAvg();
 
-instance_jvm_gc_time = from(ServiceInstanceJVMGC.time).longAvg();
\ No newline at end of file
+instance_jvm_young_gc_time = from(ServiceInstanceJVMGC.time).filter(phrase == GCPhrase.NEW).longAvg();
\ No newline at end of file
diff --git a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4 b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
index cdfd0b6..7dcbea5 100644
--- a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
+++ b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
@@ -80,7 +80,7 @@
     ;
 
 stringMatch
-    :  conditionAttribute DUALEQUALS stringConditionValue
+    :  conditionAttribute DUALEQUALS (stringConditionValue | enumConditionValue)
     ;
 
 conditionAttribute
@@ -93,4 +93,8 @@
 
 stringConditionValue
     : STRING_LITERAL
+    ;
+
+enumConditionValue
+    : IDENTIFIER DOT IDENTIFIER
     ;
\ No newline at end of file