Code moved to IDEA core
This commit is contained in:
Generated
+1
-1
@@ -32,4 +32,4 @@
|
|||||||
</element>
|
</element>
|
||||||
</root>
|
</root>
|
||||||
</artifact>
|
</artifact>
|
||||||
</component>
|
</component>
|
||||||
+3
-65
@@ -3,12 +3,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.jet.lang.resolve.java.alt;
|
package org.jetbrains.jet.lang.resolve.java.alt;
|
||||||
|
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.core.CoreJavaFileManager;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import com.intellij.psi.PsiClassOwner;
|
|
||||||
import com.intellij.psi.PsiFile;
|
|
||||||
import com.intellij.psi.PsiManager;
|
import com.intellij.psi.PsiManager;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.plugin.compiler.PathUtil;
|
import org.jetbrains.jet.plugin.compiler.PathUtil;
|
||||||
@@ -16,8 +14,6 @@ import org.jetbrains.jet.plugin.compiler.PathUtil;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AltClassFinder {
|
public class AltClassFinder {
|
||||||
private static final Logger LOG = Logger.getInstance("#org.jetbrains.jet.lang.resolve.java.alt.AltClassFinder");
|
|
||||||
|
|
||||||
private final PsiManager psiManager;
|
private final PsiManager psiManager;
|
||||||
private final List<VirtualFile> roots;
|
private final List<VirtualFile> roots;
|
||||||
|
|
||||||
@@ -29,66 +25,8 @@ public class AltClassFinder {
|
|||||||
|
|
||||||
public PsiClass findClass(@NotNull String qualifiedName) {
|
public PsiClass findClass(@NotNull String qualifiedName) {
|
||||||
for (final VirtualFile classRoot : roots) {
|
for (final VirtualFile classRoot : roots) {
|
||||||
|
PsiClass answer = CoreJavaFileManager.findClassInClasspathRoot(qualifiedName, classRoot, psiManager);
|
||||||
String pathRest = qualifiedName;
|
if (answer != null) return answer;
|
||||||
VirtualFile cur = classRoot;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
int dot = pathRest.indexOf('.');
|
|
||||||
if (dot < 0) break;
|
|
||||||
|
|
||||||
String pathComponent = pathRest.substring(0, dot);
|
|
||||||
VirtualFile child = cur.findChild(pathComponent);
|
|
||||||
|
|
||||||
if (child == null) break;
|
|
||||||
pathRest = pathRest.substring(dot + 1);
|
|
||||||
cur = child;
|
|
||||||
}
|
|
||||||
|
|
||||||
String className = pathRest.replace('.', '$');
|
|
||||||
int bucks = className.indexOf('$');
|
|
||||||
|
|
||||||
String rootClassName;
|
|
||||||
if (bucks < 0) {
|
|
||||||
rootClassName = className;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rootClassName = className.substring(0, bucks);
|
|
||||||
className = className.substring(bucks + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
final VirtualFile classFile = cur.findChild(rootClassName + ".class");
|
|
||||||
if (classFile != null) {
|
|
||||||
if (!classFile.isValid()) {
|
|
||||||
LOG.error("Invalid child of valid parent: " + classFile.getPath() + "; " + classRoot.isValid() + " path=" + classRoot.getPath());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
final PsiFile file = psiManager.findFile(classFile);
|
|
||||||
if (file instanceof PsiClassOwner) {
|
|
||||||
final PsiClass[] classes = ((PsiClassOwner) file).getClasses();
|
|
||||||
if (classes.length == 1) {
|
|
||||||
PsiClass curClass = classes[0];
|
|
||||||
|
|
||||||
if (bucks > 0) {
|
|
||||||
while (true) {
|
|
||||||
int b = className.indexOf("$");
|
|
||||||
|
|
||||||
String component = b < 0 ? className : className.substring(0, b);
|
|
||||||
PsiClass inner = curClass.findInnerClassByName(component, false);
|
|
||||||
|
|
||||||
if (inner == null) return null;
|
|
||||||
curClass = inner;
|
|
||||||
className = className.substring(b + 1);
|
|
||||||
if (b < 0) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return curClass;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user