Repository: groovy
Updated Branches:
  refs/heads/parrot f886a908e -> 3a035b977


Support default method for interface


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/3a035b97
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/3a035b97
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/3a035b97

Branch: refs/heads/parrot
Commit: 3a035b97712f1e59c792a393c2ea4ec3f32a5871
Parents: f886a90
Author: Daniel Sun <[email protected]>
Authored: Fri Dec 9 23:51:40 2016 +0800
Committer: Daniel Sun <[email protected]>
Committed: Fri Dec 9 23:51:40 2016 +0800

----------------------------------------------------------------------
 .../classgen/asm/BinaryExpressionHelper.java    |  72 +++-
 src/main/org/codehaus/groovy/syntax/Types.java  |   8 +-
 .../stc/StaticTypeCheckingVisitor.java          | 194 ++++++++++-
 .../apache/groovy/parser/antlr4/GroovyParser.g4 |   1 +
 .../groovy/parser/antlr4/AbstractParser.java    |   2 +-
 .../apache/groovy/parser/antlr4/AstBuilder.java | 348 ++++++++++++++++++-
 .../groovy/parser/antlr4/GroovySyntaxError.java |   2 -
 .../parser/antlr4/SemanticPredicates.java       |   4 +-
 .../TryWithResourcesASTTransformation.java      |  23 +-
 .../internal/DescriptiveErrorStrategy.java      |  10 +-
 .../parser/antlr4/GroovyParserTest.groovy       |   6 +
 .../resources/core/DefaultMethod_01x.groovy     |  21 ++
 .../resources/core/DefaultMethod_02x.groovy     |  36 ++
 13 files changed, 693 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/src/main/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java 
b/src/main/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
index 012cdd9..3279c14 100644
--- a/src/main/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
+++ b/src/main/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
@@ -21,7 +21,24 @@ package org.codehaus.groovy.classgen.asm;
 import org.codehaus.groovy.GroovyBugError;
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.expr.*;
+import org.codehaus.groovy.ast.expr.ArgumentListExpression;
+import org.codehaus.groovy.ast.expr.ArrayExpression;
+import org.codehaus.groovy.ast.expr.BinaryExpression;
+import org.codehaus.groovy.ast.expr.ClassExpression;
+import org.codehaus.groovy.ast.expr.ConstantExpression;
+import org.codehaus.groovy.ast.expr.ElvisOperatorExpression;
+import org.codehaus.groovy.ast.expr.EmptyExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.FieldExpression;
+import org.codehaus.groovy.ast.expr.ListExpression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.expr.NotExpression;
+import org.codehaus.groovy.ast.expr.PostfixExpression;
+import org.codehaus.groovy.ast.expr.PrefixExpression;
+import org.codehaus.groovy.ast.expr.PropertyExpression;
+import org.codehaus.groovy.ast.expr.TernaryExpression;
+import org.codehaus.groovy.ast.expr.TupleExpression;
+import org.codehaus.groovy.ast.expr.VariableExpression;
 import org.codehaus.groovy.ast.tools.WideningCategories;
 import org.codehaus.groovy.classgen.AsmClassGenerator;
 import org.codehaus.groovy.classgen.BytecodeExpression;
@@ -31,8 +48,57 @@ import org.codehaus.groovy.syntax.Types;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
 
-import static org.codehaus.groovy.syntax.Types.*;
-import static org.objectweb.asm.Opcodes.*;
+import static org.codehaus.groovy.syntax.Types.BITWISE_AND;
+import static org.codehaus.groovy.syntax.Types.BITWISE_AND_EQUAL;
+import static org.codehaus.groovy.syntax.Types.BITWISE_OR;
+import static org.codehaus.groovy.syntax.Types.BITWISE_OR_EQUAL;
+import static org.codehaus.groovy.syntax.Types.BITWISE_XOR;
+import static org.codehaus.groovy.syntax.Types.BITWISE_XOR_EQUAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_EQUAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_GREATER_THAN;
+import static org.codehaus.groovy.syntax.Types.COMPARE_GREATER_THAN_EQUAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_IDENTICAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_LESS_THAN;
+import static org.codehaus.groovy.syntax.Types.COMPARE_LESS_THAN_EQUAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_EQUAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_IDENTICAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_IN;
+import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_INSTANCEOF;
+import static org.codehaus.groovy.syntax.Types.COMPARE_TO;
+import static org.codehaus.groovy.syntax.Types.DIVIDE;
+import static org.codehaus.groovy.syntax.Types.DIVIDE_EQUAL;
+import static org.codehaus.groovy.syntax.Types.ELVIS_EQUAL;
+import static org.codehaus.groovy.syntax.Types.EQUAL;
+import static org.codehaus.groovy.syntax.Types.FIND_REGEX;
+import static org.codehaus.groovy.syntax.Types.INTDIV;
+import static org.codehaus.groovy.syntax.Types.INTDIV_EQUAL;
+import static org.codehaus.groovy.syntax.Types.KEYWORD_IN;
+import static org.codehaus.groovy.syntax.Types.KEYWORD_INSTANCEOF;
+import static org.codehaus.groovy.syntax.Types.LEFT_SHIFT;
+import static org.codehaus.groovy.syntax.Types.LEFT_SHIFT_EQUAL;
+import static org.codehaus.groovy.syntax.Types.LEFT_SQUARE_BRACKET;
+import static org.codehaus.groovy.syntax.Types.LOGICAL_AND;
+import static org.codehaus.groovy.syntax.Types.LOGICAL_OR;
+import static org.codehaus.groovy.syntax.Types.MATCH_REGEX;
+import static org.codehaus.groovy.syntax.Types.MINUS;
+import static org.codehaus.groovy.syntax.Types.MINUS_EQUAL;
+import static org.codehaus.groovy.syntax.Types.MOD;
+import static org.codehaus.groovy.syntax.Types.MOD_EQUAL;
+import static org.codehaus.groovy.syntax.Types.MULTIPLY;
+import static org.codehaus.groovy.syntax.Types.MULTIPLY_EQUAL;
+import static org.codehaus.groovy.syntax.Types.PLUS;
+import static org.codehaus.groovy.syntax.Types.PLUS_EQUAL;
+import static org.codehaus.groovy.syntax.Types.POWER;
+import static org.codehaus.groovy.syntax.Types.POWER_EQUAL;
+import static org.codehaus.groovy.syntax.Types.RIGHT_SHIFT;
+import static org.codehaus.groovy.syntax.Types.RIGHT_SHIFT_EQUAL;
+import static org.codehaus.groovy.syntax.Types.RIGHT_SHIFT_UNSIGNED;
+import static org.codehaus.groovy.syntax.Types.RIGHT_SHIFT_UNSIGNED_EQUAL;
+import static org.objectweb.asm.Opcodes.ACONST_NULL;
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.IFEQ;
+import static org.objectweb.asm.Opcodes.IFNE;
+import static org.objectweb.asm.Opcodes.INSTANCEOF;
 
 public class BinaryExpressionHelper {
     //compare

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/src/main/org/codehaus/groovy/syntax/Types.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/syntax/Types.java 
b/src/main/org/codehaus/groovy/syntax/Types.java
index 538d471..534c5ea 100644
--- a/src/main/org/codehaus/groovy/syntax/Types.java
+++ b/src/main/org/codehaus/groovy/syntax/Types.java
@@ -20,7 +20,13 @@ package org.codehaus.groovy.syntax;
 
 import org.codehaus.groovy.GroovyBugError;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
 
 
 /**

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java 
b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index fcec3e0..ddb7ce9 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -28,10 +28,61 @@ import groovy.transform.stc.ClosureParams;
 import groovy.transform.stc.ClosureSignatureConflictResolver;
 import groovy.transform.stc.ClosureSignatureHint;
 import org.codehaus.groovy.GroovyBugError;
-import org.codehaus.groovy.ast.*;
+import org.codehaus.groovy.ast.ASTNode;
+import org.codehaus.groovy.ast.AnnotatedNode;
+import org.codehaus.groovy.ast.AnnotationNode;
+import org.codehaus.groovy.ast.ClassCodeVisitorSupport;
 import org.codehaus.groovy.ast.ClassHelper;
-import org.codehaus.groovy.ast.expr.*;
-import org.codehaus.groovy.ast.stmt.*;
+import org.codehaus.groovy.ast.ClassNode;
+import org.codehaus.groovy.ast.ConstructorNode;
+import org.codehaus.groovy.ast.DynamicVariable;
+import org.codehaus.groovy.ast.FieldNode;
+import org.codehaus.groovy.ast.GenericsType;
+import org.codehaus.groovy.ast.InnerClassNode;
+import org.codehaus.groovy.ast.MethodNode;
+import org.codehaus.groovy.ast.Parameter;
+import org.codehaus.groovy.ast.PropertyNode;
+import org.codehaus.groovy.ast.Variable;
+import org.codehaus.groovy.ast.expr.ArgumentListExpression;
+import org.codehaus.groovy.ast.expr.AttributeExpression;
+import org.codehaus.groovy.ast.expr.BinaryExpression;
+import org.codehaus.groovy.ast.expr.BitwiseNegationExpression;
+import org.codehaus.groovy.ast.expr.CastExpression;
+import org.codehaus.groovy.ast.expr.ClassExpression;
+import org.codehaus.groovy.ast.expr.ClosureExpression;
+import org.codehaus.groovy.ast.expr.ClosureListExpression;
+import org.codehaus.groovy.ast.expr.ConstantExpression;
+import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
+import org.codehaus.groovy.ast.expr.DeclarationExpression;
+import org.codehaus.groovy.ast.expr.EmptyExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.FieldExpression;
+import org.codehaus.groovy.ast.expr.ListExpression;
+import org.codehaus.groovy.ast.expr.MapEntryExpression;
+import org.codehaus.groovy.ast.expr.MapExpression;
+import org.codehaus.groovy.ast.expr.MethodCall;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.expr.PostfixExpression;
+import org.codehaus.groovy.ast.expr.PrefixExpression;
+import org.codehaus.groovy.ast.expr.PropertyExpression;
+import org.codehaus.groovy.ast.expr.RangeExpression;
+import org.codehaus.groovy.ast.expr.SpreadExpression;
+import org.codehaus.groovy.ast.expr.StaticMethodCallExpression;
+import org.codehaus.groovy.ast.expr.TernaryExpression;
+import org.codehaus.groovy.ast.expr.TupleExpression;
+import org.codehaus.groovy.ast.expr.UnaryMinusExpression;
+import org.codehaus.groovy.ast.expr.UnaryPlusExpression;
+import org.codehaus.groovy.ast.expr.VariableExpression;
+import org.codehaus.groovy.ast.stmt.CaseStatement;
+import org.codehaus.groovy.ast.stmt.CatchStatement;
+import org.codehaus.groovy.ast.stmt.EmptyStatement;
+import org.codehaus.groovy.ast.stmt.ForStatement;
+import org.codehaus.groovy.ast.stmt.IfStatement;
+import org.codehaus.groovy.ast.stmt.ReturnStatement;
+import org.codehaus.groovy.ast.stmt.Statement;
+import org.codehaus.groovy.ast.stmt.SwitchStatement;
+import org.codehaus.groovy.ast.stmt.TryCatchStatement;
+import org.codehaus.groovy.ast.stmt.WhileStatement;
 import org.codehaus.groovy.ast.tools.GenericsUtils;
 import org.codehaus.groovy.ast.tools.WideningCategories;
 import org.codehaus.groovy.classgen.ReturnAdder;
@@ -51,14 +102,141 @@ import org.codehaus.groovy.util.ListHashMap;
 import org.objectweb.asm.Opcodes;
 
 import java.lang.reflect.Modifier;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
 
-import static org.codehaus.groovy.ast.ClassHelper.*;
-import static org.codehaus.groovy.ast.tools.WideningCategories.*;
-import static org.codehaus.groovy.syntax.Types.*;
-import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.*;
+import static org.codehaus.groovy.ast.ClassHelper.BigDecimal_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.BigInteger_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Boolean_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Byte_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.CLASS_Type;
+import static org.codehaus.groovy.ast.ClassHelper.CLOSURE_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Character_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.DYNAMIC_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Double_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Float_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.GROOVY_OBJECT_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.GSTRING_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Integer_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Iterator_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.LIST_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Long_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.MAP_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Number_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.OBJECT_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.PATTERN_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.RANGE_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.STRING_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.Short_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.VOID_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.boolean_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.byte_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.char_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.double_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.findSAM;
+import static org.codehaus.groovy.ast.ClassHelper.float_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.getNextSuperClass;
+import static org.codehaus.groovy.ast.ClassHelper.getUnwrapper;
+import static org.codehaus.groovy.ast.ClassHelper.getWrapper;
+import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.isNumberType;
+import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveType;
+import static org.codehaus.groovy.ast.ClassHelper.isSAMType;
+import static org.codehaus.groovy.ast.ClassHelper.long_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.make;
+import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.void_WRAPPER_TYPE;
+import static 
org.codehaus.groovy.ast.tools.WideningCategories.LowestUpperBoundClassNode;
+import static 
org.codehaus.groovy.ast.tools.WideningCategories.isBigDecCategory;
+import static 
org.codehaus.groovy.ast.tools.WideningCategories.isBigIntCategory;
+import static org.codehaus.groovy.ast.tools.WideningCategories.isDouble;
+import static 
org.codehaus.groovy.ast.tools.WideningCategories.isDoubleCategory;
+import static org.codehaus.groovy.ast.tools.WideningCategories.isFloat;
+import static 
org.codehaus.groovy.ast.tools.WideningCategories.isFloatingCategory;
+import static org.codehaus.groovy.ast.tools.WideningCategories.isIntCategory;
+import static org.codehaus.groovy.ast.tools.WideningCategories.isLongCategory;
+import static 
org.codehaus.groovy.ast.tools.WideningCategories.isNumberCategory;
+import static 
org.codehaus.groovy.ast.tools.WideningCategories.lowestUpperBound;
+import static org.codehaus.groovy.syntax.Types.ASSIGN;
+import static org.codehaus.groovy.syntax.Types.ASSIGNMENT_OPERATOR;
+import static org.codehaus.groovy.syntax.Types.COMPARE_EQUAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_EQUAL;
+import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_IN;
+import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_INSTANCEOF;
+import static org.codehaus.groovy.syntax.Types.COMPARE_TO;
+import static org.codehaus.groovy.syntax.Types.DIVIDE;
+import static org.codehaus.groovy.syntax.Types.DIVIDE_EQUAL;
+import static org.codehaus.groovy.syntax.Types.ELVIS_EQUAL;
+import static org.codehaus.groovy.syntax.Types.EQUAL;
+import static org.codehaus.groovy.syntax.Types.FIND_REGEX;
+import static org.codehaus.groovy.syntax.Types.KEYWORD_IN;
+import static org.codehaus.groovy.syntax.Types.KEYWORD_INSTANCEOF;
+import static org.codehaus.groovy.syntax.Types.LEFT_SQUARE_BRACKET;
+import static org.codehaus.groovy.syntax.Types.MINUS_MINUS;
+import static org.codehaus.groovy.syntax.Types.MOD;
+import static org.codehaus.groovy.syntax.Types.MOD_EQUAL;
+import static org.codehaus.groovy.syntax.Types.PLUS_PLUS;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.ArrayList_TYPE;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.Collection_TYPE;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.Matcher_TYPE;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.UNKNOWN_PARAMETER_TYPE;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.addMethodLevelDeclaredGenerics;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.allParametersAndArgumentsMatch;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsConnections;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContextToParameterClass;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.boundUnboundedWildcards;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.checkCompatibleAssignmentTypes;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.checkPossibleLooseOfPrecision;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.chooseBestMethod;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.evaluateExpression;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.extractGenericsConnections;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.extractGenericsParameterMapOfThis;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.findDGMMethodsByNameAndArguments;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.findSetters;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.findTargetVariable;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.fullyResolveType;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.getGenericsWithoutArray;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.getOperationName;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isArrayOp;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isAssignableTo;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isAssignment;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isBeingCompiled;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isBitOperator;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isBoolIntrinsicOp;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isClassClassNodeWrappingConcreteType;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isCompareToBoolean;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isOperationInGroup;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isParameterizedWithGStringOrGStringString;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isParameterizedWithString;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isPowerOperator;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isShiftOperation;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isTraitSelf;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isUsingGenericsOrIsArrayUsingGenerics;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isVargs;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isWildcardLeftHandSide;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.lastArgMatchesVarg;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.missesGenericsTypes;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.prettyPrintType;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.resolveClassNodeGenerics;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.toMethodParametersString;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.typeCheckMethodArgumentWithGenerics;
+import static 
org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.typeCheckMethodsWithGenerics;
 
 /**
  * The main class code visitor responsible for static type checking. It will 
perform various inspections like checking

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
 
b/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 2f93cab..ad95fef 100644
--- 
a/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ 
b/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -179,6 +179,7 @@ classOrInterfaceModifier
           |   ABSTRACT   // class or interface
           |   FINAL      // class only -- does not apply to interfaces
           |   STRICTFP   // class or interface
+          |   DEFAULT    // interface only -- does not apply to classes
           )
     ;
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
index 44c51c4..95f493d 100644
--- 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
+++ 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
@@ -18,8 +18,8 @@
  */
 package org.apache.groovy.parser.antlr4;
 
-import org.antlr.v4.runtime.TokenStream;
 import org.antlr.v4.runtime.Parser;
+import org.antlr.v4.runtime.TokenStream;
 
 /**
  * Because antlr4 does not support generating parser with specified interface,

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 31124d6..b046f98 100644
--- 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -19,7 +19,13 @@
 package org.apache.groovy.parser.antlr4;
 
 import groovy.lang.IntRange;
-import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.ANTLRErrorListener;
+import org.antlr.v4.runtime.ANTLRInputStream;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.RecognitionException;
+import org.antlr.v4.runtime.Recognizer;
+import org.antlr.v4.runtime.Token;
 import org.antlr.v4.runtime.atn.PredictionMode;
 import org.antlr.v4.runtime.misc.ParseCancellationException;
 import org.antlr.v4.runtime.tree.ParseTree;
@@ -29,9 +35,77 @@ import 
org.apache.groovy.parser.antlr4.internal.DescriptiveErrorStrategy;
 import org.apache.groovy.parser.antlr4.util.StringUtils;
 import org.codehaus.groovy.GroovyBugError;
 import org.codehaus.groovy.antlr.EnumHelper;
-import org.codehaus.groovy.ast.*;
-import org.codehaus.groovy.ast.expr.*;
-import org.codehaus.groovy.ast.stmt.*;
+import org.codehaus.groovy.ast.ASTNode;
+import org.codehaus.groovy.ast.AnnotatedNode;
+import org.codehaus.groovy.ast.AnnotationNode;
+import org.codehaus.groovy.ast.ClassHelper;
+import org.codehaus.groovy.ast.ClassNode;
+import org.codehaus.groovy.ast.EnumConstantClassNode;
+import org.codehaus.groovy.ast.FieldNode;
+import org.codehaus.groovy.ast.GenericsType;
+import org.codehaus.groovy.ast.ImportNode;
+import org.codehaus.groovy.ast.InnerClassNode;
+import org.codehaus.groovy.ast.MethodNode;
+import org.codehaus.groovy.ast.ModuleNode;
+import org.codehaus.groovy.ast.PackageNode;
+import org.codehaus.groovy.ast.Parameter;
+import org.codehaus.groovy.ast.PropertyNode;
+import org.codehaus.groovy.ast.expr.AnnotationConstantExpression;
+import org.codehaus.groovy.ast.expr.ArgumentListExpression;
+import org.codehaus.groovy.ast.expr.ArrayExpression;
+import org.codehaus.groovy.ast.expr.AttributeExpression;
+import org.codehaus.groovy.ast.expr.BinaryExpression;
+import org.codehaus.groovy.ast.expr.BitwiseNegationExpression;
+import org.codehaus.groovy.ast.expr.BooleanExpression;
+import org.codehaus.groovy.ast.expr.CastExpression;
+import org.codehaus.groovy.ast.expr.ClassExpression;
+import org.codehaus.groovy.ast.expr.ClosureExpression;
+import org.codehaus.groovy.ast.expr.ClosureListExpression;
+import org.codehaus.groovy.ast.expr.ConstantExpression;
+import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
+import org.codehaus.groovy.ast.expr.DeclarationExpression;
+import org.codehaus.groovy.ast.expr.ElvisOperatorExpression;
+import org.codehaus.groovy.ast.expr.EmptyExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.GStringExpression;
+import org.codehaus.groovy.ast.expr.LambdaExpression;
+import org.codehaus.groovy.ast.expr.ListExpression;
+import org.codehaus.groovy.ast.expr.MapEntryExpression;
+import org.codehaus.groovy.ast.expr.MapExpression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.expr.MethodPointerExpression;
+import org.codehaus.groovy.ast.expr.MethodReferenceExpression;
+import org.codehaus.groovy.ast.expr.NamedArgumentListExpression;
+import org.codehaus.groovy.ast.expr.NotExpression;
+import org.codehaus.groovy.ast.expr.PostfixExpression;
+import org.codehaus.groovy.ast.expr.PrefixExpression;
+import org.codehaus.groovy.ast.expr.PropertyExpression;
+import org.codehaus.groovy.ast.expr.RangeExpression;
+import org.codehaus.groovy.ast.expr.SpreadExpression;
+import org.codehaus.groovy.ast.expr.SpreadMapExpression;
+import org.codehaus.groovy.ast.expr.TernaryExpression;
+import org.codehaus.groovy.ast.expr.TupleExpression;
+import org.codehaus.groovy.ast.expr.UnaryMinusExpression;
+import org.codehaus.groovy.ast.expr.UnaryPlusExpression;
+import org.codehaus.groovy.ast.expr.VariableExpression;
+import org.codehaus.groovy.ast.stmt.AssertStatement;
+import org.codehaus.groovy.ast.stmt.BlockStatement;
+import org.codehaus.groovy.ast.stmt.BreakStatement;
+import org.codehaus.groovy.ast.stmt.CaseStatement;
+import org.codehaus.groovy.ast.stmt.CatchStatement;
+import org.codehaus.groovy.ast.stmt.ContinueStatement;
+import org.codehaus.groovy.ast.stmt.DoWhileStatement;
+import org.codehaus.groovy.ast.stmt.EmptyStatement;
+import org.codehaus.groovy.ast.stmt.ExpressionStatement;
+import org.codehaus.groovy.ast.stmt.ForStatement;
+import org.codehaus.groovy.ast.stmt.IfStatement;
+import org.codehaus.groovy.ast.stmt.ReturnStatement;
+import org.codehaus.groovy.ast.stmt.Statement;
+import org.codehaus.groovy.ast.stmt.SwitchStatement;
+import org.codehaus.groovy.ast.stmt.SynchronizedStatement;
+import org.codehaus.groovy.ast.stmt.ThrowStatement;
+import org.codehaus.groovy.ast.stmt.TryCatchStatement;
+import org.codehaus.groovy.ast.stmt.WhileStatement;
 import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilePhase;
 import org.codehaus.groovy.control.SourceUnit;
@@ -48,13 +122,227 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.lang.reflect.Field;
-import java.util.*;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static org.apache.groovy.parser.antlr4.GroovyLangParser.*;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.ABSTRACT;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.ADD;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.AS;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.AdditiveExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.AndExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.AnnotationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.AnnotationNameContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.AnnotationsOptContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.AnonymousInnerClassDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ArgumentsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ArrayInitializerContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.AssertStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.AssignmentExprAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.BlockContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.BlockStatementContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.BlockStatementsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.BlockStatementsOptContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.BooleanLiteralAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.BreakStatementContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.BreakStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.BuiltInTypeContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.CASE;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CastExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CastParExpressionContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CatchClauseContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CatchTypeContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClassBodyContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClassBodyDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClassDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClassNameContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClassOrInterfaceModifierContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClassOrInterfaceModifiersContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClassOrInterfaceModifiersOptContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClassOrInterfaceTypeContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.ClosureContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ClosurePrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CommandArgumentContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CommandExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CommandExpressionContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CompilationUnitContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ConditionalExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ContinueStatementContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ContinueStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.CreatedNameContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.CreatorContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.DEC;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.DEF;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.DEFAULT;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.DoWhileStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.DynamicMemberNameContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ElementValueArrayInitializerContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ElementValueContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ElementValuePairContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ElementValuePairsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.EnhancedArgumentListContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.EnhancedArgumentListElementContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.EnhancedForControlContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.EnumConstantContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.EnumConstantsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.EqualityExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ExclusiveOrExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ExpressionContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ExpressionListContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ExpressionListElementContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ExpressionStmtAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.FINAL;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.FieldDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.FinallyBlockContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.FloatingPointLiteralAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ForControlContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.ForInitContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ForStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ForUpdateContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.FormalParameterContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.FormalParameterListContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.FormalParametersContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.GE;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.GT;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.GroovyParserRuleContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.GstringContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.GstringPathContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.GstringPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.GstringValueContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.IN;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.INC;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.INSTANCEOF;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.IdentifierContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.IdentifierPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.IfElseStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ImportDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ImportStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.InclusiveOrExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.IndexPropertyArgsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.IntegerLiteralAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.KeywordsContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.LE;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.LT;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LabeledStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LambdaBodyContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LambdaPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LastFormalParameterContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.ListContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ListPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LiteralPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LocalVariableDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LocalVariableDeclarationStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LogicalAndExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LogicalOrExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.LoopStmtAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.MapContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.MapEntryContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MapEntryLabelContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MapEntryListContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MapPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MemberDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MethodBodyContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MethodDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MethodDeclarationStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MethodNameContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.ModifierContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ModifiersContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ModifiersOptContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MultipleAssignmentExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.MultiplicativeExprAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.NATIVE;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.NOT_IN;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.NOT_INSTANCEOF;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.NamePartContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.NamedPropertyArgsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.NewPrmrAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.NlsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.NonWildcardTypeArgumentsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.NormalExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.NullLiteralAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.PRIVATE;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.PROTECTED;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.PUBLIC;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.PackageDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ParExpressionContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ParenPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.PathElementContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.PathExpressionContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.PostfixExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.PowerExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.PrimitiveTypeContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.QualifiedClassNameContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.QualifiedClassNameListContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.QualifiedNameContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.QualifiedStandardClassNameContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.RegexExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.RelationalExprAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.ResourceContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ResourceListContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ResourcesContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ReturnStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ReturnTypeContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.STATIC;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.STRICTFP;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.SUB;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.SYNCHRONIZED;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.SepContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ShiftExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StandardLambdaContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StandardLambdaParametersContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StringLiteralAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StringLiteralContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.SuperPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchBlockStatementGroupContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchLabelContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchStatementContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.SynchronizedStmtAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.TRANSIENT;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ThisPrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ThrowStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TryCatchStatementContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TryCatchStmtAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeArgumentContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeArgumentsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeArgumentsOrDiamondContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeBoundContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.TypeContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeDeclarationStmtAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.TypeListContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeNamePairContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeNamePairsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeParameterContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypeParametersContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.TypePrmrAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.UnaryAddExprAltContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.UnaryNotExprAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyLangParser.VOLATILE;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableDeclarationContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableDeclaratorContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableDeclaratorIdContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableDeclaratorsContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableInitializerContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableModifierContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableModifiersContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableModifiersOptContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.VariableNamesContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.WhileStmtAltContext;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.last;
 
@@ -809,12 +1097,22 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
         classNode.addAnnotations(modifierManager.getAnnotations());
         
classNode.setGenericsTypes(this.visitTypeParameters(ctx.typeParameters()));
 
-        if (asBoolean(ctx.CLASS()) || asBoolean(ctx.TRAIT())) { // class OR 
trait
+        boolean isInterface = asBoolean(ctx.INTERFACE()) && 
!asBoolean(ctx.AT());
+        boolean isInterfaceWithDefaultMethods = false;
+
+        // declaring interface with default method
+        if (isInterface && this.containsDefaultMethods(ctx)) {
+            isInterfaceWithDefaultMethods = true;
+            classNode.addAnnotation(new 
AnnotationNode(ClassHelper.make(GROOVY_TRANSFORM_TRAIT)));
+            classNode.putNodeMetaData(IS_INTERFACE_WITH_DEFAULT_METHODS, true);
+        }
+
+        if (asBoolean(ctx.CLASS()) || asBoolean(ctx.TRAIT()) || 
isInterfaceWithDefaultMethods) { // class OR trait OR interface with default 
methods
             classNode.setSuperClass(this.visitType(ctx.sc));
             classNode.setInterfaces(this.visitTypeList(ctx.is));
 
             this.initUsingGenerics(classNode);
-        } else if (asBoolean(ctx.INTERFACE()) && !asBoolean(ctx.AT())) { // 
interface(NOT annotation)
+        } else if (isInterface) { // interface(NOT annotation)
             classNode.setModifiers(classNode.getModifiers() | 
Opcodes.ACC_INTERFACE | Opcodes.ACC_ABSTRACT);
 
             classNode.setSuperClass(ClassHelper.OBJECT_TYPE);
@@ -863,6 +1161,26 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
         return classNode;
     }
 
+    @SuppressWarnings({"unchecked"})
+    private boolean containsDefaultMethods(ClassDeclarationContext ctx) {
+        List<MethodDeclarationContext> methodDeclarationContextList =
+                (List<MethodDeclarationContext>) 
ctx.classBody().classBodyDeclaration().stream()
+                .map(ClassBodyDeclarationContext::memberDeclaration)
+                .filter(Objects::nonNull)
+                .map(e -> (Object) e.methodDeclaration())
+                .filter(Objects::nonNull).reduce(new 
LinkedList<MethodDeclarationContext>(), (r, e) -> {
+                    MethodDeclarationContext methodDeclarationContext = 
(MethodDeclarationContext) e;
+
+                    if 
(createModifierManager(methodDeclarationContext).contains(DEFAULT)) {
+                        ((List) r).add(methodDeclarationContext);
+                    }
+
+                    return r;
+        });
+
+        return !methodDeclarationContextList.isEmpty();
+    }
+
     @Override
     public Void visitClassBody(ClassBodyContext ctx) {
         ClassNode classNode = 
ctx.getNodeMetaData(CLASS_DECLARATION_CLASS_NODE);
@@ -1092,8 +1410,7 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
         return null;
     }
 
-    @Override
-    public MethodNode visitMethodDeclaration(MethodDeclarationContext ctx) {
+    private ModifierManager createModifierManager(MethodDeclarationContext 
ctx) {
         List<ModifierNode> modifierNodeList = Collections.emptyList();
 
         if (asBoolean(ctx.modifiers())) {
@@ -1102,7 +1419,12 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
             modifierNodeList = this.visitModifiersOpt(ctx.modifiersOpt());
         }
 
-        ModifierManager modifierManager = new 
ModifierManager(modifierNodeList);
+        return new ModifierManager(modifierNodeList);
+    }
+
+    @Override
+    public MethodNode visitMethodDeclaration(MethodDeclarationContext ctx) {
+        ModifierManager modifierManager = createModifierManager(ctx);
         String methodName = this.visitMethodName(ctx.methodName());
         ClassNode returnType = this.visitReturnType(ctx.returnType());
         Parameter[] parameters = 
this.visitFormalParameters(ctx.formalParameters());
@@ -1144,7 +1466,7 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
 
                 }
 
-                modifiers |= classNode.isInterface() ? Opcodes.ACC_ABSTRACT : 
0;
+                modifiers |= classNode.isInterface() || (isTrue(classNode, 
IS_INTERFACE_WITH_DEFAULT_METHODS) && !modifierManager.contains(DEFAULT)) ? 
Opcodes.ACC_ABSTRACT : 0;
                 methodNode = classNode.addMethod(methodName, modifiers, 
returnType, parameters, exceptions, code);
 
                 methodNode.setAnnotationDefault(asBoolean(ctx.elementValue()));
@@ -4153,6 +4475,7 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
                 put(ABSTRACT, Opcodes.ACC_ABSTRACT);
                 put(FINAL, Opcodes.ACC_FINAL);
                 put(STRICTFP, Opcodes.ACC_STRICT);
+                put(DEFAULT, 0); // no flag for specifying a default method in 
the JVM spec, hence no ACC_DEFAULT flag in ASM
             }
         };
 
@@ -4388,6 +4711,7 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
     private static final String IS_SWITCH_DEFAULT = "_IS_SWITCH_DEFAULT";
     private static final String IS_NUMERIC = "_IS_NUMERIC";
     private static final String IS_STRING = "_IS_STRING";
+    private static final String IS_INTERFACE_WITH_DEFAULT_METHODS = 
"_IS_INTERFACE_WITH_DEFAULT_METHODS";
 
     private static final String PATH_EXPRESSION_BASE_EXPR = 
"_PATH_EXPRESSION_BASE_EXPR";
     private static final String PATH_EXPRESSION_BASE_EXPR_GENERICS_TYPES = 
"_PATH_EXPRESSION_BASE_EXPR_GENERICS_TYPES";

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java
 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java
index 5dc829d..12bb63d 100644
--- 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java
+++ 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java
@@ -18,8 +18,6 @@
  */
 package org.apache.groovy.parser.antlr4;
 
-import java.util.IllegalFormatCodePointException;
-
 /**
  * Represents a syntax error of groovy program
  */

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java
 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java
index 0d5fde3..e306e89 100644
--- 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java
+++ 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java
@@ -21,7 +21,9 @@ package org.apache.groovy.parser.antlr4;
 import org.antlr.v4.runtime.CharStream;
 import org.antlr.v4.runtime.TokenStream;
 
-import static org.apache.groovy.parser.antlr4.GroovyParser.*;
+import static 
org.apache.groovy.parser.antlr4.GroovyParser.CapitalizedIdentifier;
+import static org.apache.groovy.parser.antlr4.GroovyParser.Identifier;
+import static org.apache.groovy.parser.antlr4.GroovyParser.StringLiteral;
 
 /**
  * Some semantic predicates for altering the behaviour of the lexer and parser

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
index b249d5f..e342a3f 100644
--- 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
+++ 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
@@ -2,8 +2,21 @@ package org.apache.groovy.parser.antlr4;
 
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.expr.*;
-import org.codehaus.groovy.ast.stmt.*;
+import org.codehaus.groovy.ast.expr.ArgumentListExpression;
+import org.codehaus.groovy.ast.expr.BinaryExpression;
+import org.codehaus.groovy.ast.expr.BooleanExpression;
+import org.codehaus.groovy.ast.expr.ConstantExpression;
+import org.codehaus.groovy.ast.expr.DeclarationExpression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.expr.VariableExpression;
+import org.codehaus.groovy.ast.stmt.BlockStatement;
+import org.codehaus.groovy.ast.stmt.CatchStatement;
+import org.codehaus.groovy.ast.stmt.EmptyStatement;
+import org.codehaus.groovy.ast.stmt.ExpressionStatement;
+import org.codehaus.groovy.ast.stmt.IfStatement;
+import org.codehaus.groovy.ast.stmt.Statement;
+import org.codehaus.groovy.ast.stmt.ThrowStatement;
+import org.codehaus.groovy.ast.stmt.TryCatchStatement;
 import org.codehaus.groovy.syntax.Types;
 import org.objectweb.asm.Opcodes;
 
@@ -73,7 +86,7 @@ public class TryWithResourcesASTTransformation {
         return variableDeclaration;
     }
 
-    private long primaryExcCnt = 0;
+    private int primaryExcCnt = 0;
     private String genPrimaryExcName() {
         return "__$$primaryExc" + primaryExcCnt++;
     }
@@ -229,7 +242,7 @@ public class TryWithResourcesASTTransformation {
         return new CatchStatement(tExcParameter, blockStatement);
     }
 
-    private long tExcCnt = 0;
+    private int tExcCnt = 0;
     private String genTExcName() {
         return "__$$t" + tExcCnt++;
     }
@@ -303,7 +316,7 @@ public class TryWithResourcesASTTransformation {
         return astBuilder.createBlockStatement(finallyBlock);
     }
 
-    private long suppressedExcCnt = 0;
+    private int suppressedExcCnt = 0;
     private String genSuppressedExcName() {
         return "__$$suppressedExc" + suppressedExcCnt++;
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java
 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java
index c2c5afe..12081ed 100644
--- 
a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java
+++ 
b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java
@@ -18,7 +18,15 @@
  */
 package org.apache.groovy.parser.antlr4.internal;
 
-import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.BailErrorStrategy;
+import org.antlr.v4.runtime.FailedPredicateException;
+import org.antlr.v4.runtime.InputMismatchException;
+import org.antlr.v4.runtime.NoViableAltException;
+import org.antlr.v4.runtime.Parser;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.RecognitionException;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.TokenStream;
 import org.antlr.v4.runtime.atn.PredictionMode;
 import org.antlr.v4.runtime.misc.NotNull;
 import org.antlr.v4.runtime.misc.ParseCancellationException;

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
 
b/subprojects/groovy-antlr4-grammar/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
index dc89f17..cc657c4 100644
--- 
a/subprojects/groovy-antlr4-grammar/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
+++ 
b/subprojects/groovy-antlr4-grammar/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
@@ -240,6 +240,12 @@ class GroovyParserTest extends GroovyTestCase {
         doRunAndTest('core/NegativeRelationalOperators_02x.groovy');
     }
 
+    void "test groovy core - DefaultMethod"() {
+        doRunAndTest('core/DefaultMethod_01x.groovy');
+        doRunAndTest('core/DefaultMethod_02x.groovy');
+    }
+
+
     void "test groovy core - Switch"() {
         doTest('core/Switch_01.groovy');
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/test/resources/core/DefaultMethod_01x.groovy
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/test/resources/core/DefaultMethod_01x.groovy
 
b/subprojects/groovy-antlr4-grammar/src/test/resources/core/DefaultMethod_01x.groovy
new file mode 100644
index 0000000..eec33f2
--- /dev/null
+++ 
b/subprojects/groovy-antlr4-grammar/src/test/resources/core/DefaultMethod_01x.groovy
@@ -0,0 +1,21 @@
+
+interface Greetable {
+    String name();
+    default String hello() {
+        return 'hello'
+    }
+    default public String sayHello() {
+        return this.hello() + ', ' + this.name()
+    }
+}
+
+class Person implements Greetable {
+    @Override
+    public String name() {
+        return 'Daniel'
+    }
+}
+
+def p = new Person()
+assert 'hello, Daniel' == "${p.hello()}, ${p.name()}"
+assert 'hello, Daniel' == p.sayHello()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/groovy/blob/3a035b97/subprojects/groovy-antlr4-grammar/src/test/resources/core/DefaultMethod_02x.groovy
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-antlr4-grammar/src/test/resources/core/DefaultMethod_02x.groovy
 
b/subprojects/groovy-antlr4-grammar/src/test/resources/core/DefaultMethod_02x.groovy
new file mode 100644
index 0000000..e2053c6
--- /dev/null
+++ 
b/subprojects/groovy-antlr4-grammar/src/test/resources/core/DefaultMethod_02x.groovy
@@ -0,0 +1,36 @@
+interface A {
+    default String hello() {
+        return 'hello'
+    }
+    default String a() {
+        return 'a'
+    }
+    String b();
+}
+
+interface B extends A {
+    public String world();
+}
+
+class C implements B {
+    public static String haha() { return 'haha' }
+
+    public String world() {
+        return 'world'
+    }
+
+    public String name() {
+        return 'c'
+    }
+
+    public String a() {
+        return 'a1';
+    }
+
+    public String b() {
+        return 'b'
+    }
+}
+
+def c = new C()
+assert 'hello, world, c, a1, b, haha' == "${c.hello()}, ${c.world()}, 
${c.name()}, ${c.a()}, ${c.b()}, ${C.haha()}"
\ No newline at end of file

Reply via email to