StackOverlowes fixed with FQNames remembered in trace

This commit is contained in:
Andrey Breslav
2011-12-09 13:51:44 +04:00
parent 4d303b0225
commit 744253bcd3
16 changed files with 114 additions and 88 deletions
-2
View File
@@ -59,9 +59,7 @@
<codeInsight.overrideMethod language="jet" implementationClass="org.jetbrains.jet.plugin.codeInsight.OverrideMethodsHandler"/>
<!--
<java.elementFinder implementation="org.jetbrains.jet.plugin.java.JavaElementFinder"/>
-->
<toolWindow id="CodeWindow"
factoryClass="org.jetbrains.jet.plugin.internal.codewindow.BytecodeToolwindow$Factory"
anchor="right"/>
@@ -17,7 +17,6 @@ import com.sun.jdi.ReferenceType;
import com.sun.jdi.request.ClassPrepareRequest;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.codegen.CodegenUtil;
import org.jetbrains.jet.codegen.GenerationState;
import org.jetbrains.jet.codegen.JetTypeMapper;
import org.jetbrains.jet.codegen.NamespaceCodegen;
@@ -113,10 +112,10 @@ public class JetPositionManager implements PositionManager {
else {
JetNamespace namespace = PsiTreeUtil.getParentOfType(sourcePosition.getElementAt(), JetNamespace.class);
if (namespace != null) {
names.add(NamespaceCodegen.getJVMClassName(CodegenUtil.getFQName(namespace)));
names.add(NamespaceCodegen.getJVMClassName(JetPsiUtil.getFQName(namespace)));
}
else {
names.add(NamespaceCodegen.getJVMClassName(CodegenUtil.getFQName(file.getRootNamespace())));
names.add(NamespaceCodegen.getJVMClassName(JetPsiUtil.getFQName(file.getRootNamespace())));
}
}
return names;
@@ -15,11 +15,7 @@ import com.intellij.psi.impl.file.PsiPackageImpl;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.SmartList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.codegen.CodegenUtil;
import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.lang.psi.JetDeclaration;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetNamespace;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.plugin.JetFileType;
import java.util.ArrayList;
@@ -52,7 +48,7 @@ public class JavaElementFinder extends PsiElementFinder {
final List<JetFile> filesInScope = collectProjectFiles(project, scope);
for (JetFile file : filesInScope) {
JetNamespace rootNamespace = file.getRootNamespace();
final String packageName = CodegenUtil.getFQName(rootNamespace);
final String packageName = JetPsiUtil.getFQName(rootNamespace);
if (packageName != null && qualifiedName.startsWith(packageName)) {
if (qualifiedName.equals(fqn(packageName, "namespace"))) {
answer.add(new JetLightClass(psiManager, file, "namespace"));
@@ -77,7 +73,7 @@ public class JavaElementFinder extends PsiElementFinder {
String packageFQN = psiPackage.getQualifiedName();
for (JetFile psiFile : collectProjectFiles(project, GlobalSearchScope.allScope(project))) {
final JetNamespace rootNamespace = psiFile.getRootNamespace();
if (packageFQN.equals(CodegenUtil.getFQName(rootNamespace))) {
if (packageFQN.equals(JetPsiUtil.getFQName(rootNamespace))) {
answer.add("namespace");
for (JetDeclaration declaration : rootNamespace.getDeclarations()) {
if (declaration instanceof JetClassOrObject) {
@@ -100,7 +96,7 @@ public class JavaElementFinder extends PsiElementFinder {
final List<JetFile> psiFiles = collectProjectFiles(project, GlobalSearchScope.allScope(project));
for (JetFile psiFile : psiFiles) {
if (qualifiedName.equals(CodegenUtil.getFQName(psiFile.getRootNamespace()))) {
if (qualifiedName.equals(JetPsiUtil.getFQName(psiFile.getRootNamespace()))) {
return new PsiPackageImpl(psiFile.getManager(), qualifiedName);
}
}
@@ -116,7 +112,7 @@ public class JavaElementFinder extends PsiElementFinder {
String packageFQN = psiPackage.getQualifiedName();
for (JetFile file : filesInScope) {
final JetNamespace rootNamespace = file.getRootNamespace();
if (packageFQN.equals(CodegenUtil.getFQName(rootNamespace))) {
if (packageFQN.equals(JetPsiUtil.getFQName(rootNamespace))) {
answer.add(new JetLightClass(psiManager, file, "namespace"));
for (JetDeclaration declaration : rootNamespace.getDeclarations()) {
if (declaration instanceof JetClassOrObject) {
@@ -19,10 +19,10 @@ import com.intellij.util.containers.Stack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.codegen.ClassBuilder;
import org.jetbrains.jet.codegen.ClassBuilderFactory;
import org.jetbrains.jet.codegen.CodegenUtil;
import org.jetbrains.jet.codegen.GenerationState;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetNamespace;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacade;
import org.jetbrains.jet.lang.resolve.java.JetJavaMirrorMarker;
@@ -75,8 +75,13 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa
return null;
}
@Override
public String getQualifiedName() {
String fqName = JetPsiUtil.getFQName(file.getRootNamespace());
return fqName.length() == 0 ? className : fqName + "." + className;
}
private PsiJavaFileStub getStub() {
PsiJavaFileStub answer = file.getUserData(JAVA_API_STUB);
if (answer == null) {
@@ -88,7 +93,7 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa
}
private PsiJavaFileStub calcStub() {
final PsiJavaFileStubImpl answer = new PsiJavaFileStubImpl(CodegenUtil.getFQName(file.getRootNamespace()), true);
final PsiJavaFileStubImpl answer = new PsiJavaFileStubImpl(JetPsiUtil.getFQName(file.getRootNamespace()), true);
final Project project = getProject();
final Stack<StubElement> stubStack = new Stack<StubElement>();
@@ -148,5 +153,5 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa
return answer;
}
}
@@ -8,10 +8,10 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import org.jetbrains.jet.codegen.CodegenUtil;
import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetNamespace;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.plugin.JetMainDetector;
/**
@@ -34,14 +34,14 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
JetClass containingClass = (JetClass) location.getParentElement(JetClass.class);
if (containingClass != null && JetMainDetector.hasMain(containingClass.getDeclarations())) {
mySourceElement = containingClass;
return createConfigurationByQName(location.getModule(), configurationContext, CodegenUtil.getFQName(containingClass));
return createConfigurationByQName(location.getModule(), configurationContext, JetPsiUtil.getFQName(containingClass));
}
PsiFile psiFile = location.getPsiElement().getContainingFile();
if (psiFile instanceof JetFile) {
JetNamespace namespace = ((JetFile) psiFile).getRootNamespace();
if (JetMainDetector.hasMain(namespace.getDeclarations())) {
mySourceElement = namespace;
String fqName = CodegenUtil.getFQName(namespace);
String fqName = JetPsiUtil.getFQName(namespace);
String className = fqName.length() == 0 ? "namespace" : fqName + ".namespace";
return createConfigurationByQName(location.getModule(), configurationContext, className);
}