diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java index eb0128dacecb..4c9e7f7037c8 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java @@ -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); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/GrConstructorInvocationImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/GrConstructorInvocationImpl.java index e6c630bef390..be38a735e959 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/GrConstructorInvocationImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/GrConstructorInvocationImpl.java @@ -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 diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java index 1c920224e894..7f5c771938c8 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java @@ -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) {