From cbdaa27acd13a97353f6af6056ccb5d03dbfcd59 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 12 Jan 2012 17:36:37 +0100 Subject: [PATCH] [by peter] do not generate final modifier for enums --- .../jetbrains/groovy/compiler/rt/GroovycRunner.java | 13 ++++++++++++- .../groovy/compiler/GroovyCompilerTest.groovy | 6 ++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/plugins/groovy/rt/src/org/jetbrains/groovy/compiler/rt/GroovycRunner.java b/plugins/groovy/rt/src/org/jetbrains/groovy/compiler/rt/GroovycRunner.java index 669f7031c792..0d7ac29f4814 100644 --- a/plugins/groovy/rt/src/org/jetbrains/groovy/compiler/rt/GroovycRunner.java +++ b/plugins/groovy/rt/src/org/jetbrains/groovy/compiler/rt/GroovycRunner.java @@ -16,7 +16,11 @@ package org.jetbrains.groovy.compiler.rt; import groovy.lang.GroovyClassLoader; -import org.codehaus.groovy.ast.*; +import groovyjarjarasm.asm.Opcodes; +import org.codehaus.groovy.ast.AnnotatedNode; +import org.codehaus.groovy.ast.AnnotationNode; +import org.codehaus.groovy.ast.ClassCodeVisitorSupport; +import org.codehaus.groovy.ast.ClassNode; import org.codehaus.groovy.classgen.GeneratorContext; import org.codehaus.groovy.control.*; import org.codehaus.groovy.control.messages.WarningMessage; @@ -418,6 +422,13 @@ public class GroovycRunner { return source; } + public void visitClass(ClassNode node) { + if (node.isEnum()) { + node.setModifiers(node.getModifiers() & ~Opcodes.ACC_FINAL); + } + super.visitClass(node); + } + @Override public void visitAnnotations(AnnotatedNode node) { List annotations = node.getAnnotations(); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTest.groovy index 574e54bf3627..6c72b719486f 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTest.groovy @@ -154,6 +154,12 @@ public abstract class GroovyCompilerTest extends GroovyCompilerTestCase { assertEmpty(make()); } + public void testJavaDependsOnGroovyEnum() throws Throwable { + myFixture.addFileToProject("Foo.groovy", "enum Foo { FOO }") + myFixture.addClass("class Bar { Foo f; }") + assertEmpty(make()) + } + public void testDeleteTransitiveJavaClass() throws Throwable { myFixture.addClass("public interface IFoo { int foo(); }"); myFixture.addClass("public class Foo implements IFoo {" +