diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrMethod.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrMethod.java index ca906f4a606f..535583af68af 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrMethod.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrMethod.java @@ -49,6 +49,8 @@ public interface GrMethod extends GrMembersDeclaration, GrNamedElement, PsiMetho @Nullable GrOpenBlock getBlock(); + default boolean hasBlock() { return getBlock() != null; } + void setBlock(GrCodeBlock newBlock); @Nullable diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java index b5cc79fecc8c..99050670f2b3 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -116,6 +116,12 @@ public abstract class GrMethodBaseImpl extends GrStubElementBase i return findChildByClass(GrOpenBlock.class); } + @Override + public boolean hasBlock() { + GrMethodStub stub = getStub(); + return stub != null ? stub.hasBlock() : GrMethod.super.hasBlock(); + } + @Override public void setBlock(GrCodeBlock newBlock) { ASTNode newNode = newBlock.getNode().copyElement(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrMethodStub.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrMethodStub.java index 0bcb1fd4c475..5c4f77dd7d6d 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrMethodStub.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrMethodStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,7 +29,8 @@ import org.jetbrains.plugins.groovy.lang.psi.stubs.elements.GrMethodElementType; * @author ilyas */ public class GrMethodStub extends StubBase implements NamedStub { - public static final byte IS_DEPRECATED_BY_DOC_TAG = 0x01; + public static final byte IS_DEPRECATED_BY_DOC_TAG = 0b1; + public static final byte HAS_BLOCK = 0b10; private final StringRef myName; private final String[] myAnnotations; @@ -75,11 +76,19 @@ public class GrMethodStub extends StubBase implements NamedStub { - public static final int STUB_VERSION = 35; + public static final int STUB_VERSION = 36; public GrStubFileElementType(Language language) { super(language); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertMethodToClosureIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertMethodToClosureIntention.java index f441d33c8537..5ec22b3ed256 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertMethodToClosureIntention.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertMethodToClosureIntention.java @@ -155,7 +155,7 @@ public class ConvertMethodToClosureIntention extends Intention { } return !method.isConstructor() && isJavaIdentifier(method.getName()) && - method.getBlock() != null && + method.hasBlock() && method.getParent() instanceof GrTypeDefinitionBody; } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy index c119541f416e..5097ce949791 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import com.intellij.psi.impl.source.PsiFileImpl import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.stubs.StubIndex import com.intellij.psi.util.InheritanceUtil +import com.intellij.testFramework.fixtures.impl.JavaCodeInsightTestFixtureImpl import groovy.transform.CompileStatic import org.jetbrains.plugins.groovy.LightGroovyTestCase import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrAnonymousClassDefinition @@ -283,4 +284,15 @@ class A { assert psiFile.stub assert !psiFile.contentsLoaded } + + void 'test do not load contents in highlighting'() { + def file = fixture.tempDirFixture.createFile('classes.groovy', '''\ +class C { + static void staticVoidMethod() {} +} +''') + ((JavaCodeInsightTestFixtureImpl)fixture).virtualFileFilter = { it == file } + fixture.configureByText '_.groovy', 'C.staticVoidMethod()' + fixture.checkHighlighting() + } }