split PsiMember and JvmMember, link them via PsiJvmMember interface
authorDaniil Ovchinnikov <daniil.ovchinnikov@jetbrains.com>
Mon, 27 May 2019 16:30:12 +0000 (19:30 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Tue, 28 May 2019 10:14:11 +0000 (13:14 +0300)
Same operation is performed for PsiModifierListOwner/JvmModifiersOwner/PsiJvmModifiersOwner.

GitOrigin-RevId: f39f4c95c9d27af190924197b392d33cbe3a4ec9

java/java-psi-api/src/com/intellij/psi/PsiField.java
java/java-psi-api/src/com/intellij/psi/PsiJvmMember.java [new file with mode: 0644]
java/java-psi-api/src/com/intellij/psi/PsiJvmModifiersOwner.java [new file with mode: 0644]
java/java-psi-api/src/com/intellij/psi/PsiMember.java
java/java-psi-api/src/com/intellij/psi/PsiModifierListOwner.java
java/java-psi-api/src/com/intellij/psi/PsiPackage.java
java/java-psi-api/src/com/intellij/psi/PsiParameter.java
java/java-psi-api/src/com/intellij/psi/PsiTypeParameterListOwner.java

index 74b0c2bd81a532c965a2a16fe0d162612af69fe3..6120c3c33ce74547467baeb0d5ae172acd4e0475 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.psi;
 
 import com.intellij.lang.jvm.JvmField;
@@ -10,7 +10,7 @@ import org.jetbrains.annotations.Nullable;
 /**
  * Represents a Java field or enum constant.
  */
-public interface PsiField extends PsiMember, PsiVariable, PsiDocCommentOwner, JvmField {
+public interface PsiField extends PsiJvmMember, PsiVariable, PsiDocCommentOwner, JvmField {
   /**
    * The empty array of PSI fields which can be reused to avoid unnecessary allocations.
    */
diff --git a/java/java-psi-api/src/com/intellij/psi/PsiJvmMember.java b/java/java-psi-api/src/com/intellij/psi/PsiJvmMember.java
new file mode 100644 (file)
index 0000000..a2cd0ac
--- /dev/null
@@ -0,0 +1,19 @@
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package com.intellij.psi;
+
+import com.intellij.lang.jvm.JvmMember;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Not all PsiMember inheritors are JvmMembers, e.g. {@link PsiClassInitializer}.
+ * This is a bridge interface between them.
+ * <p/>
+ * Known PsiMembers which are also JvmMembers:
+ * {@link PsiClass}, {@link PsiField} and {@link PsiMethod}.
+ */
+public interface PsiJvmMember extends PsiMember, JvmMember, PsiJvmModifiersOwner {
+
+  @Override
+  @Nullable
+  PsiClass getContainingClass();
+}
diff --git a/java/java-psi-api/src/com/intellij/psi/PsiJvmModifiersOwner.java b/java/java-psi-api/src/com/intellij/psi/PsiJvmModifiersOwner.java
new file mode 100644 (file)
index 0000000..7d34f3f
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package com.intellij.psi;
+
+import com.intellij.lang.jvm.JvmModifier;
+import com.intellij.lang.jvm.JvmModifiersOwner;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Not all PsiModifierListOwner inheritors are JvmModifiersOwners, e.g. {@link PsiLocalVariable} or {@link PsiRequiresStatement}.
+ * This is a bridge interface between them.
+ * <p>
+ * Known PsiModifierListOwners which are also JvmModifiersOwners:
+ * {@link PsiJvmMember} inheritors, {@link PsiParameter} and {@link PsiPackage}.
+ */
+public interface PsiJvmModifiersOwner extends PsiModifierListOwner, JvmModifiersOwner {
+
+  @NotNull
+  @Override
+  default PsiAnnotation[] getAnnotations() {
+    return PsiModifierListOwner.super.getAnnotations();
+  }
+
+  @Nullable
+  @Override
+  default PsiAnnotation getAnnotation(@NotNull @NonNls String fqn) {
+    return PsiModifierListOwner.super.getAnnotation(fqn);
+  }
+
+  @Override
+  default boolean hasAnnotation(@NotNull @NonNls String fqn) {
+    return PsiModifierListOwner.super.hasAnnotation(fqn);
+  }
+
+  @Override
+  default boolean hasModifier(@NotNull JvmModifier modifier) {
+    return PsiModifierListOwner.super.hasModifier(modifier);
+  }
+
+  @Nullable
+  @Override
+  default PsiElement getSourceElement() {
+    return this;
+  }
+}
index 159a889dc2356829970cebffff17eca80972d502..b995e78ed2e245fd1267aea077f848bf01f69b3f 100644 (file)
@@ -1,13 +1,12 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.psi;
 
-import com.intellij.lang.jvm.JvmMember;
 import org.jetbrains.annotations.Nullable;
 
 /**
  * Represents a member of a Java class (for example, a field or a method).
  */
-public interface PsiMember extends PsiModifierListOwner, NavigatablePsiElement, JvmMember {
+public interface PsiMember extends PsiModifierListOwner, NavigatablePsiElement {
   /**
    * The empty array of PSI members which can be reused to avoid unnecessary allocations.
    */
@@ -18,7 +17,6 @@ public interface PsiMember extends PsiModifierListOwner, NavigatablePsiElement,
    *
    * @return the containing class.
    */
-  @Override
   @Nullable
   PsiClass getContainingClass();
 }
index aa04ccae4663c051c8b5f9ead3734fa9c80af072..13d37b407b1af451c5c1fd2a34b1b7eb7d9ce1e5 100644 (file)
@@ -1,19 +1,19 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.psi;
 
 import com.intellij.lang.jvm.JvmModifier;
-import com.intellij.lang.jvm.JvmModifiersOwner;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import static com.intellij.psi.PsiJvmConversionHelper.*;
+import static com.intellij.psi.PsiJvmConversionHelper.hasListModifier;
 
 /**
  * Represents a PSI element which has a list of modifiers (public/private/protected/etc.)
  * and annotations.
  */
-public interface PsiModifierListOwner extends PsiElement, JvmModifiersOwner {
+public interface PsiModifierListOwner extends PsiElement {
+
   /**
    * Returns the list of modifiers for the element.
    *
@@ -33,30 +33,20 @@ public interface PsiModifierListOwner extends PsiElement, JvmModifiersOwner {
   boolean hasModifierProperty(@PsiModifier.ModifierConstant @NonNls @NotNull String name);
 
   @NotNull
-  @Override
   default PsiAnnotation[] getAnnotations() {
-    return getListAnnotations(this);
+    return PsiJvmConversionHelper.getListAnnotations(this);
   }
 
   @Nullable
-  @Override
-  default PsiAnnotation getAnnotation(@NotNull @NonNls String fqn) {
-    return getListAnnotation(this, fqn);
+  default PsiAnnotation getAnnotation(@NotNull String fqn) {
+    return PsiJvmConversionHelper.getListAnnotation(this, fqn);
   }
 
-  @Override
-  default boolean hasAnnotation(@NotNull @NonNls String fqn) {
-    return hasListAnnotation(this, fqn);
+  default boolean hasAnnotation(@NotNull String fqn) {
+    return PsiJvmConversionHelper.hasListAnnotation(this, fqn);
   }
 
-  @Override
   default boolean hasModifier(@NotNull JvmModifier modifier) {
     return hasListModifier(this, modifier);
   }
-
-  @Nullable
-  @Override
-  default PsiElement getSourceElement() {
-    return this;
-  }
 }
index 78651b43ee757df2a9643646d204a6bcdb5ab172..12dff5092d34582ead1d96287721babc435d983c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.psi;
 
 import com.intellij.lang.jvm.JvmPackage;
@@ -11,7 +11,7 @@ import org.jetbrains.annotations.Nullable;
 /**
  * Represents a Java package.
  */
-public interface PsiPackage extends PsiCheckedRenameElement, NavigationItem, PsiModifierListOwner,
+public interface PsiPackage extends PsiCheckedRenameElement, NavigationItem, PsiJvmModifiersOwner,
                                     PsiDirectoryContainer, PsiQualifiedNamedElement, JvmPackage {
 
   String PACKAGE_INFO_CLASS = "package-info";
index 04cd20461bf4f4dc648472d7cd85b65afe4c9de8..ddbc87aa312828f47060233a98625b6d60bb5593 100644 (file)
@@ -1,18 +1,4 @@
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.psi;
 
 import com.intellij.lang.jvm.JvmParameter;
@@ -23,7 +9,7 @@ import org.jetbrains.annotations.Nullable;
 /**
  * Represents the parameter of a Java method, foreach (enhanced for) statement or catch block.
  */
-public interface PsiParameter extends PsiVariable, JvmParameter {
+public interface PsiParameter extends PsiVariable, JvmParameter, PsiJvmModifiersOwner {
   /**
    * The empty array of PSI parameters which can be reused to avoid unnecessary allocations.
    */
@@ -64,6 +50,6 @@ public interface PsiParameter extends PsiVariable, JvmParameter {
   @NotNull
   @Override
   default PsiAnnotation[] getAnnotations() {
-    return PsiVariable.super.getAnnotations();
+    return PsiJvmModifiersOwner.super.getAnnotations();
   }
 }
index 256ac118f3fcc0c73226face70422f0ad278f690..9b1b4cd17f4193f8625deccd192574ca5bd5d15e 100644 (file)
@@ -1,18 +1,4 @@
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.psi;
 
 import com.intellij.lang.jvm.JvmTypeParametersOwner;
@@ -25,7 +11,7 @@ import org.jetbrains.annotations.Nullable;
  *
  * @author dsl
  */
-public interface PsiTypeParameterListOwner extends PsiMember, JvmTypeParametersOwner {
+public interface PsiTypeParameterListOwner extends PsiJvmMember, JvmTypeParametersOwner {
   /**
    * Checks if the element has any type parameters.
    *