From 9957b389d350f70522430a73053f15619b724c2f Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Fri, 12 Feb 2010 16:56:29 +0300 Subject: [PATCH] IDEA-52183: If groovy library added to a project 'Method getMetaClass is not implemented' error will be shown for existing Groovy classes --- .../jetbrains/plugins/groovy/annotator/GroovyAnnotator.java | 13 +++++++------ .../plugins/groovy/lang/psi/util/GrClassImplUtil.java | 4 +--- .../overrideImplement/GroovyOverrideImplementUtil.java | 13 +++++++++---- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java index 3cc2645bff..35707bf19c 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java @@ -16,7 +16,6 @@ package org.jetbrains.plugins.groovy.annotator; -import com.intellij.codeInsight.ClassUtil; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.lang.ASTNode; import com.intellij.lang.annotation.Annotation; @@ -27,6 +26,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; import gnu.trove.TObjectHashingStrategy; @@ -76,6 +76,7 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; import org.jetbrains.plugins.groovy.lang.resolve.processors.PropertyResolverProcessor; +import org.jetbrains.plugins.groovy.overrideImplement.GroovyOverrideImplementUtil; import org.jetbrains.plugins.groovy.overrideImplement.quickFix.ImplementMethodsQuickFix; import java.util.*; @@ -644,12 +645,12 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator { if (typeDefinition.isEnum() || typeDefinition.isAnnotationType()) return; if (typeDefinition instanceof GrTypeParameter) return; - Collection allMethods = typeDefinition.getVisibleSignatures(); - PsiMethod abstractMethod = ClassUtil.getAnyAbstractMethod(typeDefinition, allMethods); + Collection collection = GroovyOverrideImplementUtil.getMethodsToImplement(typeDefinition); + if (collection.isEmpty()) return; - if (abstractMethod == null) return; - - String notImplementedMethodName = abstractMethod.getName(); + final PsiElement element = collection.iterator().next().getElement(); + assert element instanceof PsiNamedElement; + String notImplementedMethodName = ((PsiNamedElement)element).getName(); final int startOffset = typeDefinition.getTextOffset(); int endOffset = typeDefinition.getNameIdentifierGroovy().getTextRange().getEndOffset(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java index b64c58e971..f6dba4f557 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java @@ -157,10 +157,8 @@ public class GrClassImplUtil { } } -// addGroovyObjectMethods(clazz, allMethods); - final PsiClass[] supers = clazz.getSupers(); - if (supers.length<2) { + if (supers.length < 2) { addGroovyObjectMethods(clazz, allMethods); } for (PsiClass aSuper : supers) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/overrideImplement/GroovyOverrideImplementUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/overrideImplement/GroovyOverrideImplementUtil.java index 51f0c2b50b..01e28b64a4 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/overrideImplement/GroovyOverrideImplementUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/overrideImplement/GroovyOverrideImplementUtil.java @@ -118,9 +118,9 @@ public class GroovyOverrideImplementUtil { modifierList.setModifierProperty(PsiModifier.ABSTRACT, false); modifierList.setModifierProperty(PsiModifier.NATIVE, false); - setupOverridingMethodBody(project, method, result, template, substitutor, editor); + setupOverridingMethodBody(project, method, result, template, substitutor); - final GrTypeDefinitionBody classBody = ((GrTypeDefinition) aClass).getBody(); + final GrTypeDefinitionBody classBody = aClass.getBody(); final PsiMethod[] methods = aClass.getMethods(); PsiElement anchor = null; @@ -281,7 +281,11 @@ public class GroovyOverrideImplementUtil { return (GrMethod) GroovyPsiElementFactory.getInstance(project).createTopElementFromText(buffer.toString()); } - private static void setupOverridingMethodBody(Project project, PsiMethod method, GrMethod resultMethod, FileTemplate template, PsiSubstitutor substitutor, final Editor editor) { + private static void setupOverridingMethodBody(Project project, + PsiMethod method, + GrMethod resultMethod, + FileTemplate template, + PsiSubstitutor substitutor) { final PsiType returnType = substitutor.substitute(method.getReturnType()); String returnTypeText = ""; @@ -300,7 +304,8 @@ public class GroovyOverrideImplementUtil { final GrCodeBlock newBody = GroovyPsiElementFactory.getInstance(project).createMethodBodyFromText("\n" + bodyText + "\n"); resultMethod.setBlock(newBody); - } catch (IOException e) { + } + catch (IOException e) { LOG.error(e); } } -- 2.11.4.GIT