skip temp classes in resolve

This commit is contained in:
Maxim.Medvedev
2012-06-01 12:51:10 +04:00
parent 1376176e46
commit f945ba6c99
3 changed files with 12 additions and 10 deletions
@@ -54,7 +54,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
*/
public abstract class GroovyPsiElementFactory implements JVMElementFactory {
@NonNls public static final String DUMMY_FILE_NAME = "DUMMY__";
@NonNls public static final String DUMMY_FILE_NAME = "DUMMY__1234567890_DUMMYYYYYY___";
public abstract GrCodeReferenceElement createCodeReferenceElementFromClass(PsiClass aClass);
@@ -18,7 +18,6 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.statements;
import com.intellij.lang.ASTNode;
import com.intellij.psi.*;
import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.TypeConversionUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -28,7 +27,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrConstructorInvocation;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrThisSuperReferenceExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyResolveResultImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrCallImpl;
@@ -78,7 +76,7 @@ public class GrConstructorInvocationImpl extends GrCallImpl implements GrConstru
if (isThisCall()) {
substitutor = PsiSubstitutor.EMPTY;
} else {
GrTypeDefinition enclosing = getEnclosingClass();
PsiClass enclosing = PsiUtil.getContextClass(this);
assert enclosing != null;
substitutor = TypeConversionUtil.getSuperClassSubstitutor(clazz, enclosing, PsiSubstitutor.EMPTY);
}
@@ -110,17 +108,13 @@ public class GrConstructorInvocationImpl extends GrCallImpl implements GrConstru
@Nullable
public PsiClass getDelegatedClass() {
GrTypeDefinition typeDefinition = getEnclosingClass();
PsiClass typeDefinition = PsiUtil.getContextClass(this);
if (typeDefinition != null) {
return isThisCall() ? typeDefinition : typeDefinition.getSuperClass();
}
return null;
}
private GrTypeDefinition getEnclosingClass() {
return PsiTreeUtil.getParentOfType(this, GrTypeDefinition.class);
}
@NotNull
public String getCanonicalText() {
return getText(); //TODO
@@ -570,7 +570,7 @@ public class PsiUtil {
@Nullable
public static PsiClass getContextClass(PsiElement context) {
while (context != null) {
if (context instanceof PsiClass) {
if (context instanceof PsiClass && !isInDummyFile(context)) {
return (PsiClass)context;
}
else if (context instanceof GroovyFileBase && context.isPhysical()) {
@@ -582,6 +582,14 @@ public class PsiUtil {
return null;
}
private static boolean isInDummyFile(PsiElement context) {
PsiFile file = context.getContainingFile();
if (file == null) return false;
String name = file.getName();
return name.startsWith(GroovyPsiElementFactory.DUMMY_FILE_NAME);
}
@Nullable
public static GroovyPsiElement getFileOrClassContext(PsiElement context) {
while (context != null) {