From 59623663414f60b6aa18799f4cd7a62d87b87b1e Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 30 Jan 2010 22:05:28 +0000 Subject: [PATCH] call accessible super constructor from groovy stub & compiler tests together --- .../compiler/generator/GroovyToJavaGenerator.java | 9 ++- .../generator => compiler}/GeneratorTest.java | 3 +- .../{lang => compiler}/GroovyCompilerTest.groovy | 6 +- .../{lang => compiler}/GroovyCompilerTestCase.java | 2 +- .../stubGenerator/inaccessibleConstructor.test | 72 ++++++++++++++++++++++ 5 files changed, 85 insertions(+), 7 deletions(-) rename plugins/groovy/test/org/jetbrains/plugins/groovy/{lang/generator => compiler}/GeneratorTest.java (97%) rename plugins/groovy/test/org/jetbrains/plugins/groovy/{lang => compiler}/GroovyCompilerTest.groovy (98%) rename plugins/groovy/test/org/jetbrains/plugins/groovy/{lang => compiler}/GroovyCompilerTestCase.java (99%) create mode 100644 plugins/groovy/testdata/groovy/stubGenerator/inaccessibleConstructor.test diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java index e0ab765057..d24e5dcfe2 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java @@ -574,8 +574,13 @@ public class GroovyToJavaGenerator { final GroovyResolveResult[] results = constructorInvocation.multiResolveConstructor(); if (results.length > 0) { int i = 0; - if (results[i].getElement() == constructor && results.length > 1) { - i = 1; + while (results.length > i+1) { + final PsiMethod candidate = (PsiMethod)results[i].getElement(); + final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(constructor.getProject()).getResolveHelper(); + if (candidate != null && candidate != constructor && resolveHelper.isAccessible(candidate, constructorInvocation, null)) { + break; + } + i++; } chainedConstructor = (PsiMethod) results[i].getElement(); substitutor = results[i].getSubstitutor(); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/generator/GeneratorTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GeneratorTest.java similarity index 97% rename from plugins/groovy/test/org/jetbrains/plugins/groovy/lang/generator/GeneratorTest.java rename to plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GeneratorTest.java index 4d0a379bc7..d4cec2cf55 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/generator/GeneratorTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GeneratorTest.java @@ -1,4 +1,4 @@ -package org.jetbrains.plugins.groovy.lang.generator; +package org.jetbrains.plugins.groovy.compiler; import com.intellij.openapi.compiler.CompileContext; import com.intellij.openapi.module.Module; @@ -59,6 +59,7 @@ public void testArrayType1() throws Throwable { doTest(); } public void testToGenerate() throws Throwable { doTest(); } public void testToGenerate1() throws Throwable { doTest(); } public void testVararg1() throws Throwable { doTest(); } + public void testInaccessibleConstructor() throws Throwable { doTest(); } @Override protected void tuneFixture(JavaModuleFixtureBuilder moduleBuilder) { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyCompilerTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTest.groovy similarity index 98% rename from plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyCompilerTest.groovy rename to plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTest.groovy index 391947f56a..8e0dcb284b 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyCompilerTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTest.groovy @@ -14,11 +14,11 @@ * limitations under the License. */ -package org.jetbrains.plugins.groovy.lang; +package org.jetbrains.plugins.groovy.compiler; import com.intellij.compiler.CompilerConfiguration; -import com.intellij.openapi.application.Result; -import com.intellij.openapi.command.WriteCommandAction; + + import com.intellij.openapi.module.Module; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyCompilerTestCase.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java similarity index 99% rename from plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyCompilerTestCase.java rename to plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java index 8e06fa9b6b..32e7386840 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyCompilerTestCase.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java @@ -1,4 +1,4 @@ -package org.jetbrains.plugins.groovy.lang; +package org.jetbrains.plugins.groovy.compiler; import com.intellij.compiler.CompilerManagerImpl; import com.intellij.execution.ExecutionException; diff --git a/plugins/groovy/testdata/groovy/stubGenerator/inaccessibleConstructor.test b/plugins/groovy/testdata/groovy/stubGenerator/inaccessibleConstructor.test new file mode 100644 index 0000000000..d0b75c5606 --- /dev/null +++ b/plugins/groovy/testdata/groovy/stubGenerator/inaccessibleConstructor.test @@ -0,0 +1,72 @@ +class Foo { + private Foo(Void v, Foo p) {} + protected Foo(Foo p) {} + protected Foo() {} +} + +class ExtensionLoader extends Foo { + ExtensionLoader(parent) { + super(parent); + } +} +----- +public class Foo implements groovy.lang.GroovyObject { + public Foo(java.lang.Void v, Foo p) { + + } + + public Foo(Foo p) { + + } + + public Foo() { + + } + + public groovy.lang.MetaClass getMetaClass() { + return null; + } + + public void setMetaClass(groovy.lang.MetaClass mc) { + return ; + } + + public java.lang.Object invokeMethod(java.lang.String name, java.lang.Object args) { + return null; + } + + public java.lang.Object getProperty(java.lang.String propertyName) { + return null; + } + + public void setProperty(java.lang.String propertyName, java.lang.Object newValue) { + return ; + } +} +--- +public class ExtensionLoader extends Foo implements groovy.lang.GroovyObject { + public ExtensionLoader(java.lang.Object parent) { + super((Foo)null); + } + + public groovy.lang.MetaClass getMetaClass() { + return null; + } + + public void setMetaClass(groovy.lang.MetaClass mc) { + return ; + } + + public java.lang.Object invokeMethod(java.lang.String name, java.lang.Object args) { + return null; + } + + public java.lang.Object getProperty(java.lang.String propertyName) { + return null; + } + + public void setProperty(java.lang.String propertyName, java.lang.Object newValue) { + return ; + } +} +--- \ No newline at end of file -- 2.11.4.GIT