[java] new module-info PSI

- a module may own a modifier list
This commit is contained in:
Roman Shevchenko
2017-02-13 20:19:23 +01:00
parent 5cc2c0f567
commit 2b0adae2d7
4 changed files with 37 additions and 1 deletions
@@ -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";
@@ -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<PsiJavaModuleStub
setMirrorCheckingType(element, JavaElementType.MODULE);
setMirror(getNameIdentifier(), mirror.getNameIdentifier());
setMirror(getModifierList(), mirror.getModifierList());
setMirrors(newArrayList(getStub().getChildrenByType(JavaElementType.REQUIRES_STATEMENT, PsiRequiresStatement.EMPTY_ARRAY)),
newArrayList(mirror.getRequires()));
@@ -120,6 +123,18 @@ public class ClsJavaModuleImpl extends ClsRepositoryPsiElement<PsiJavaModuleStub
throw cannotModifyException(this);
}
@Override
public PsiModifierList getModifierList() {
StubElement<PsiModifierList> 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() {
@@ -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);
@@ -128,6 +128,17 @@ public class PsiJavaModuleImpl extends JavaStubPsiElement<PsiJavaModuleStub> 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() {