|
20 | 20 | import org.codehaus.groovy.ast.ClassNode;
|
21 | 21 | import org.codehaus.groovy.ast.MethodNode;
|
22 | 22 | import org.codehaus.jdt.groovy.model.GroovyCompilationUnit;
|
| 23 | +import org.eclipse.core.resources.IMarker; |
23 | 24 | import org.eclipse.core.runtime.IPath;
|
24 | 25 | import org.eclipse.jdt.core.ICompilationUnit;
|
25 | 26 | import org.eclipse.jdt.core.compiler.IProblem;
|
26 | 27 | import org.eclipse.jdt.core.groovy.tests.ReconcilerUtils;
|
| 28 | +import org.eclipse.jdt.core.tests.builder.Problem; |
27 | 29 | import org.junit.Assert;
|
28 | 30 | import org.junit.Test;
|
29 | 31 |
|
@@ -141,6 +143,71 @@ public void testReconcilingWithTransforms_compileStatic() throws Exception {
|
141 | 143 | assertContainsProblem(problems, "Cannot find matching method Foo#xxx");
|
142 | 144 | }
|
143 | 145 |
|
| 146 | + @Test // https://issues.apache.org/jira/browse/GROOVY-10075 |
| 147 | + public void testDefaultGroovyMethodFromProjectDependency() throws Exception { |
| 148 | + IPath one = env.addProject("One"); |
| 149 | + env.addGroovyJars(one); |
| 150 | + |
| 151 | + IPath src = env.getPackageFragmentRootPath(one, "src"); |
| 152 | + env.addGroovyClass(src, "p", "X", |
| 153 | + "package p\n" + |
| 154 | + "class X {\n" + |
| 155 | + " static String getString(Iterable<String> self) {\n" + |
| 156 | + " }\n" + |
| 157 | + " static <CS extends CharSequence> CharSequence getSequence(Iterable<CS> self) {\n" + |
| 158 | + " }\n" + |
| 159 | + "}\n"); |
| 160 | + env.addFile(env.addFolder(src, "META-INF/groovy"), "org.codehaus.groovy.runtime.ExtensionModule", |
| 161 | + "moduleName=ecks\n" + |
| 162 | + "moduleVersion=1.0\n" + |
| 163 | + "extensionClasses=p.X\n"); |
| 164 | + |
| 165 | + env.fullBuild(one); |
| 166 | + expectingNoProblemsFor(one); |
| 167 | + |
| 168 | + // |
| 169 | + |
| 170 | + IPath two = env.addProject("Two"); |
| 171 | + env.addGroovyJars(two); |
| 172 | + env.addRequiredTestProject(two, one); |
| 173 | + src = env.getPackageFragmentRootPath(two, "src"); |
| 174 | + |
| 175 | + IPath bar = env.addGroovyClass(src, "foo", "Bar", |
| 176 | + "package foo\n" + |
| 177 | + "class Bar {\n" + |
| 178 | + " @groovy.transform.TypeChecked\n" + |
| 179 | + " void test() {\n" + |
| 180 | + " List<String> strings = []\n" + |
| 181 | + " strings.getSequence()\n" + |
| 182 | + " strings.getString()\n" + |
| 183 | + " strings.sequence\n" + |
| 184 | + " strings.string\n" + |
| 185 | + " }\n" + |
| 186 | + "}\n"); |
| 187 | + |
| 188 | + IPath baz = env.addGroovyClass(src, "foo", "Baz", |
| 189 | + "package foo\n" + |
| 190 | + "class Baz {\n" + |
| 191 | + " @groovy.transform.TypeChecked\n" + |
| 192 | + " void test() {\n" + |
| 193 | + " List<Number> numbers = []\n" + |
| 194 | + " numbers.getSequence()\n" + |
| 195 | + " numbers.getString()\n" + |
| 196 | + " numbers.sequence\n" + |
| 197 | + " numbers.string\n" + |
| 198 | + " }\n" + |
| 199 | + "}\n"); |
| 200 | + |
| 201 | + env.fullBuild(two); |
| 202 | + expectingNoProblemsFor(bar); |
| 203 | + expectingSpecificProblemsFor(baz, new Problem[] { |
| 204 | + new Problem("foo/Baz", "Groovy:[Static type checking] - Cannot call <CS extends java.lang.CharSequence> java.util.ArrayList#getSequence() with arguments []", baz, 106, 127, 60, IMarker.SEVERITY_ERROR), |
| 205 | + new Problem("foo/Baz", "Groovy:[Static type checking] - Cannot call java.util.ArrayList#getString() with arguments []", baz, 132, 151, 60, IMarker.SEVERITY_ERROR), |
| 206 | + new Problem("foo/Baz", "Groovy:[Static type checking] - No such property: sequence for class: java.util.ArrayList", baz, 156, 172, 60, IMarker.SEVERITY_ERROR), |
| 207 | + new Problem("foo/Baz", "Groovy:[Static type checking] - No such property: string for class: java.util.ArrayList", baz, 177, 191, 60, IMarker.SEVERITY_ERROR), |
| 208 | + }); |
| 209 | + } |
| 210 | + |
144 | 211 | @Test // https://github.com/groovy/groovy-eclipse/issues/903
|
145 | 212 | public void testGlobalTransformationFromTestBuildPathEntry() throws Exception {
|
146 | 213 | IPath one = env.addProject("One");
|
|
0 commit comments