diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/file/impl/JavaOutOfSourcesResolveScopeProvider.java b/java/java-indexing-impl/src/com/intellij/psi/impl/file/impl/JavaOutOfSourcesResolveScopeProvider.java
new file mode 100644
index 000000000000..a3e9e87f3a4c
--- /dev/null
+++ b/java/java-indexing-impl/src/com/intellij/psi/impl/file/impl/JavaOutOfSourcesResolveScopeProvider.java
@@ -0,0 +1,49 @@
+/*
+ * 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 com.intellij.psi.impl.file.impl;
+
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.openapi.fileTypes.FileType;
+import com.intellij.openapi.fileTypes.LanguageFileType;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.ProjectFileIndex;
+import com.intellij.openapi.roots.ProjectRootManager;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.ResolveScopeProvider;
+import com.intellij.psi.search.GlobalSearchScope;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Limited resolve scope for all java files in module content, but not under source roots.
+ * For example, java files from test data.
+ * There is still a possibility to modify this scope choice with the ResolveScopeEnlarger.
+ */
+public class JavaOutOfSourcesResolveScopeProvider extends ResolveScopeProvider {
+ @Nullable
+ @Override
+ public GlobalSearchScope getResolveScope(@NotNull VirtualFile file, Project project) {
+ // For java only! For other languages resolve may be implemented with different rules, requiring larger scope.
+ final FileType type = file.getFileType();
+ if (type instanceof LanguageFileType && ((LanguageFileType)type).getLanguage() == JavaLanguage.INSTANCE) {
+ ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
+ if (index.isInContent(file) && !index.isInSource(file)) {
+ return GlobalSearchScope.fileScope(project, file);
+ }
+ }
+ return null;
+ }
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaFileImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaFileImpl.java
index e56f53cbfbdf..97b43b4db570 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaFileImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaFileImpl.java
@@ -16,14 +16,9 @@
package com.intellij.psi.impl.source;
import com.intellij.ide.highlighter.JavaFileType;
-import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.fileTypes.FileType;
-import com.intellij.openapi.roots.FileIndexFacade;
-import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.impl.java.stubs.JavaStubElementTypes;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.testFramework.LightVirtualFile;
import org.jetbrains.annotations.NotNull;
public class PsiJavaFileImpl extends PsiJavaFileBaseImpl {
@@ -31,19 +26,6 @@ public class PsiJavaFileImpl extends PsiJavaFileBaseImpl {
super(JavaStubElementTypes.JAVA_FILE, JavaStubElementTypes.JAVA_FILE, file);
}
- @NotNull
- @Override
- public GlobalSearchScope getResolveScope() {
- final VirtualFile file = getVirtualFile();
- if (file != null && !(file instanceof LightVirtualFile)) {
- final FileIndexFacade index = ServiceManager.getService(getProject(), FileIndexFacade.class);
- if (!index.isInSource(file) && !index.isInLibraryClasses(file)) {
- return GlobalSearchScope.fileScope(this);
- }
- }
- return super.getResolveScope();
- }
-
@Override
@NotNull
public FileType getFileType() {
diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml
index dc491169370d..f4ee697a1045 100644
--- a/resources/src/META-INF/IdeaPlugin.xml
+++ b/resources/src/META-INF/IdeaPlugin.xml
@@ -1548,6 +1548,7 @@
+