mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 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.
|
||||
@@ -22,7 +22,7 @@ import com.intellij.debugger.engine.events.DebuggerContextCommandImpl;
|
||||
import com.intellij.debugger.impl.DebuggerContextImpl;
|
||||
import com.intellij.debugger.settings.NodeRendererSettings;
|
||||
import com.intellij.debugger.settings.UserRenderersConfigurable;
|
||||
import com.intellij.debugger.ui.tree.render.CompoundReferenceRenderer;
|
||||
import com.intellij.debugger.ui.tree.render.NodeRenderer;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.options.ConfigurableBase;
|
||||
@@ -83,8 +83,7 @@ public class CreateRendererAction extends AnAction {
|
||||
};
|
||||
SingleConfigurableEditor editor = new SingleConfigurableEditor(project, configurable);
|
||||
if (name != null) {
|
||||
CompoundReferenceRenderer renderer =
|
||||
NodeRendererSettings.getInstance().createCompoundReferenceRenderer(name, name, null, null);
|
||||
NodeRenderer renderer = NodeRendererSettings.getInstance().createCompoundTypeRenderer(name, name, null, null);
|
||||
renderer.setEnabled(true);
|
||||
ui.addRenderer(renderer);
|
||||
}
|
||||
|
||||
@@ -303,7 +303,7 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV
|
||||
myValueDescriptor.getLastRenderer() instanceof ToStringBasedRenderer) {
|
||||
value = StringUtil.wrapWithDoubleQuote(truncateToMaxLength(myValue));
|
||||
}
|
||||
else if (myValueDescriptor.getLastRenderer() instanceof CompoundReferenceRenderer) {
|
||||
else if (myValueDescriptor.getLastRenderer() instanceof CompoundTypeRenderer) {
|
||||
value = truncateToMaxLength(myValue);
|
||||
}
|
||||
renderer.renderValue(value);
|
||||
|
||||
@@ -36,9 +36,10 @@ import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.JDOMExternalizerUtil;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiExpression;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiJavaParserFacadeImpl;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.net.NetUtils;
|
||||
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
|
||||
import com.intellij.util.xmlb.XmlSerializer;
|
||||
@@ -138,6 +139,27 @@ public class DebuggerUtilsImpl extends DebuggerUtilsEx{
|
||||
return PositionUtil.getContextElement(context);
|
||||
}
|
||||
|
||||
public static Pair<PsiClass, PsiType> getPsiClassAndType(String className, Project project) {
|
||||
PsiClass contextClass;
|
||||
PsiType contextType;
|
||||
PsiPrimitiveType primitiveType = PsiJavaParserFacadeImpl.getPrimitiveType(className);
|
||||
if (primitiveType != null) {
|
||||
contextClass = JavaPsiFacade.getInstance(project).findClass(primitiveType.getBoxedTypeName(), GlobalSearchScope.allScope(project));
|
||||
contextType = primitiveType;
|
||||
}
|
||||
else {
|
||||
contextClass = findClass(className, project, GlobalSearchScope.allScope(project));
|
||||
if (contextClass != null) {
|
||||
contextClass = (PsiClass)contextClass.getNavigationElement();
|
||||
}
|
||||
if (contextClass instanceof PsiCompiledElement) {
|
||||
contextClass = (PsiClass)((PsiCompiledElement)contextClass).getMirror();
|
||||
}
|
||||
contextType = getType(className, project);
|
||||
}
|
||||
return Pair.create(contextClass, contextType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiClass chooseClassDialog(String title, Project project) {
|
||||
TreeClassChooser dialog = TreeClassChooserFactory.getInstance(project).createAllProjectScopeChooser(title);
|
||||
|
||||
+9
-9
@@ -52,8 +52,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class CompoundRendererConfigurable extends JPanel {
|
||||
private CompoundReferenceRenderer myRenderer;
|
||||
private CompoundReferenceRenderer myOriginalRenderer;
|
||||
private CompoundTypeRenderer myRenderer;
|
||||
private CompoundTypeRenderer myOriginalRenderer;
|
||||
private Project myProject;
|
||||
private final ClassNameEditorWithBrowseButton myClassNameField;
|
||||
private final JRadioButton myRbDefaultLabel;
|
||||
@@ -187,9 +187,9 @@ class CompoundRendererConfigurable extends JPanel {
|
||||
}
|
||||
|
||||
public void setRenderer(NodeRenderer renderer) {
|
||||
if (renderer instanceof CompoundReferenceRenderer) {
|
||||
myRenderer = (CompoundReferenceRenderer)renderer;
|
||||
myOriginalRenderer = (CompoundReferenceRenderer)renderer.clone();
|
||||
if (renderer instanceof CompoundTypeRenderer) {
|
||||
myRenderer = (CompoundTypeRenderer)renderer;
|
||||
myOriginalRenderer = (CompoundTypeRenderer)renderer.clone();
|
||||
}
|
||||
else {
|
||||
myRenderer = myOriginalRenderer = null;
|
||||
@@ -197,7 +197,7 @@ class CompoundRendererConfigurable extends JPanel {
|
||||
reset();
|
||||
}
|
||||
|
||||
public CompoundReferenceRenderer getRenderer() {
|
||||
public CompoundTypeRenderer getRenderer() {
|
||||
return myRenderer;
|
||||
}
|
||||
|
||||
@@ -300,7 +300,7 @@ class CompoundRendererConfigurable extends JPanel {
|
||||
if (myRenderer == null) {
|
||||
return false;
|
||||
}
|
||||
final CompoundReferenceRenderer cloned = (CompoundReferenceRenderer)myRenderer.clone();
|
||||
final CompoundTypeRenderer cloned = (CompoundTypeRenderer)myRenderer.clone();
|
||||
flushDataTo(cloned);
|
||||
return !DebuggerUtilsEx.externalizableEqual(cloned, myOriginalRenderer);
|
||||
}
|
||||
@@ -311,10 +311,10 @@ class CompoundRendererConfigurable extends JPanel {
|
||||
}
|
||||
flushDataTo(myRenderer);
|
||||
// update the renderer to compare with in order to find out whether we've been modified since last apply
|
||||
myOriginalRenderer = (CompoundReferenceRenderer)myRenderer.clone();
|
||||
myOriginalRenderer = (CompoundTypeRenderer)myRenderer.clone();
|
||||
}
|
||||
|
||||
private void flushDataTo(final CompoundReferenceRenderer renderer) { // label
|
||||
private void flushDataTo(final CompoundTypeRenderer renderer) { // label
|
||||
LabelRenderer labelRenderer = null;
|
||||
renderer.setShowType(myShowTypeCheckBox.isSelected());
|
||||
if (myRbExpressionLabel.isSelected()) {
|
||||
|
||||
@@ -328,9 +328,20 @@ public class NodeRendererSettings implements PersistentStateComponent<Element> {
|
||||
else if(rendererId.equals(CompoundNodeRenderer.UNIQUE_ID) || rendererId.equals(REFERENCE_RENDERER)) {
|
||||
return createCompoundReferenceRenderer("unnamed", CommonClassNames.JAVA_LANG_OBJECT, null, null);
|
||||
}
|
||||
else if (rendererId.equals(CompoundTypeRenderer.UNIQUE_ID)) {
|
||||
return createCompoundTypeRenderer("unnamed", CommonClassNames.JAVA_LANG_OBJECT, null, null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public CompoundTypeRenderer createCompoundTypeRenderer(
|
||||
@NonNls final String rendererName, @NonNls final String className, final ValueLabelRenderer labelRenderer, final ChildrenRenderer childrenRenderer
|
||||
) {
|
||||
CompoundTypeRenderer renderer = new CompoundTypeRenderer(this, rendererName, labelRenderer, childrenRenderer);
|
||||
renderer.setClassName(className);
|
||||
return renderer;
|
||||
}
|
||||
|
||||
public CompoundReferenceRenderer createCompoundReferenceRenderer(
|
||||
@NonNls final String rendererName, @NonNls final String className, final ValueLabelRenderer labelRenderer, final ChildrenRenderer childrenRenderer
|
||||
) {
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@
|
||||
package com.intellij.debugger.settings;
|
||||
|
||||
import com.intellij.debugger.DebuggerBundle;
|
||||
import com.intellij.debugger.ui.tree.render.CompoundNodeRenderer;
|
||||
import com.intellij.debugger.ui.tree.render.CompoundTypeRenderer;
|
||||
import com.intellij.debugger.ui.tree.render.NodeRenderer;
|
||||
import com.intellij.ide.util.ElementsChooser;
|
||||
import com.intellij.openapi.Disposable;
|
||||
@@ -209,7 +209,7 @@ public final class UserRenderersConfigurable extends JPanel implements Configura
|
||||
|
||||
@Override
|
||||
public void run(AnActionButton button) {
|
||||
final NodeRenderer renderer = (NodeRenderer)NodeRendererSettings.getInstance().createRenderer(CompoundNodeRenderer.UNIQUE_ID);
|
||||
NodeRenderer renderer = (NodeRenderer)NodeRendererSettings.getInstance().createRenderer(CompoundTypeRenderer.UNIQUE_ID);
|
||||
renderer.setEnabled(true);
|
||||
addRenderer(renderer);
|
||||
SwingUtilities.invokeLater(myNameField::requestFocus);
|
||||
|
||||
+8
-21
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 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.
|
||||
@@ -21,19 +21,19 @@
|
||||
package com.intellij.debugger.ui.impl.watch;
|
||||
|
||||
import com.intellij.debugger.DebuggerBundle;
|
||||
import com.intellij.debugger.engine.DebuggerUtils;
|
||||
import com.intellij.debugger.engine.StackFrameContext;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluateException;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
|
||||
import com.intellij.debugger.engine.evaluation.TextWithImports;
|
||||
import com.intellij.debugger.impl.DebuggerUtilsImpl;
|
||||
import com.intellij.debugger.ui.tree.UserExpressionDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiCodeFragment;
|
||||
import com.sun.jdi.ObjectReference;
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.sun.jdi.Type;
|
||||
import com.sun.jdi.Value;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class UserExpressionDescriptorImpl extends EvaluationDescriptor implements UserExpressionDescriptor{
|
||||
@@ -60,24 +60,11 @@ public class UserExpressionDescriptorImpl extends EvaluationDescriptor implement
|
||||
}
|
||||
|
||||
protected PsiCodeFragment getEvaluationCode(final StackFrameContext context) throws EvaluateException {
|
||||
Value value = myParentDescriptor.getValue();
|
||||
|
||||
if(value instanceof ObjectReference) {
|
||||
final String typeName = value.type().name();
|
||||
|
||||
final PsiClass psiClass = DebuggerUtils.findClass(myTypeName, myProject, context.getDebugProcess().getSearchScope());
|
||||
|
||||
if (psiClass == null) {
|
||||
throw EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.type.name", typeName));
|
||||
}
|
||||
|
||||
return createCodeFragment(psiClass);
|
||||
}
|
||||
else {
|
||||
throw EvaluateExceptionUtil.createEvaluateException(
|
||||
DebuggerBundle.message("evaluation.error.objref.expected", myParentDescriptor.getName())
|
||||
);
|
||||
Pair<PsiClass, PsiType> psiClassAndType = DebuggerUtilsImpl.getPsiClassAndType(myTypeName, myProject);
|
||||
if (psiClassAndType.first == null) {
|
||||
throw EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.type.name", myTypeName));
|
||||
}
|
||||
return createCodeFragment(psiClassAndType.first);
|
||||
}
|
||||
|
||||
public ValueDescriptorImpl getParentDescriptor() {
|
||||
|
||||
@@ -18,9 +18,10 @@ package com.intellij.debugger.ui.tree.render;
|
||||
import com.intellij.debugger.engine.DebuggerUtils;
|
||||
import com.intellij.debugger.engine.evaluation.*;
|
||||
import com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator;
|
||||
import com.intellij.debugger.impl.DebuggerUtilsImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiJavaParserFacadeImpl;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.reference.SoftReference;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -66,31 +67,14 @@ public abstract class CachedEvaluator {
|
||||
protected Cache initEvaluatorAndChildrenExpression(final Project project) {
|
||||
final Cache cache = new Cache();
|
||||
try {
|
||||
String className = getClassName();
|
||||
PsiClass contextClass;
|
||||
PsiType contextType;
|
||||
PsiPrimitiveType primitiveType = PsiJavaParserFacadeImpl.getPrimitiveType(className);
|
||||
if (primitiveType != null) {
|
||||
contextClass = JavaPsiFacade.getInstance(project).findClass(primitiveType.getBoxedTypeName(), GlobalSearchScope.allScope(project));
|
||||
contextType = primitiveType;
|
||||
}
|
||||
else {
|
||||
contextClass = DebuggerUtils.findClass(className, project, GlobalSearchScope.allScope(project));
|
||||
if (contextClass != null) {
|
||||
contextClass = (PsiClass)contextClass.getNavigationElement();
|
||||
}
|
||||
if (contextClass instanceof PsiCompiledElement) {
|
||||
contextClass = (PsiClass)((PsiCompiledElement)contextClass).getMirror();
|
||||
}
|
||||
if (contextClass == null) {
|
||||
throw EvaluateExceptionUtil.CANNOT_FIND_SOURCE_CLASS;
|
||||
}
|
||||
contextType = DebuggerUtils.getType(className, project);
|
||||
Pair<PsiClass, PsiType> psiClassAndType = DebuggerUtilsImpl.getPsiClassAndType(getClassName(), project);
|
||||
if (psiClassAndType.first == null) {
|
||||
throw EvaluateExceptionUtil.CANNOT_FIND_SOURCE_CLASS;
|
||||
}
|
||||
cache.myPsiChildrenExpression = null;
|
||||
JavaCodeFragment codeFragment = myDefaultFragmentFactory.createCodeFragment(myReferenceExpression, contextClass, project);
|
||||
JavaCodeFragment codeFragment = myDefaultFragmentFactory.createCodeFragment(myReferenceExpression, psiClassAndType.first, project);
|
||||
codeFragment.forceResolveScope(GlobalSearchScope.allScope(project));
|
||||
codeFragment.setThisType(contextType);
|
||||
codeFragment.setThisType(psiClassAndType.second);
|
||||
DebuggerUtils.checkSyntax(codeFragment);
|
||||
cache.myPsiChildrenExpression = codeFragment instanceof PsiExpressionCodeFragment ? ((PsiExpressionCodeFragment)codeFragment).getExpression() : null;
|
||||
cache.myEvaluator = myDefaultFragmentFactory.getEvaluatorBuilder().build(codeFragment, null);
|
||||
|
||||
+9
-105
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 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.
|
||||
@@ -15,118 +15,22 @@
|
||||
*/
|
||||
package com.intellij.debugger.ui.tree.render;
|
||||
|
||||
import com.intellij.debugger.DebuggerContext;
|
||||
import com.intellij.debugger.engine.DebugProcess;
|
||||
import com.intellij.debugger.engine.DebuggerUtils;
|
||||
import com.intellij.debugger.settings.NodeRendererSettings;
|
||||
import com.intellij.debugger.ui.tree.DebuggerTreeNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.CommonClassNames;
|
||||
import com.intellij.psi.JavaPsiFacade;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiElementFactory;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.sun.jdi.ReferenceType;
|
||||
import com.sun.jdi.Type;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class CompoundReferenceRenderer extends CompoundNodeRenderer{
|
||||
protected static final Logger LOG = Logger.getInstance("#com.intellij.debugger.ui.tree.render.CompoundReferenceRenderer");
|
||||
|
||||
public CompoundReferenceRenderer(final NodeRendererSettings rendererSettings, String name, ValueLabelRenderer labelRenderer, ChildrenRenderer childrenRenderer) {
|
||||
public class CompoundReferenceRenderer extends CompoundTypeRenderer {
|
||||
public CompoundReferenceRenderer(NodeRendererSettings rendererSettings,
|
||||
String name,
|
||||
ValueLabelRenderer labelRenderer,
|
||||
ChildrenRenderer childrenRenderer) {
|
||||
super(rendererSettings, name, labelRenderer, childrenRenderer);
|
||||
myProperties.setClassName(CommonClassNames.JAVA_LANG_OBJECT);
|
||||
LOG.assertTrue(labelRenderer == null || labelRenderer instanceof ReferenceRenderer);
|
||||
LOG.assertTrue(childrenRenderer == null || childrenRenderer instanceof ReferenceRenderer);
|
||||
}
|
||||
|
||||
public void setLabelRenderer(ValueLabelRenderer labelRenderer) {
|
||||
final ValueLabelRenderer prevRenderer = getLabelRenderer();
|
||||
super.setLabelRenderer(myRendererSettings.isBase(labelRenderer) ? null : labelRenderer);
|
||||
final ValueLabelRenderer currentRenderer = getLabelRenderer();
|
||||
if (prevRenderer != currentRenderer) {
|
||||
if (currentRenderer instanceof ReferenceRenderer) {
|
||||
((ReferenceRenderer)currentRenderer).setClassName(getClassName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setChildrenRenderer(ChildrenRenderer childrenRenderer) {
|
||||
final ChildrenRenderer prevRenderer = getChildrenRenderer();
|
||||
super.setChildrenRenderer(myRendererSettings.isBase(childrenRenderer) ? null : childrenRenderer);
|
||||
final ChildrenRenderer currentRenderer = getChildrenRenderer();
|
||||
if (prevRenderer != currentRenderer) {
|
||||
if (currentRenderer instanceof ReferenceRenderer) {
|
||||
((ReferenceRenderer)currentRenderer).setClassName(getClassName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ChildrenRenderer getChildrenRenderer() {
|
||||
final ChildrenRenderer childrenRenderer = super.getChildrenRenderer();
|
||||
return childrenRenderer != null ? childrenRenderer : getDefaultRenderer();
|
||||
}
|
||||
|
||||
private NodeRenderer getDefaultRenderer() {
|
||||
return getClassName().endsWith("]") ? myRendererSettings.getArrayRenderer() : myRendererSettings.getClassRenderer();
|
||||
}
|
||||
|
||||
public ValueLabelRenderer getLabelRenderer() {
|
||||
final ValueLabelRenderer labelRenderer = super.getLabelRenderer();
|
||||
return labelRenderer != null ? labelRenderer : getDefaultRenderer();
|
||||
}
|
||||
|
||||
private ChildrenRenderer getRawChildrenRenderer() {
|
||||
NodeRenderer classRenderer = getDefaultRenderer();
|
||||
final ChildrenRenderer originalRenderer = super.getChildrenRenderer();
|
||||
return originalRenderer == classRenderer ? null : originalRenderer;
|
||||
}
|
||||
|
||||
private ValueLabelRenderer getRawLabelRenderer() {
|
||||
NodeRenderer classRenderer = getDefaultRenderer();
|
||||
final ValueLabelRenderer originalRenderer = super.getLabelRenderer();
|
||||
return originalRenderer == classRenderer ? null : originalRenderer;
|
||||
}
|
||||
|
||||
|
||||
public boolean isApplicable(Type type) {
|
||||
if(type == null || !(type instanceof ReferenceType) || !DebuggerUtils.instanceOf(type, getClassName())) {
|
||||
return false;
|
||||
if (type instanceof ReferenceType) {
|
||||
return super.isApplicable(type);
|
||||
}
|
||||
return super.isApplicable(type);
|
||||
}
|
||||
|
||||
public void setClassName(@NotNull String name) {
|
||||
myProperties.setClassName(name);
|
||||
if(getRawLabelRenderer() != null) {
|
||||
final ValueLabelRenderer originalLabelRenderer = super.getLabelRenderer();
|
||||
if (originalLabelRenderer instanceof ReferenceRenderer) {
|
||||
((ReferenceRenderer)originalLabelRenderer).setClassName(name);
|
||||
}
|
||||
}
|
||||
|
||||
if(getRawChildrenRenderer() != null) {
|
||||
final ChildrenRenderer originalChildrenRenderer = super.getChildrenRenderer();
|
||||
if (originalChildrenRenderer instanceof ReferenceRenderer) {
|
||||
((ReferenceRenderer)originalChildrenRenderer).setClassName(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public @NotNull String getClassName() {
|
||||
return myProperties.getClassName();
|
||||
}
|
||||
|
||||
protected final PsiElement getContext(Project project, DebuggerContext context) {
|
||||
DebugProcess process = context.getDebugProcess();
|
||||
GlobalSearchScope scope = process != null ? process.getSearchScope() : GlobalSearchScope.allScope(project);
|
||||
return DebuggerUtils.findClass(getClassName(), project, scope);
|
||||
}
|
||||
|
||||
protected final PsiElement getChildValueExpression(String text, DebuggerTreeNode node, DebuggerContext context) {
|
||||
Project project = node.getProject();
|
||||
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
|
||||
return elementFactory.createExpressionFromText(text, getContext(project, context));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* Copyright 2000-2016 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.debugger.ui.tree.render;
|
||||
|
||||
import com.intellij.debugger.DebuggerContext;
|
||||
import com.intellij.debugger.engine.DebugProcess;
|
||||
import com.intellij.debugger.engine.DebuggerUtils;
|
||||
import com.intellij.debugger.settings.NodeRendererSettings;
|
||||
import com.intellij.debugger.ui.tree.DebuggerTreeNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiJavaParserFacadeImpl;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.sun.jdi.Type;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class CompoundTypeRenderer extends CompoundNodeRenderer {
|
||||
public static final @NonNls String UNIQUE_ID = "CompoundTypeRenderer";
|
||||
protected static final Logger LOG = Logger.getInstance("#com.intellij.debugger.ui.tree.render.CompoundReferenceRenderer");
|
||||
|
||||
public CompoundTypeRenderer(NodeRendererSettings rendererSettings,
|
||||
String name,
|
||||
ValueLabelRenderer labelRenderer,
|
||||
ChildrenRenderer childrenRenderer) {
|
||||
super(rendererSettings, name, labelRenderer, childrenRenderer);
|
||||
myProperties.setClassName(CommonClassNames.JAVA_LANG_OBJECT);
|
||||
LOG.assertTrue(labelRenderer == null || labelRenderer instanceof TypeRenderer);
|
||||
LOG.assertTrue(childrenRenderer == null || childrenRenderer instanceof TypeRenderer);
|
||||
}
|
||||
|
||||
public void setLabelRenderer(ValueLabelRenderer labelRenderer) {
|
||||
final ValueLabelRenderer prevRenderer = getLabelRenderer();
|
||||
super.setLabelRenderer(myRendererSettings.isBase(labelRenderer) ? null : labelRenderer);
|
||||
final ValueLabelRenderer currentRenderer = getLabelRenderer();
|
||||
if (prevRenderer != currentRenderer) {
|
||||
if (currentRenderer instanceof TypeRenderer) {
|
||||
((TypeRenderer)currentRenderer).setClassName(getClassName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setChildrenRenderer(ChildrenRenderer childrenRenderer) {
|
||||
final ChildrenRenderer prevRenderer = getChildrenRenderer();
|
||||
super.setChildrenRenderer(myRendererSettings.isBase(childrenRenderer) ? null : childrenRenderer);
|
||||
final ChildrenRenderer currentRenderer = getChildrenRenderer();
|
||||
if (prevRenderer != currentRenderer) {
|
||||
if (currentRenderer instanceof TypeRenderer) {
|
||||
((TypeRenderer)currentRenderer).setClassName(getClassName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ChildrenRenderer getChildrenRenderer() {
|
||||
final ChildrenRenderer childrenRenderer = super.getChildrenRenderer();
|
||||
return childrenRenderer != null ? childrenRenderer : getDefaultRenderer();
|
||||
}
|
||||
|
||||
private NodeRenderer getDefaultRenderer() {
|
||||
String name = getClassName();
|
||||
if (TypeConversionUtil.isPrimitive(name)) {
|
||||
return myRendererSettings.getPrimitiveRenderer();
|
||||
}
|
||||
return name.endsWith("]") ? myRendererSettings.getArrayRenderer() : myRendererSettings.getClassRenderer();
|
||||
}
|
||||
|
||||
public ValueLabelRenderer getLabelRenderer() {
|
||||
final ValueLabelRenderer labelRenderer = super.getLabelRenderer();
|
||||
return labelRenderer != null ? labelRenderer : getDefaultRenderer();
|
||||
}
|
||||
|
||||
private ChildrenRenderer getRawChildrenRenderer() {
|
||||
NodeRenderer classRenderer = getDefaultRenderer();
|
||||
final ChildrenRenderer originalRenderer = super.getChildrenRenderer();
|
||||
return originalRenderer == classRenderer ? null : originalRenderer;
|
||||
}
|
||||
|
||||
private ValueLabelRenderer getRawLabelRenderer() {
|
||||
NodeRenderer classRenderer = getDefaultRenderer();
|
||||
final ValueLabelRenderer originalRenderer = super.getLabelRenderer();
|
||||
return originalRenderer == classRenderer ? null : originalRenderer;
|
||||
}
|
||||
|
||||
public boolean isApplicable(Type type) {
|
||||
if (DebuggerUtils.instanceOf(type, getClassName())) {
|
||||
return super.isApplicable(type);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUniqueId() {
|
||||
return UNIQUE_ID;
|
||||
}
|
||||
|
||||
public void setClassName(@NotNull String name) {
|
||||
myProperties.setClassName(name);
|
||||
if (getRawLabelRenderer() != null) {
|
||||
final ValueLabelRenderer originalLabelRenderer = super.getLabelRenderer();
|
||||
if (originalLabelRenderer instanceof TypeRenderer) {
|
||||
((TypeRenderer)originalLabelRenderer).setClassName(name);
|
||||
}
|
||||
}
|
||||
|
||||
if (getRawChildrenRenderer() != null) {
|
||||
final ChildrenRenderer originalChildrenRenderer = super.getChildrenRenderer();
|
||||
if (originalChildrenRenderer instanceof TypeRenderer) {
|
||||
((TypeRenderer)originalChildrenRenderer).setClassName(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public
|
||||
@NotNull
|
||||
String getClassName() {
|
||||
return myProperties.getClassName();
|
||||
}
|
||||
|
||||
protected final PsiElement getContext(Project project, DebuggerContext context) {
|
||||
DebugProcess process = context.getDebugProcess();
|
||||
GlobalSearchScope scope = process != null ? process.getSearchScope() : GlobalSearchScope.allScope(project);
|
||||
return DebuggerUtils.findClass(getClassName(), project, scope);
|
||||
}
|
||||
|
||||
protected final PsiElement getChildValueExpression(String text, DebuggerTreeNode node, DebuggerContext context) {
|
||||
Project project = node.getProject();
|
||||
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
|
||||
return elementFactory.createExpressionFromText(text, getContext(project, context));
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -41,7 +41,7 @@ import java.util.List;
|
||||
* Date: Dec 19, 2003
|
||||
* Time: 1:25:15 PM
|
||||
*/
|
||||
public final class EnumerationChildrenRenderer extends ReferenceRenderer implements ChildrenRenderer{
|
||||
public final class EnumerationChildrenRenderer extends TypeRenderer implements ChildrenRenderer{
|
||||
public static final @NonNls String UNIQUE_ID = "EnumerationChildrenRenderer";
|
||||
|
||||
private boolean myAppendDefaultChildren;
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ import java.util.List;
|
||||
* Date: Sep 17, 2003
|
||||
* Time: 2:04:00 PM
|
||||
*/
|
||||
public class ExpressionChildrenRenderer extends ReferenceRenderer implements ChildrenRenderer {
|
||||
public class ExpressionChildrenRenderer extends TypeRenderer implements ChildrenRenderer {
|
||||
public static final @NonNls String UNIQUE_ID = "ExpressionChildrenRenderer";
|
||||
private static final Key<Value> EXPRESSION_VALUE = new Key<>("EXPRESSION_VALUE");
|
||||
private static final Key<NodeRenderer> LAST_CHILDREN_RENDERER = new Key<>("LAST_CHILDREN_RENDERER");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 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.
|
||||
@@ -28,7 +28,6 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.sun.jdi.PrimitiveValue;
|
||||
import com.sun.jdi.Value;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -40,7 +39,7 @@ import javax.swing.*;
|
||||
* Date: Sep 20, 2003
|
||||
* Time: 10:27:12 PM
|
||||
*/
|
||||
public class LabelRenderer extends ReferenceRenderer implements ValueLabelRenderer{
|
||||
public class LabelRenderer extends TypeRenderer implements ValueLabelRenderer{
|
||||
public static final @NonNls String UNIQUE_ID = "LabelRenderer";
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.ui.impl.watch.render.ClassLabelRenderer");
|
||||
|
||||
@@ -69,7 +68,6 @@ public class LabelRenderer extends ReferenceRenderer implements ValueLabelRender
|
||||
throws EvaluateException {
|
||||
|
||||
final Value value = descriptor.getValue();
|
||||
LOG.assertTrue(!(value instanceof PrimitiveValue));
|
||||
|
||||
String result;
|
||||
final DebugProcess debugProcess = evaluationContext.getDebugProcess();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 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.
|
||||
@@ -16,64 +16,19 @@
|
||||
package com.intellij.debugger.ui.tree.render;
|
||||
|
||||
import com.intellij.debugger.engine.DebuggerUtils;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.psi.CommonClassNames;
|
||||
import com.sun.jdi.ReferenceType;
|
||||
import com.sun.jdi.Type;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class ReferenceRenderer implements Renderer {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.ui.tree.render.ReferenceRenderer");
|
||||
protected BasicRendererProperties myProperties = new BasicRendererProperties();
|
||||
|
||||
public abstract class ReferenceRenderer extends TypeRenderer {
|
||||
protected ReferenceRenderer() {
|
||||
this(CommonClassNames.JAVA_LANG_OBJECT);
|
||||
}
|
||||
|
||||
protected ReferenceRenderer(@NotNull String className) {
|
||||
myProperties.setClassName(className);
|
||||
}
|
||||
|
||||
public String getClassName() {
|
||||
return myProperties.getClassName();
|
||||
}
|
||||
|
||||
public void setClassName(String className) {
|
||||
myProperties.setClassName(className);
|
||||
}
|
||||
|
||||
public Renderer clone() {
|
||||
try {
|
||||
final ReferenceRenderer cloned = (ReferenceRenderer)super.clone();
|
||||
cloned.myProperties = myProperties.clone();
|
||||
return cloned;
|
||||
}
|
||||
catch (CloneNotSupportedException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
return null;
|
||||
super(className);
|
||||
}
|
||||
|
||||
public boolean isApplicable(Type type) {
|
||||
return type != null && type instanceof ReferenceType && DebuggerUtils.instanceOf(type, getClassName());
|
||||
}
|
||||
|
||||
public void writeExternal(Element element) throws WriteExternalException {
|
||||
myProperties.writeExternal(element);
|
||||
}
|
||||
|
||||
public void readExternal(Element element) throws InvalidDataException {
|
||||
myProperties.readExternal(element);
|
||||
}
|
||||
|
||||
protected CachedEvaluator createCachedEvaluator() {
|
||||
return new CachedEvaluator() {
|
||||
protected String getClassName() {
|
||||
return ReferenceRenderer.this.getClassName();
|
||||
}
|
||||
};
|
||||
return type instanceof ReferenceType && DebuggerUtils.instanceOf(type, getClassName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright 2000-2016 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.debugger.ui.tree.render;
|
||||
|
||||
import com.intellij.debugger.engine.DebuggerUtils;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.psi.CommonClassNames;
|
||||
import com.sun.jdi.Type;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class TypeRenderer implements Renderer {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.ui.tree.render.ReferenceRenderer");
|
||||
protected BasicRendererProperties myProperties = new BasicRendererProperties();
|
||||
|
||||
protected TypeRenderer() {
|
||||
this(CommonClassNames.JAVA_LANG_OBJECT);
|
||||
}
|
||||
|
||||
protected TypeRenderer(@NotNull String className) {
|
||||
myProperties.setClassName(className);
|
||||
}
|
||||
|
||||
public String getClassName() {
|
||||
return myProperties.getClassName();
|
||||
}
|
||||
|
||||
public void setClassName(String className) {
|
||||
myProperties.setClassName(className);
|
||||
}
|
||||
|
||||
public Renderer clone() {
|
||||
try {
|
||||
final TypeRenderer cloned = (TypeRenderer)super.clone();
|
||||
cloned.myProperties = myProperties.clone();
|
||||
return cloned;
|
||||
}
|
||||
catch (CloneNotSupportedException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isApplicable(Type type) {
|
||||
return DebuggerUtils.instanceOf(type, getClassName());
|
||||
}
|
||||
|
||||
public void writeExternal(Element element) throws WriteExternalException {
|
||||
myProperties.writeExternal(element);
|
||||
}
|
||||
|
||||
public void readExternal(Element element) throws InvalidDataException {
|
||||
myProperties.readExternal(element);
|
||||
}
|
||||
|
||||
protected CachedEvaluator createCachedEvaluator() {
|
||||
return new CachedEvaluator() {
|
||||
protected String getClassName() {
|
||||
return TypeRenderer.this.getClassName();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,9 @@
|
||||
*/
|
||||
package com.intellij.openapi.editor.impl.view;
|
||||
|
||||
import com.intellij.lang.CodeDocumentationAwareCommenter;
|
||||
import com.intellij.lang.Commenter;
|
||||
import com.intellij.lang.LanguageCommenters;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.bidi.BidiRegionsSeparator;
|
||||
@@ -23,6 +26,7 @@ import com.intellij.openapi.editor.colors.FontPreferences;
|
||||
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
|
||||
import com.intellij.openapi.editor.impl.ComplementaryFontsRegistry;
|
||||
import com.intellij.openapi.editor.impl.FontInfo;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.StringEscapesTokenTypes;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.util.BitUtil;
|
||||
@@ -134,12 +138,23 @@ abstract class LineLayout {
|
||||
HighlighterIterator iterator = view.getEditor().getHighlighter().createIterator(startOffsetInEditor);
|
||||
int endOffsetInEditor = startOffsetInEditor + textLength;
|
||||
while (!iterator.atEnd() && iterator.getStart() < endOffsetInEditor) {
|
||||
int relStartOffset = Math.max(0, iterator.getStart() - startOffsetInEditor);
|
||||
IElementType currentToken = iterator.getTokenType();
|
||||
if (distinctTokens(lastToken, currentToken)) {
|
||||
int tokenStart = Math.max(iterator.getStart(), startOffsetInEditor);
|
||||
addRuns(runs, text, lastOffset - startOffsetInEditor, tokenStart - startOffsetInEditor, flags);
|
||||
String lcPrefix = getLineCommentPrefix(currentToken);
|
||||
if (!StringUtil.isEmpty(lcPrefix) && lcPrefix.length() <= (iterator.getEnd() - iterator.getStart()) &&
|
||||
CharArrayUtil.regionMatches(text, relStartOffset, relStartOffset + lcPrefix.length(), lcPrefix)) {
|
||||
addRuns(runs, text, lastOffset - startOffsetInEditor, relStartOffset, flags);
|
||||
int textStartOffset = Math.min(textLength, Math.min(iterator.getEnd() - startOffsetInEditor,
|
||||
CharArrayUtil.shiftForward(text, relStartOffset + lcPrefix.length(), " \t")));
|
||||
lastOffset = Math.min(iterator.getEnd(), endOffsetInEditor);
|
||||
lastToken = null;
|
||||
addRuns(runs, text, relStartOffset, textStartOffset, flags);
|
||||
addRuns(runs, text, textStartOffset, lastOffset - startOffsetInEditor, flags);
|
||||
}
|
||||
else if (distinctTokens(lastToken, currentToken)) {
|
||||
addRuns(runs, text, lastOffset - startOffsetInEditor, relStartOffset, flags);
|
||||
lastToken = currentToken;
|
||||
lastOffset = tokenStart;
|
||||
lastOffset = relStartOffset + startOffsetInEditor;
|
||||
}
|
||||
iterator.advance();
|
||||
}
|
||||
@@ -151,6 +166,14 @@ abstract class LineLayout {
|
||||
return runs;
|
||||
}
|
||||
|
||||
private static String getLineCommentPrefix(IElementType token) {
|
||||
if (token == null) return null;
|
||||
Commenter commenter = LanguageCommenters.INSTANCE.forLanguage(token.getLanguage());
|
||||
return (commenter instanceof CodeDocumentationAwareCommenter) &&
|
||||
token.equals(((CodeDocumentationAwareCommenter)commenter).getLineCommentTokenType()) ?
|
||||
commenter.getLineCommentPrefix() : null;
|
||||
}
|
||||
|
||||
private static boolean distinctTokens(@Nullable IElementType token1, @Nullable IElementType token2) {
|
||||
if (token1 == token2) return false;
|
||||
if (token1 == null || token2 == null) return true;
|
||||
@@ -162,7 +185,7 @@ abstract class LineLayout {
|
||||
}
|
||||
|
||||
private static void addRuns(List<BidiRun> runs, char[] text, int start, int end, int flags) {
|
||||
if (!Bidi.requiresBidi(text, start, end)) {
|
||||
if (start < end && !Bidi.requiresBidi(text, start, end)) {
|
||||
addOrMergeRun(runs, new BidiRun((byte)0, start, end));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -127,6 +127,9 @@
|
||||
<option name="FONT_TYPE" value="3"/>
|
||||
</value>
|
||||
</option>
|
||||
<option name="DEFAULT_PARAMETER">
|
||||
<value/>
|
||||
</option>
|
||||
<option name="DEFAULT_STATIC_METHOD">
|
||||
<value>
|
||||
<option name="FONT_TYPE" value="2"/>
|
||||
|
||||
+3
-57
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.editor.colors.impl;
|
||||
|
||||
import com.intellij.editor.EditorColorSchemeTestCase;
|
||||
import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsScheme;
|
||||
@@ -23,23 +24,9 @@ import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.markup.EffectType;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.testFramework.LightPlatformCodeInsightTestCase;
|
||||
import org.jdom.Element;
|
||||
import org.jdom.input.DOMBuilder;
|
||||
import org.jdom.output.Format;
|
||||
import org.jdom.output.XMLOutputter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -47,7 +34,7 @@ import static com.intellij.openapi.editor.colors.FontPreferencesTest.*;
|
||||
import static java.util.Collections.singletonList;
|
||||
|
||||
@SuppressWarnings("Duplicates")
|
||||
public class EditorColorsSchemeImplTest extends LightPlatformCodeInsightTestCase {
|
||||
public class EditorColorsSchemeImplTest extends EditorColorSchemeTestCase {
|
||||
EditorColorsSchemeImpl myScheme = new EditorColorsSchemeImpl(null);
|
||||
|
||||
public void testDefaults() {
|
||||
@@ -326,46 +313,5 @@ public class EditorColorsSchemeImplTest extends LightPlatformCodeInsightTestCase
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static EditorColorsScheme loadScheme(@NotNull String docText) throws ParserConfigurationException, IOException, SAXException {
|
||||
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
InputSource inputSource = new InputSource(new StringReader(docText));
|
||||
org.w3c.dom.Document doc = docBuilder.parse(inputSource);
|
||||
Element root = new DOMBuilder().build(doc.getDocumentElement());
|
||||
|
||||
EditorColorsScheme defaultScheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME);
|
||||
EditorColorsScheme targetScheme = new EditorColorsSchemeImpl(defaultScheme);
|
||||
|
||||
targetScheme.readExternal(root);
|
||||
|
||||
return targetScheme;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Pair<EditorColorsScheme,TextAttributes> doTestWriteRead(TextAttributesKey key, TextAttributes attributes)
|
||||
throws WriteExternalException {
|
||||
EditorColorsScheme defaultScheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME);
|
||||
|
||||
EditorColorsScheme sourceScheme = (EditorColorsScheme)defaultScheme.clone();
|
||||
sourceScheme.setName("test");
|
||||
sourceScheme.setAttributes(key, attributes);
|
||||
|
||||
Element root = new Element("scheme");
|
||||
((AbstractColorsScheme)sourceScheme).writeExternal(root);
|
||||
|
||||
EditorColorsScheme targetScheme = new EditorColorsSchemeImpl(defaultScheme);
|
||||
targetScheme.readExternal(root);
|
||||
assertEquals("test", targetScheme.getName());
|
||||
TextAttributes targetAttrs = targetScheme.getAttributes(key);
|
||||
return Pair.create(targetScheme,targetAttrs);
|
||||
}
|
||||
|
||||
private static void assertXmlOutputEquals(String expected, Element root) throws IOException {
|
||||
StringWriter writer = new StringWriter();
|
||||
Format format = Format.getPrettyFormat();
|
||||
format.setLineSeparator("\n");
|
||||
new XMLOutputter(format).output(root, writer);
|
||||
String actual = writer.toString();
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -594,6 +594,12 @@ public class EditorRtlTest extends AbstractEditorTest {
|
||||
EditorSettingsExternalizable.getInstance().setBidiTextDirection(savedValue);
|
||||
}
|
||||
}
|
||||
|
||||
public void testLineCommentLayout() throws Exception {
|
||||
prepare("<caret>// R", TestFileType.JAVA);
|
||||
right();
|
||||
checkResult("/<caret>/ R");
|
||||
}
|
||||
|
||||
private void prepareText(String text) throws IOException {
|
||||
prepare(text, TestFileType.TEXT);
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2000-2016 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.editor;
|
||||
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsScheme;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.colors.impl.AbstractColorsScheme;
|
||||
import com.intellij.openapi.editor.colors.impl.EditorColorsSchemeImpl;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.testFramework.LightPlatformTestCase;
|
||||
import org.jdom.Element;
|
||||
import org.jdom.input.DOMBuilder;
|
||||
import org.jdom.output.Format;
|
||||
import org.jdom.output.XMLOutputter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.w3c.dom.Document;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
|
||||
public abstract class EditorColorSchemeTestCase extends LightPlatformTestCase {
|
||||
protected static EditorColorsScheme loadScheme(@NotNull String docText) throws ParserConfigurationException, IOException, SAXException {
|
||||
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
InputSource inputSource = new InputSource(new StringReader(docText));
|
||||
Document doc = docBuilder.parse(inputSource);
|
||||
Element root = new DOMBuilder().build(doc.getDocumentElement());
|
||||
|
||||
EditorColorsScheme defaultScheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME);
|
||||
EditorColorsScheme targetScheme = new EditorColorsSchemeImpl(defaultScheme);
|
||||
|
||||
targetScheme.readExternal(root);
|
||||
|
||||
return targetScheme;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected Pair<EditorColorsScheme, TextAttributes> doTestWriteRead(TextAttributesKey key, TextAttributes attributes)
|
||||
throws WriteExternalException {
|
||||
EditorColorsScheme defaultScheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME);
|
||||
|
||||
EditorColorsScheme sourceScheme = (EditorColorsScheme)defaultScheme.clone();
|
||||
sourceScheme.setName("test");
|
||||
sourceScheme.setAttributes(key, attributes);
|
||||
|
||||
Element root = new Element("scheme");
|
||||
((AbstractColorsScheme)sourceScheme).writeExternal(root);
|
||||
|
||||
EditorColorsScheme targetScheme = new EditorColorsSchemeImpl(defaultScheme);
|
||||
targetScheme.readExternal(root);
|
||||
assertEquals("test", targetScheme.getName());
|
||||
TextAttributes targetAttrs = targetScheme.getAttributes(key);
|
||||
return Pair.create(targetScheme, targetAttrs);
|
||||
}
|
||||
|
||||
protected static void assertXmlOutputEquals(String expected, Element root) throws IOException {
|
||||
StringWriter writer = new StringWriter();
|
||||
Format format = Format.getPrettyFormat();
|
||||
format.setLineSeparator("\n");
|
||||
new XMLOutputter(format).output(root, writer);
|
||||
String actual = writer.toString();
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -478,7 +478,11 @@ public class StudyProjectGenerator {
|
||||
flushCache(myCourses);
|
||||
if (courseName != null && !courseName.getName().equals(unzippedName)) {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
courseDir.renameTo(new File(OUR_COURSES_DIR, courseName.getName()));
|
||||
File dest = new File(OUR_COURSES_DIR, courseName.getName());
|
||||
if (dest.exists()) {
|
||||
FileUtil.delete(dest);
|
||||
}
|
||||
courseDir.renameTo(dest);
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
courseDir.delete();
|
||||
}
|
||||
|
||||
@@ -46,9 +46,9 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.jetbrains.python.sdk.PythonEnvUtil.setPythonIOEncoding;
|
||||
import static com.jetbrains.python.sdk.PythonEnvUtil.setPythonUnbuffered;
|
||||
import static com.jetbrains.python.sdk.PythonEnvUtil.*;
|
||||
|
||||
/**
|
||||
* User : catherine
|
||||
@@ -165,10 +165,14 @@ public class SphinxBaseCommand {
|
||||
}
|
||||
}
|
||||
|
||||
setPythonIOEncoding(cmd.getEnvironment(), "utf-8");
|
||||
setPythonUnbuffered(cmd.getEnvironment());
|
||||
cmd.getEnvironment().put("PYCHARM_EP_DIST", "Sphinx");
|
||||
cmd.getEnvironment().put("PYCHARM_EP_NAME", "sphinx-quickstart");
|
||||
final Map<String, String> env = cmd.getEnvironment();
|
||||
setPythonIOEncoding(env, "utf-8");
|
||||
setPythonUnbuffered(env);
|
||||
if (sdkHomePath != null) {
|
||||
resetHomePathChanges(sdkHomePath, env);
|
||||
}
|
||||
env.put("PYCHARM_EP_DIST", "Sphinx");
|
||||
env.put("PYCHARM_EP_NAME", "sphinx-quickstart");
|
||||
|
||||
List<String> pathList = Lists.newArrayList(PythonCommandLineState.getAddedPaths(sdk));
|
||||
pathList.addAll(PythonCommandLineState.collectPythonPath(module));
|
||||
|
||||
@@ -144,7 +144,9 @@ public enum PythonHelper implements HelperPackage {
|
||||
args.add(asParamString());
|
||||
args.addAll(parameters);
|
||||
final GeneralCommandLine cmd = new GeneralCommandLine(args);
|
||||
addToPythonPath(cmd.getEnvironment());
|
||||
final Map<String, String> env = cmd.getEnvironment();
|
||||
addToPythonPath(env);
|
||||
PythonEnvUtil.resetHomePathChanges(sdkPath, env);
|
||||
return cmd;
|
||||
}
|
||||
|
||||
|
||||
@@ -105,6 +105,9 @@ public class PyRunCythonExtensionsFilter implements Filter {
|
||||
final Map<String, String> environment = new HashMap<String, String>(System.getenv());
|
||||
PythonEnvUtil.setPythonUnbuffered(environment);
|
||||
PythonEnvUtil.setPythonDontWriteBytecode(environment);
|
||||
if (sdkPath != null) {
|
||||
PythonEnvUtil.resetHomePathChanges(sdkPath, environment);
|
||||
}
|
||||
GeneralCommandLine commandLine = new GeneralCommandLine(cmdline).withEnvironment(environment);
|
||||
|
||||
final boolean canCreate = FileUtil.ensureCanCreateFile(new File(helpersPath));
|
||||
|
||||
@@ -442,10 +442,11 @@ public class PyPackageManagerImpl extends PyPackageManager {
|
||||
final boolean useSudo = !canCreate && !SystemInfo.isWindows && askForSudo;
|
||||
|
||||
try {
|
||||
final Map<String, String> environment = new HashMap<>(System.getenv());
|
||||
final GeneralCommandLine commandLine = new GeneralCommandLine(cmdline).withWorkDirectory(workingDir);
|
||||
final Map<String, String> environment = commandLine.getEnvironment();
|
||||
PythonEnvUtil.setPythonUnbuffered(environment);
|
||||
PythonEnvUtil.setPythonDontWriteBytecode(environment);
|
||||
final GeneralCommandLine commandLine = new GeneralCommandLine(cmdline).withWorkDirectory(workingDir).withEnvironment(environment);
|
||||
PythonEnvUtil.resetHomePathChanges(homePath, environment);
|
||||
final Process process;
|
||||
if (useSudo) {
|
||||
process = ExecUtil.sudo(commandLine, "Please enter your password to make changes in system packages: ");
|
||||
|
||||
@@ -289,7 +289,7 @@ public abstract class PythonCommandLineState extends CommandLineState {
|
||||
env.putAll(myConfig.getEnvs());
|
||||
}
|
||||
|
||||
addCommonEnvironmentVariables(env);
|
||||
addCommonEnvironmentVariables(getInterpreterPath(project, myConfig), env);
|
||||
|
||||
commandLine.getEnvironment().clear();
|
||||
commandLine.getEnvironment().putAll(env);
|
||||
@@ -298,8 +298,11 @@ public abstract class PythonCommandLineState extends CommandLineState {
|
||||
buildPythonPath(project, commandLine, myConfig, isDebug);
|
||||
}
|
||||
|
||||
protected static void addCommonEnvironmentVariables(Map<String, String> env) {
|
||||
protected static void addCommonEnvironmentVariables(@Nullable String homePath, Map<String, String> env) {
|
||||
PythonEnvUtil.setPythonUnbuffered(env);
|
||||
if (homePath != null) {
|
||||
PythonEnvUtil.resetHomePathChanges(homePath, env);
|
||||
}
|
||||
env.put("PYCHARM_HOSTED", "1");
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -191,6 +190,9 @@ public class PythonTask {
|
||||
}
|
||||
|
||||
PythonEnvUtil.setPythonUnbuffered(env);
|
||||
if (homePath != null) {
|
||||
PythonEnvUtil.resetHomePathChanges(homePath, env);
|
||||
}
|
||||
|
||||
List<String> pythonPath = setupPythonPath();
|
||||
PythonCommandLineState.initPythonPath(cmd, true, pythonPath, homePath);
|
||||
|
||||
@@ -121,6 +121,7 @@ public class PySdkUtil {
|
||||
final Map<String, String> systemEnv = System.getenv();
|
||||
final Map<String, String> expandedCmdEnv = mergeEnvVariables(systemEnv, cmd.getEnvironment());
|
||||
final Map<String, String> env = extraEnv != null ? mergeEnvVariables(expandedCmdEnv, extraEnv) : expandedCmdEnv;
|
||||
PythonEnvUtil.resetHomePathChanges(homePath, env);
|
||||
try {
|
||||
|
||||
final GeneralCommandLine commandLine = cmd.withWorkDirectory(homePath).withEnvironment(env);
|
||||
|
||||
@@ -34,6 +34,7 @@ public class PythonEnvUtil {
|
||||
@SuppressWarnings("SpellCheckingInspection") public static final String PYTHONIOENCODING = "PYTHONIOENCODING";
|
||||
@SuppressWarnings("SpellCheckingInspection") public static final String IPYTHONENABLE = "IPYTHONENABLE";
|
||||
@SuppressWarnings("SpellCheckingInspection") public static final String PYTHONDONTWRITEBYTECODE = "PYTHONDONTWRITEBYTECODE";
|
||||
@SuppressWarnings("SpellCheckingInspection") public static final String PYVENV_LAUNCHER = "__PYVENV_LAUNCHER__";
|
||||
|
||||
private PythonEnvUtil() { }
|
||||
|
||||
@@ -47,6 +48,16 @@ public class PythonEnvUtil {
|
||||
return env;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the environment variables that affect the way the Python interpreter searches for its settings and libraries.
|
||||
*/
|
||||
public static Map<String, String> resetHomePathChanges(@NotNull String homePath, @NotNull Map<String, String> env) {
|
||||
if (System.getenv(PYVENV_LAUNCHER) != null) {
|
||||
env.put(PYVENV_LAUNCHER, homePath);
|
||||
}
|
||||
return env;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a value to the end os a path-like environment variable, using system-dependent path separator.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user