mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
groovy top level classes cannot have private and protected modifiers
This commit is contained in:
+8
@@ -45,6 +45,8 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.GrStubElementBase;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.stubs.GrModifierListStub;
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.noncode.ConstructorAnnotationsProcessor;
|
||||
|
||||
import static org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifier.*;
|
||||
|
||||
/**
|
||||
* @autor: Dmitry.Krasilschikov
|
||||
* @date: 18.03.2007
|
||||
@@ -170,6 +172,12 @@ public class GrModifierListImpl extends GrStubElementBase<GrModifierListStub> im
|
||||
}
|
||||
}
|
||||
|
||||
//top level classes cannot have private and protected modifiers
|
||||
if (owner instanceof GrTypeDefinition && ((GrTypeDefinition)owner).getContainingClass() == null) {
|
||||
if (modifier.equals(PROTECTED) || modifier.equals(PRIVATE)) return false;
|
||||
if (modifier.equals(PACKAGE_LOCAL)) return modifierList.hasExplicitModifier(PRIVATE) || modifierList.hasExplicitModifier(PROTECTED);
|
||||
}
|
||||
|
||||
if (modifierList.hasExplicitModifier(modifier)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -574,4 +574,18 @@ class A {
|
||||
''')
|
||||
myFixture.checkHighlighting(true, false, false)
|
||||
}
|
||||
|
||||
void testPrivateTopLevelClassInJava() {
|
||||
myFixture.addFileToProject('pack/Foo.groovy', 'package pack; private class Foo{}')
|
||||
myFixture.configureByText('Abc.java', '''\
|
||||
import pack.<error descr="'pack.Foo' is not public in 'pack'. Cannot be accessed from outside package">Foo</error>;
|
||||
|
||||
class Abc {
|
||||
void foo() {
|
||||
System.out.print(new <error descr="'pack.Foo' is not public in 'pack'. Cannot be accessed from outside package">Foo</error>());
|
||||
}
|
||||
}''')
|
||||
|
||||
myFixture.testHighlighting(false, false, false)
|
||||
}
|
||||
}
|
||||
+24
-17
@@ -16,19 +16,17 @@
|
||||
|
||||
package org.jetbrains.plugins.groovy.lang.resolve;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.LightGroovyTestCase;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiReference
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.annotations.Nullable
|
||||
import org.jetbrains.plugins.groovy.LightGroovyTestCase
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression
|
||||
|
||||
/**
|
||||
* @author ven
|
||||
@@ -39,15 +37,15 @@ public abstract class GroovyResolveTestCase extends LightGroovyTestCase {
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
if (new File(myFixture.getTestDataPath() + "/" + getTestName(true)).exists()) {
|
||||
if (new File("$myFixture.testDataPath/${getTestName(true)}").exists()) {
|
||||
myFixture.copyDirectoryToProject(getTestName(true), "");
|
||||
}
|
||||
}
|
||||
|
||||
protected PsiReference configureByFile(@NonNls String filePath, @Nullable String newFilePath) {
|
||||
filePath = StringUtil.trimStart(filePath, getTestName(true) + "/");
|
||||
final VirtualFile vFile = myFixture.getTempDirFixture().getFile(filePath);
|
||||
assertNotNull("file " + filePath + " not found", vFile);
|
||||
final VirtualFile vFile = myFixture.tempDirFixture.getFile(filePath);
|
||||
assertNotNull("file $filePath not found", vFile);
|
||||
|
||||
String fileText;
|
||||
try {
|
||||
@@ -62,13 +60,13 @@ public abstract class GroovyResolveTestCase extends LightGroovyTestCase {
|
||||
fileText = fileText.substring(0, offset) + fileText.substring(offset + MARKER.length());
|
||||
|
||||
if (newFilePath == null) {
|
||||
myFixture.configureByText("aaa." + vFile.getExtension(), fileText);
|
||||
myFixture.configureByText("aaa." + vFile.extension, fileText);
|
||||
}
|
||||
else {
|
||||
myFixture.configureByText(newFilePath, fileText);
|
||||
}
|
||||
|
||||
PsiReference ref = myFixture.getFile().findReferenceAt(offset);
|
||||
PsiReference ref = myFixture.file.findReferenceAt(offset);
|
||||
assertNotNull(ref);
|
||||
return ref;
|
||||
}
|
||||
@@ -77,6 +75,15 @@ public abstract class GroovyResolveTestCase extends LightGroovyTestCase {
|
||||
return configureByFile(filePath, null);
|
||||
}
|
||||
|
||||
protected PsiReference configureByText(String text) {
|
||||
configureByText('a.groovy', text);
|
||||
}
|
||||
|
||||
protected PsiReference configureByText(String fileName, String text) {
|
||||
myFixture.configureByText fileName, text
|
||||
return myFixture.file.findReferenceAt(myFixture.editor.caretModel.offset)
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected PsiElement resolve(String fileName) {
|
||||
PsiReference ref = configureByFile(getTestName(true) + "/" + fileName);
|
||||
+30
-17
@@ -16,15 +16,16 @@
|
||||
|
||||
package org.jetbrains.plugins.groovy.lang.resolve;
|
||||
|
||||
import com.intellij.psi.JavaResolveResult;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiJavaReference;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.impl.light.LightMethodBuilder;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod;
|
||||
import org.jetbrains.plugins.groovy.util.TestUtils;
|
||||
|
||||
import com.intellij.psi.JavaResolveResult
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiJavaReference
|
||||
import com.intellij.psi.PsiReference
|
||||
import com.intellij.psi.impl.light.LightMethodBuilder
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod
|
||||
import org.jetbrains.plugins.groovy.util.TestUtils
|
||||
|
||||
/**
|
||||
* @author ven
|
||||
@@ -32,7 +33,7 @@ import org.jetbrains.plugins.groovy.util.TestUtils;
|
||||
public class JavaToGroovyResolveTest extends GroovyResolveTestCase {
|
||||
@Override
|
||||
protected String getBasePath() {
|
||||
return TestUtils.getTestDataPath() + "resolve/javaToGroovy/";
|
||||
return "${TestUtils.testDataPath}resolve/javaToGroovy/";
|
||||
}
|
||||
|
||||
public void testField1() throws Exception {
|
||||
@@ -50,27 +51,39 @@ public class JavaToGroovyResolveTest extends GroovyResolveTestCase {
|
||||
public void testMethod1() throws Exception {
|
||||
PsiJavaReference ref = (PsiJavaReference) configureByFile("method1/A.java");
|
||||
JavaResolveResult resolveResult = ref.advancedResolve(false);
|
||||
assertTrue(resolveResult.getElement() instanceof GrMethod);
|
||||
assertTrue(resolveResult.isValidResult());
|
||||
assertTrue(resolveResult.element instanceof GrMethod);
|
||||
assertTrue(resolveResult.validResult);
|
||||
}
|
||||
|
||||
public void testScriptMain() throws Exception {
|
||||
PsiJavaReference ref = (PsiJavaReference) configureByFile("scriptMain/A.java");
|
||||
JavaResolveResult resolveResult = ref.advancedResolve(false);
|
||||
assertInstanceOf(resolveResult.getElement(), LightMethodBuilder.class);
|
||||
assertTrue(resolveResult.isValidResult());
|
||||
assertInstanceOf(resolveResult.element, LightMethodBuilder.class);
|
||||
assertTrue(resolveResult.validResult);
|
||||
}
|
||||
|
||||
public void testScriptMethod() throws Exception {
|
||||
PsiJavaReference ref = (PsiJavaReference) configureByFile("scriptMethod/A.java");
|
||||
JavaResolveResult resolveResult = ref.advancedResolve(false);
|
||||
assertTrue(resolveResult.getElement() instanceof GrMethod);
|
||||
assertTrue(resolveResult.isValidResult());
|
||||
assertTrue(resolveResult.element instanceof GrMethod);
|
||||
assertTrue(resolveResult.validResult);
|
||||
}
|
||||
|
||||
public void testNoDGM() throws Exception {
|
||||
PsiJavaReference ref = (PsiJavaReference) configureByFile("noDGM/A.java");
|
||||
assertNull(ref.advancedResolve(false).getElement());
|
||||
assertNull(ref.advancedResolve(false).element);
|
||||
}
|
||||
|
||||
void testPrivateTopLevelClass() {
|
||||
myFixture.addFileToProject('Foo.groovy', 'private class Foo{}')
|
||||
|
||||
def ref = configureByText('A.java', '''
|
||||
class A {
|
||||
void foo() {
|
||||
Object o = new Fo<caret>o();
|
||||
}
|
||||
}''')
|
||||
assertNotNull(ref.resolve())
|
||||
}
|
||||
|
||||
}
|
||||
@@ -299,12 +299,6 @@ public class ResolveMethodTest extends GroovyResolveTestCase {
|
||||
assert ((GrNewExpression) ref.element.parent).advancedResolve().element instanceof PsiMethod
|
||||
}
|
||||
|
||||
private PsiReference configureByText(String text) {
|
||||
myFixture.configureByText 'a.groovy', text
|
||||
def ref = myFixture.file.findReferenceAt(myFixture.editor.caretModel.offset)
|
||||
return ref
|
||||
}
|
||||
|
||||
public void testPartiallyDeclaredType() throws Exception {
|
||||
PsiReference ref = configureByFile("partiallyDeclaredType/A.groovy");
|
||||
PsiElement resolved = ref.resolve();
|
||||
|
||||
-6
@@ -659,12 +659,6 @@ set<caret>Foo(2)
|
||||
assertInstanceOf resolve("A.groovy"), GrAccessorMethod
|
||||
}
|
||||
|
||||
private PsiReference configureByText(String text) {
|
||||
myFixture.configureByText 'a.groovy', text
|
||||
def ref = myFixture.file.findReferenceAt(myFixture.editor.caretModel.offset)
|
||||
return ref
|
||||
}
|
||||
|
||||
public void testJavaLoggingTransform() {
|
||||
myFixture.addClass('package groovy.util.logging; public @interface Log { String value() default ""; }')
|
||||
def ref = configureByText("@groovy.util.logging.Log class Foo { { lo<caret>g.inf } }")
|
||||
|
||||
Reference in New Issue
Block a user