From 6594cb2fe41a0cf0c30b5c7606f013b2f63543c0 Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Fri, 15 Apr 2011 15:28:10 +0400 Subject: [PATCH] skip dummy file in resolve --- .../lang/psi/GroovyPsiElementFactory.java | 2 +- .../psi/impl/GroovyPsiElementFactoryImpl.java | 2 +- .../GrThisReferenceExpressionImpl.java | 26 ++++++++++++------- 3 files changed, 19 insertions(+), 11 deletions(-) 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 1b1e5d39e216..0f0b209d4511 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 @@ -56,7 +56,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; */ public abstract class GroovyPsiElementFactory { - @NonNls public static final String DUMMY_FILE_NAME = "DUMMY__."; + @NonNls public static final String DUMMY_FILE_NAME = "DUMMY__"; public static GroovyPsiElementFactory getInstance(Project project) { return ServiceManager.getService(project, GroovyPsiElementFactory.class); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java index 8b7aaf8e3b14..84e48f951fc8 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java @@ -259,7 +259,7 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { } private GroovyFileImpl createDummyFile(String text, boolean physical) { - final String fileName = DUMMY_FILE_NAME + GroovyFileType.GROOVY_FILE_TYPE.getDefaultExtension(); + final String fileName = DUMMY_FILE_NAME + '.' + GroovyFileType.GROOVY_FILE_TYPE.getDefaultExtension(); final long stamp = System.currentTimeMillis(); final PsiFileFactory factory = PsiFileFactory.getInstance(myProject); return (GroovyFileImpl) factory.createFileFromText(fileName, GroovyFileType.GROOVY_FILE_TYPE, text, stamp, physical); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrThisReferenceExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrThisReferenceExpressionImpl.java index a02960a6f9f2..1ffe4899cb58 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrThisReferenceExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrThisReferenceExpressionImpl.java @@ -2,6 +2,7 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions; import com.intellij.lang.ASTNode; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; @@ -34,10 +35,7 @@ public class GrThisReferenceExpressionImpl extends GrThisSuperReferenceExpressio public PsiType getType() { final GrReferenceExpression qualifier = getQualifier(); if (qualifier == null) { - GroovyPsiElement context = PsiTreeUtil.getContextOfType(this, GrTypeDefinition.class, GroovyFile.class); - if (context instanceof GroovyFile && GroovyPsiElementFactory.DUMMY_FILE_NAME.equals(((GroovyFile)context).getName())) { - context = PsiTreeUtil.getContextOfType(context, true, GrTypeDefinition.class, GroovyFile.class); - } + GroovyPsiElement context = getFileContext(); if (context instanceof GrTypeDefinition) { return createType((PsiClass)context); } @@ -63,6 +61,15 @@ public class GrThisReferenceExpressionImpl extends GrThisSuperReferenceExpressio return null; } + private GroovyPsiElement getFileContext() { + GroovyPsiElement context = PsiTreeUtil.getContextOfType(this, GrTypeDefinition.class, GroovyFile.class); + if (context instanceof GroovyFile && GroovyPsiElementFactory.DUMMY_FILE_NAME.equals(FileUtil.getNameWithoutExtension( + ((GroovyFile)context).getName()))) { + context = PsiTreeUtil.getContextOfType(context, true, GrTypeDefinition.class, GroovyFile.class); + } + return context; + } + private PsiType createType(PsiClass context) { PsiElementFactory elementFactory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); if (PsiUtil.isInStaticContext(this)) { @@ -87,11 +94,12 @@ public class GrThisReferenceExpressionImpl extends GrThisSuperReferenceExpressio return qualifier.resolve(); } - final GrTypeDefinition containingClass = PsiTreeUtil.getContextOfType(this, GrTypeDefinition.class, true, GroovyFile.class); - if (containingClass != null) return containingClass; - final PsiFile containingFile = getContainingFile(); - if (containingFile instanceof GroovyFile) { - return ((GroovyFile)containingFile).getScriptClass(); + final GroovyPsiElement context = getFileContext(); + if (context instanceof GrTypeDefinition) { + return context; + } + else if (context instanceof GroovyFile) { + return ((GroovyFile)context).getScriptClass(); } return null; }