mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
gradle: IDEA-129535 IDEA marks all classes inside buildSrc with "Class <name> already exists in <package>"
This commit is contained in:
@@ -19,8 +19,12 @@ package org.jetbrains.plugins.gradle.config;
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.openapi.externalSystem.psi.search.ExternalModuleBuildGlobalSearchScope;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.NonClasspathClassFinder;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.EverythingGlobalScope;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -61,4 +65,16 @@ public class GradleClassFinder extends NonClasspathClassFinder {
|
||||
}
|
||||
return myBuildClasspathManager.getAllClasspathEntries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiClass findClass(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) {
|
||||
PsiClass aClass = super.findClass(qualifiedName, scope);
|
||||
if (aClass == null || scope instanceof ExternalModuleBuildGlobalSearchScope || scope instanceof EverythingGlobalScope) {
|
||||
return aClass;
|
||||
}
|
||||
|
||||
PsiFile containingFile = aClass.getContainingFile();
|
||||
VirtualFile file = containingFile != null ? containingFile.getVirtualFile() : null;
|
||||
return (file != null && !ProjectFileIndex.SERVICE.getInstance(myProject).isInContent(file)) ? aClass : null;
|
||||
}
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed 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 org.jetbrains.plugins.gradle.importing;
|
||||
|
||||
import com.intellij.openapi.application.AccessToken;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.psi.JavaPsiFacade;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.junit.Test;
|
||||
import org.junit.runners.Parameterized;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author Vladislav.Soroka
|
||||
* @since 6/30/2014
|
||||
*/
|
||||
@SuppressWarnings("JUnit4AnnotatedMethodInJUnit3TestCase")
|
||||
public class GradleClassFinderTest extends GradleImportingTestCase {
|
||||
|
||||
/**
|
||||
* It's sufficient to run the test against one gradle version
|
||||
*/
|
||||
@SuppressWarnings("MethodOverridesStaticMethodOfSuperclass")
|
||||
@Parameterized.Parameters(name = "with Gradle-{0}")
|
||||
public static Collection<Object[]> data() throws Throwable {
|
||||
return Arrays.asList(new Object[][]{{BASE_GRADLE_VERSION}});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClassesFilter() throws Exception {
|
||||
createProjectSubFile("settings.gradle", "rootProject.name = 'multiproject'\n" +
|
||||
"include ':app'");
|
||||
|
||||
// app module files
|
||||
createProjectSubFile("app/src/main/groovy/App.groovy", "class App {}");
|
||||
// buildSrc module files
|
||||
createProjectSubFile("buildSrc/src/main/groovy/org/buildsrc/BuildSrcClass.groovy", "package org.buildsrc;\n" +
|
||||
"import groovy.util.AntBuilder;\n" +
|
||||
"public class BuildSrcClass {}");
|
||||
importProject("subprojects {\n" +
|
||||
" apply plugin: 'groovy'\n" +
|
||||
"}");
|
||||
assertModules("multiproject", "app", "buildSrc");
|
||||
Module buildSrcModule = getModule("buildSrc");
|
||||
assertNotNull(buildSrcModule);
|
||||
final AccessToken accessToken = ReadAction.start();
|
||||
try {
|
||||
PsiClass[] appClasses = JavaPsiFacade.getInstance(myProject).findClasses("App", GlobalSearchScope.allScope(myProject));
|
||||
assertEquals(1, appClasses.length);
|
||||
|
||||
PsiClass[] buildSrcClasses =
|
||||
JavaPsiFacade.getInstance(myProject).findClasses("org.buildsrc.BuildSrcClass", GlobalSearchScope.moduleScope(buildSrcModule));
|
||||
assertEquals(1, buildSrcClasses.length);
|
||||
}
|
||||
finally {
|
||||
accessToken.finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
@@ -47,6 +47,7 @@ import org.jetbrains.plugins.gradle.VersionMatcherRule;
|
||||
import org.jetbrains.plugins.gradle.settings.DistributionType;
|
||||
import org.jetbrains.plugins.gradle.settings.GradleProjectSettings;
|
||||
import org.jetbrains.plugins.gradle.settings.GradleSettings;
|
||||
import org.jetbrains.plugins.gradle.tooling.builder.AbstractModelBuilderTest;
|
||||
import org.jetbrains.plugins.gradle.util.GradleConstants;
|
||||
import org.junit.Rule;
|
||||
import org.junit.rules.TestName;
|
||||
@@ -73,6 +74,7 @@ import static org.junit.Assume.assumeThat;
|
||||
*/
|
||||
@RunWith(value = Parameterized.class)
|
||||
public abstract class GradleImportingTestCase extends ExternalSystemImportingTestCase {
|
||||
public static final String BASE_GRADLE_VERSION = AbstractModelBuilderTest.BASE_GRADLE_VERSION;
|
||||
private static final String GRADLE_JDK_NAME = "Gradle JDK";
|
||||
private static final int GRADLE_DAEMON_TTL_MS = 10000;
|
||||
|
||||
|
||||
+1
@@ -68,6 +68,7 @@ public abstract class AbstractModelBuilderTest {
|
||||
{"1.9"}, {"1.10"}, {"1.11"}, {"1.12"},
|
||||
{"2.0"}, {"2.1"}, {"2.2"} , {"2.3"}
|
||||
};
|
||||
public static final String BASE_GRADLE_VERSION = String.valueOf(SUPPORTED_GRADLE_VERSIONS[SUPPORTED_GRADLE_VERSIONS.length - 1][0]);
|
||||
|
||||
public static final Pattern TEST_METHOD_NAME_PATTERN = Pattern.compile("(.*)\\[(\\d*: with Gradle-.*)\\]");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user