mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
reducing Java dependencies on JSP (work in progress)
This commit is contained in:
@@ -23,6 +23,7 @@ import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.ElementPresentationUtil;
|
||||
import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -118,7 +119,7 @@ public class ClassTreeNode extends BasePsiMemberNode<PsiClass>{
|
||||
return 0;
|
||||
}
|
||||
try {
|
||||
int pos = ElementPresentationUtil.getClassKind(aClass);
|
||||
int pos = aClass instanceof JspClass ? ElementPresentationUtil.CLASS_KIND_JSP : ElementPresentationUtil.getClassKind(aClass);
|
||||
//abstract class before concrete
|
||||
if (pos == ElementPresentationUtil.CLASS_KIND_CLASS || pos == ElementPresentationUtil.CLASS_KIND_EXCEPTION) {
|
||||
boolean isAbstract = aClass.hasModifierProperty(PsiModifier.ABSTRACT) && !aClass.isInterface();
|
||||
|
||||
@@ -27,7 +27,6 @@ import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.ui.RowIcon;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
@@ -79,7 +78,7 @@ public class ElementPresentationUtil implements PlatformIcons {
|
||||
private static final int CLASS_KIND_ANONYMOUS = 40;
|
||||
private static final int CLASS_KIND_ENUM = 50;
|
||||
private static final int CLASS_KIND_ASPECT = 60;
|
||||
private static final int CLASS_KIND_JSP = 70;
|
||||
public static final int CLASS_KIND_JSP = 70;
|
||||
public static final int CLASS_KIND_EXCEPTION = 80;
|
||||
private static final int CLASS_KIND_JUNIT_TEST = 90;
|
||||
private static final int CLASS_KIND_RUNNABLE = 100;
|
||||
@@ -105,7 +104,6 @@ public class ElementPresentationUtil implements PlatformIcons {
|
||||
if (aClass.isAnnotationType()) return CLASS_KIND_ANNOTATION;
|
||||
if (aClass.isEnum()) return CLASS_KIND_ENUM;
|
||||
if (aClass.isInterface()) return CLASS_KIND_INTERFACE;
|
||||
if (aClass instanceof JspClass) return CLASS_KIND_JSP;
|
||||
if (aClass instanceof PsiAnonymousClass) return CLASS_KIND_ANONYMOUS;
|
||||
|
||||
return CLASS_KIND_CLASS;
|
||||
@@ -141,9 +139,6 @@ public class ElementPresentationUtil implements PlatformIcons {
|
||||
if (aClass.isInterface()) {
|
||||
return CLASS_KIND_INTERFACE;
|
||||
}
|
||||
if (aClass instanceof JspClass) {
|
||||
return CLASS_KIND_JSP;
|
||||
}
|
||||
if (aClass instanceof PsiAnonymousClass) {
|
||||
return CLASS_KIND_ANONYMOUS;
|
||||
}
|
||||
@@ -183,8 +178,6 @@ public class ElementPresentationUtil implements PlatformIcons {
|
||||
BASE_ICON.put(CLASS_KIND_EXCEPTION | FLAGS_ABSTRACT, ABSTRACT_EXCEPTION_CLASS_ICON);
|
||||
BASE_ICON.put(CLASS_KIND_INTERFACE, INTERFACE_ICON);
|
||||
BASE_ICON.put(CLASS_KIND_INTERFACE | FLAGS_ABSTRACT, INTERFACE_ICON);
|
||||
BASE_ICON.put(CLASS_KIND_JSP, JSP_ICON);
|
||||
BASE_ICON.put(CLASS_KIND_JSP | FLAGS_ABSTRACT, JSP_ICON);
|
||||
BASE_ICON.put(CLASS_KIND_JUNIT_TEST, CLASS_ICON);
|
||||
BASE_ICON.put(CLASS_KIND_JUNIT_TEST | FLAGS_ABSTRACT, ABSTRACT_CLASS_ICON);
|
||||
BASE_ICON.put(CLASS_KIND_RUNNABLE, CLASS_ICON);
|
||||
|
||||
@@ -255,12 +255,14 @@ public class PsiClassImplUtil {
|
||||
}
|
||||
|
||||
private static class ClassIconRequest {
|
||||
public PsiClass psiClass;
|
||||
public int flags;
|
||||
public final PsiClass psiClass;
|
||||
public final int flags;
|
||||
public final Icon symbolIcon;
|
||||
|
||||
private ClassIconRequest(PsiClass psiClass, int flags) {
|
||||
private ClassIconRequest(PsiClass psiClass, int flags, Icon symbolIcon) {
|
||||
this.psiClass = psiClass;
|
||||
this.flags = flags;
|
||||
this.symbolIcon = symbolIcon;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -289,21 +291,29 @@ public class PsiClassImplUtil {
|
||||
if (!r.psiClass.isValid() || r.psiClass.getProject().isDisposed()) return null;
|
||||
|
||||
final boolean isLocked = (r.flags & Iconable.ICON_FLAG_READ_STATUS) != 0 && !r.psiClass.isWritable();
|
||||
Icon symbolIcon = ElementPresentationUtil.getClassIconOfKind(r.psiClass, ElementPresentationUtil.getClassKind(r.psiClass));
|
||||
Icon symbolIcon = r.symbolIcon != null
|
||||
? r.symbolIcon
|
||||
: ElementPresentationUtil.getClassIconOfKind(r.psiClass, ElementPresentationUtil.getClassKind(r.psiClass));
|
||||
RowIcon baseIcon = ElementBase.createLayeredIcon(symbolIcon, ElementPresentationUtil.getFlags(r.psiClass, isLocked));
|
||||
return ElementPresentationUtil.addVisibilityIcon(r.psiClass, r.flags, baseIcon);
|
||||
}
|
||||
};
|
||||
|
||||
public static Icon getClassIcon(final int flags, final PsiClass aClass) {
|
||||
return getClassIcon(flags, aClass, null);
|
||||
}
|
||||
|
||||
public static Icon getClassIcon(int flags, PsiClass aClass, @Nullable Icon symbolIcon) {
|
||||
Icon base = Iconable.LastComputedIcon.get(aClass, flags);
|
||||
if (base == null) {
|
||||
Icon symbolIcon = ElementPresentationUtil.getClassIconOfKind(aClass, ElementPresentationUtil.getBasicClassKind(aClass));
|
||||
if (symbolIcon == null) {
|
||||
symbolIcon = ElementPresentationUtil.getClassIconOfKind(aClass, ElementPresentationUtil.getBasicClassKind(aClass));
|
||||
}
|
||||
RowIcon baseIcon = ElementBase.createLayeredIcon(symbolIcon, 0);
|
||||
base = ElementPresentationUtil.addVisibilityIcon(aClass, flags, baseIcon);
|
||||
}
|
||||
|
||||
return IconDeferrer.getInstance().defer(base, new ClassIconRequest(aClass, flags), FULL_ICON_EVALUATOR);
|
||||
return IconDeferrer.getInstance().defer(base, new ClassIconRequest(aClass, flags, symbolIcon), FULL_ICON_EVALUATOR);
|
||||
}
|
||||
|
||||
public static SearchScope getClassUseScope(final PsiClass aClass) {
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManagerImpl;
|
||||
import com.intellij.psi.impl.light.LightClassReference;
|
||||
import com.intellij.psi.impl.source.PsiClassReferenceType;
|
||||
import com.intellij.psi.impl.source.PsiImmediateClassType;
|
||||
@@ -40,6 +39,7 @@ import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.PairFunction;
|
||||
import com.intellij.util.Processor;
|
||||
@@ -351,9 +351,9 @@ public class PsiImplUtil {
|
||||
|
||||
@NotNull
|
||||
public static SearchScope getMemberUseScope(@NotNull PsiMember member) {
|
||||
final GlobalSearchScope maximalUseScope = ResolveScopeManagerImpl.getElementUseScope(member);
|
||||
final GlobalSearchScope maximalUseScope = ResolveScopeManager.getElementUseScope(member);
|
||||
PsiFile file = member.getContainingFile();
|
||||
if (JspPsiUtil.isInJspFile(file)) return maximalUseScope;
|
||||
if (isInServerPage(file)) return maximalUseScope;
|
||||
|
||||
PsiClass aClass = member.getContainingClass();
|
||||
if (aClass instanceof PsiAnonymousClass) {
|
||||
@@ -386,6 +386,15 @@ public class PsiImplUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isInServerPage(@Nullable final PsiElement element) {
|
||||
return getServerPageFile(element) != null;
|
||||
}
|
||||
|
||||
public static ServerPageFile getServerPageFile(final PsiElement element) {
|
||||
final PsiFile psiFile = PsiUtilCore.getTemplateLanguageFile(element);
|
||||
return psiFile instanceof ServerPageFile ? (ServerPageFile)psiFile : null;
|
||||
}
|
||||
|
||||
public static PsiElement setName(@NotNull PsiElement element, @NotNull String name) throws IncorrectOperationException {
|
||||
PsiManager manager = element.getManager();
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
package com.intellij.psi.impl.source.resolve;
|
||||
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiImplUtil;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
@@ -73,7 +74,7 @@ public class JavaResolveUtil {
|
||||
if (visibility == JavaCodeFragment.VisibilityChecker.Visibility.NOT_VISIBLE) return false;
|
||||
}
|
||||
}
|
||||
else if (placeFile instanceof XmlFile && !JspPsiUtil.isInJspFile(placeFile)) return true;
|
||||
else if (placeFile instanceof XmlFile && !PsiImplUtil.isInServerPage(placeFile)) return true;
|
||||
// We don't care about access rights in javadoc
|
||||
if (isInJavaDoc(place)) return true;
|
||||
|
||||
@@ -84,8 +85,8 @@ public class JavaResolveUtil {
|
||||
|
||||
int effectiveAccessLevel = PsiUtil.getAccessLevel(modifierList);
|
||||
PsiFile file = placeFile == null ? null : FileContextUtil.getContextFile(placeFile); //TODO: implementation method!!!!
|
||||
if (JspPsiUtil.isInJspFile(file) && JspPsiUtil.isInJspFile(member.getContainingFile())) return true;
|
||||
if (file instanceof XmlFile && !JspPsiUtil.isInJspFile(file)) return true;
|
||||
if (PsiImplUtil.isInServerPage(file) && PsiImplUtil.isInServerPage(member.getContainingFile())) return true;
|
||||
if (file instanceof XmlFile && !PsiImplUtil.isInServerPage(file)) return true;
|
||||
if (effectiveAccessLevel == PsiUtil.ACCESS_LEVEL_PUBLIC) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -16,9 +16,10 @@
|
||||
package com.intellij.psi.jsp;
|
||||
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.ServerPageFile;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
|
||||
public interface JspFile extends BaseJspFile {
|
||||
public interface JspFile extends BaseJspFile, ServerPageFile {
|
||||
JspFile[] EMPTY_ARRAY = new JspFile[0];
|
||||
|
||||
XmlTag[] getDirectiveTagsInContext(JspDirectiveKind directiveKind);
|
||||
|
||||
22
java/openapi/src/com/intellij/psi/ServerPageFile.java
Normal file
22
java/openapi/src/com/intellij/psi/ServerPageFile.java
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2000-2011 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.
|
||||
*/
|
||||
package com.intellij.psi;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public interface ServerPageFile extends PsiFile {
|
||||
}
|
||||
Reference in New Issue
Block a user