From 2b0adae2d763959cf344351f02256cc315e90c5e Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 13 Feb 2017 20:19:23 +0100 Subject: [PATCH] [java] new module-info PSI - a module may own a modifier list --- .../src/com/intellij/psi/PsiJavaModule.java | 2 +- .../psi/impl/compiled/ClsJavaModuleImpl.java | 15 +++++++++++++++ .../intellij/psi/impl/light/LightJavaModule.java | 10 ++++++++++ .../psi/impl/source/PsiJavaModuleImpl.java | 11 +++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/java/java-psi-api/src/com/intellij/psi/PsiJavaModule.java b/java/java-psi-api/src/com/intellij/psi/PsiJavaModule.java index 56741435f18d..77f1a6300cd5 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiJavaModule.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiJavaModule.java @@ -22,7 +22,7 @@ import org.jetbrains.annotations.NotNull; * * @since 2016.3 */ -public interface PsiJavaModule extends NavigatablePsiElement, PsiNameIdentifierOwner, PsiJavaDocumentedElement { +public interface PsiJavaModule extends NavigatablePsiElement, PsiNameIdentifierOwner, PsiModifierListOwner, PsiJavaDocumentedElement { String MODULE_INFO_CLASS = "module-info"; String MODULE_INFO_FILE = MODULE_INFO_CLASS + ".java"; String MODULE_INFO_CLS_FILE = MODULE_INFO_CLASS + ".class"; diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsJavaModuleImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsJavaModuleImpl.java index b0d3ade10e88..3971d929bfbe 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsJavaModuleImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsJavaModuleImpl.java @@ -19,11 +19,13 @@ import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.ItemPresentationProviders; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; +import com.intellij.psi.impl.java.stubs.JavaStubElementTypes; import com.intellij.psi.impl.java.stubs.PsiJavaModuleStub; import com.intellij.psi.impl.source.SourceTreeToPsiMap; import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.impl.source.tree.TreeElement; import com.intellij.psi.javadoc.PsiDocComment; +import com.intellij.psi.stubs.StubElement; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.JBIterable; import org.jetbrains.annotations.NotNull; @@ -95,6 +97,7 @@ public class ClsJavaModuleImpl extends ClsRepositoryPsiElement childStub = getStub().findChildStubByType(JavaStubElementTypes.MODIFIER_LIST); + return childStub != null ? childStub.getPsi() : null; + } + + @Override + public boolean hasModifierProperty(@NotNull String name) { + PsiModifierList modifierList = getModifierList(); + return modifierList != null && modifierList.hasModifierProperty(name); + } + @Nullable @Override public PsiDocComment getDocComment() { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java index 9718a5c755e4..54f16a7616f8 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java @@ -102,6 +102,16 @@ public class LightJavaModule extends LightElement implements PsiJavaModule { throw new IncorrectOperationException("Cannot modify automatic module '" + getName() + "'"); } + @Override + public PsiModifierList getModifierList() { + return null; + } + + @Override + public boolean hasModifierProperty(@NotNull String name) { + return false; + } + @Override public ItemPresentation getPresentation() { return ItemPresentationProviders.getItemPresentation(this); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleImpl.java index 4f25c9f6ac80..04107501ac46 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleImpl.java @@ -128,6 +128,17 @@ public class PsiJavaModuleImpl extends JavaStubPsiElement imp return this; } + @Override + public PsiModifierList getModifierList() { + return getStubOrPsiChild(JavaStubElementTypes.MODIFIER_LIST); + } + + @Override + public boolean hasModifierProperty(@NotNull String name) { + PsiModifierList modifierList = getModifierList(); + return modifierList != null && modifierList.hasModifierProperty(name); + } + @Nullable @Override public PsiDocComment getDocComment() {