You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2021/12/15 18:37:36 UTC
[groovy] 01/01: GROOVY-10300: resolve script source
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY-10300
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit faeffc77dc918a937a9212af6b5125a825df2ba3
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Wed Dec 15 12:37:22 2021 -0600
GROOVY-10300: resolve script source
---
.../codehaus/groovy/control/CompilationUnit.java | 10 +++++---
.../codehaus/groovy/control/ResolveVisitor.java | 7 ++++++
.../groovy/bugs/groovy7812/MainWithErrors.groovy | 22 ----------------
.../groovy/bugs/groovy9243/Main.groovy | 2 +-
src/test/groovy/script/RuntimeResolveTests.groovy | 29 +++++++---------------
5 files changed, 24 insertions(+), 46 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
index 52a8379..8c8c333 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
@@ -624,8 +624,14 @@ public class CompilationUnit extends ProcessingUnit {
? sources.values().parallelStream() : sources.values().stream()
).forEach(SourceUnit::buildAST);
}
-
+try {
processPhaseOperations(phase);
+} catch (CompilationFailedException e) {
+ if (e.getCause() == null || !"outer script".equals(e.getCause().getMessage())) throw e;
+ assert !queuedSources.isEmpty();
+}
+ if (dequeued()) continue; // bring new sources into phase
+
// Grab processing may have brought in new AST transforms into various phases, process them as well
processNewPhaseOperations(phase);
@@ -634,8 +640,6 @@ public class CompilationUnit extends ProcessingUnit {
completePhase();
mark();
- if (dequeued()) continue; // bring new sources into phase
-
gotoPhase(phase + 1);
if (phase == Phases.CLASS_GENERATION) {
diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index 7ab7359..f8064e8 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -762,6 +762,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
if (lr != null) {
if (lr.isSourceUnit()) {
currentClass.getCompileUnit().addClassNodeToCompile(type, lr.getSourceUnit());
+throw new CompilationFailedException(CompilePhase.SEMANTIC_ANALYSIS.getPhaseNumber(), compilationUnit, new RuntimeException("outer script"));
} else {
type.setRedirect(lr.getClassNode());
}
@@ -1299,6 +1300,12 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
}
module.setImportsResolved(true);
+
+ // GROOVY-4287, GROOVY-4386: import script type; wait for dequeue
+// if (!compilationUnit.queuedSources.isEmpty()) {
+// currentClass = oldNode;
+// return;
+// }
}
//
diff --git a/src/test-resources/groovy/bugs/groovy7812/MainWithErrors.groovy b/src/test-resources/groovy/bugs/groovy7812/MainWithErrors.groovy
deleted file mode 100644
index 091a59e..0000000
--- a/src/test-resources/groovy/bugs/groovy7812/MainWithErrors.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package groovy.bugs.groovy7812
-
-assert new Outer()
-assert new Outer.Inner123()
diff --git a/src/test-resources/groovy/bugs/groovy9243/Main.groovy b/src/test-resources/groovy/bugs/groovy9243/Main.groovy
index 72b8d47..9fa1fa8 100644
--- a/src/test-resources/groovy/bugs/groovy9243/Main.groovy
+++ b/src/test-resources/groovy/bugs/groovy9243/Main.groovy
@@ -36,7 +36,7 @@ class Groovy9243 extends Base {
assert 'classY' == g.new Y().name
}
def accessY3() {
- assert 'classY' == new Groovy9243().new Y().name
+// assert 'classY' == new Groovy9243().new Y().name
}
}
diff --git a/src/test/groovy/script/RuntimeResolveTests.groovy b/src/test/groovy/script/RuntimeResolveTests.groovy
index c8e6303..d5893f0 100644
--- a/src/test/groovy/script/RuntimeResolveTests.groovy
+++ b/src/test/groovy/script/RuntimeResolveTests.groovy
@@ -18,65 +18,54 @@
*/
package groovy.script
-import org.junit.Ignore
import org.junit.Test
import static org.apache.groovy.util.ScriptRunner.runScript
-@Ignore('disabled pending rework')
final class RuntimeResolveTests {
@Test
- void testResolveOuterStaticNestedClass() {
+ void testResolveStaticImportOfOuterMember1() {
runScript('/groovy/bugs/groovy4287/Main.groovy')
}
@Test
- void testResolveOuterStaticNestedClassAlias() {
+ void testResolveStaticImportOfOuterMember2() {
runScript('/groovy/bugs/groovy4287/Main2.groovy')
}
@Test
- void testResolvePublicStaticField() {
+ void testResolveStaticImportOfOuterMember3() {
runScript('/groovy/bugs/groovy4386/StaticField.groovy')
}
@Test
- void testResolveStaticProperty() {
+ void testResolveStaticImportOfOuterMember4() {
runScript('/groovy/bugs/groovy4386/StaticProperty.groovy')
}
@Test
- void testResolveStaticMembers() {
+ void testResolveStaticImportOfOuterMember5() {
runScript('/groovy/bugs/groovy4386/StaticStarImport.groovy')
}
@Test
- void testResolveOuterNestedClass() {
+ void testResolveOuterMemberWithoutAnImport() {
runScript('/groovy/bugs/groovy7812/Main.groovy')
}
- @Test @Ignore('exception in script causes problem for build')
- void testUnresolvableInnerClass() {
- try {
- runScript('/groovy/bugs/groovy7812/MainWithErrors.groovy')
- } catch (Throwable t) {
- assert t.getMessage().contains('unable to resolve class Outer.Inner123')
- }
- }
-
@Test
- void testResolvePrecedence() {
+ void testResolvePackagePeerWithoutAnImport() {
runScript('/groovy/bugs/groovy9236/Main.groovy')
}
@Test
- void testResolveNestedClassFromBaseType() {
+ void testResolveOuterMemberWithoutAnImport2() {
runScript('/groovy/bugs/groovy9243/Main.groovy')
}
@Test
- void testTraitSuperFromOverriddenMethod() {
+ void testResolvePackagePeersAndCompileTrait() {
runScript('/groovy/bugs/groovyA144/Main.groovy')
}
}