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:
@@ -50,7 +50,7 @@ public class ProcessedModulesTable extends JPanel {
|
||||
myTable.getEmptyText().setText("No modules configured");
|
||||
|
||||
//myTable.setShowGrid(false);
|
||||
myTable.setIntercellSpacing(new Dimension(0, 0));
|
||||
myTable.setIntercellSpacing(JBUI.emptySize());
|
||||
myTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
|
||||
myTable.setColumnSelectionAllowed(false);
|
||||
|
||||
|
||||
+1
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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,7 +16,6 @@
|
||||
package com.intellij.debugger.ui.breakpoints;
|
||||
|
||||
import com.intellij.debugger.engine.DebuggerUtils;
|
||||
import com.intellij.execution.filters.LineNumbersMapping;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
@@ -129,9 +128,6 @@ public abstract class JavaLineBreakpointTypeBase<P extends JavaBreakpointPropert
|
||||
result.set(JavaLineBreakpointType.class);
|
||||
}
|
||||
}
|
||||
else if (file.getUserData(LineNumbersMapping.LINE_NUMBERS_MAPPING_KEY) != null) {
|
||||
result.set(JavaLineBreakpointType.class);
|
||||
}
|
||||
}
|
||||
if (result.isNull()) {
|
||||
result.set(JavaMethodBreakpointType.class);
|
||||
|
||||
+3
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -29,6 +29,7 @@ import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.ui.TableUtil;
|
||||
import com.intellij.util.ui.AbstractTableCellEditor;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.Table;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -64,7 +65,7 @@ public class NamedChildrenConfigurable implements UnnamedConfigurable{
|
||||
myCompletionEditor = ((DebuggerUtilsEx)DebuggerUtils.getInstance()).createEditor(project, psiClass, "NamedChildrenConfigurable");
|
||||
|
||||
myTable.setDragEnabled(false);
|
||||
myTable.setIntercellSpacing(new Dimension(0, 0));
|
||||
myTable.setIntercellSpacing(JBUI.emptySize());
|
||||
|
||||
myTable.getColumn(expressionColumnName).setCellEditor(new AbstractTableCellEditor() {
|
||||
public Object getCellEditorValue() {
|
||||
|
||||
@@ -18,8 +18,8 @@ package org.jetbrains.java.generate.psi;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.JavaSdkVersion;
|
||||
import com.intellij.openapi.projectRoots.JavaVersionService;
|
||||
import com.intellij.openapi.projectRoots.JdkVersionUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
@@ -670,7 +670,11 @@ public class PsiAdapter {
|
||||
}
|
||||
|
||||
public static int getJavaVersion(PsiElement element) {
|
||||
final JavaSdkVersion sdkVersion = JavaVersionService.getInstance().getJavaSdkVersion(element);
|
||||
JavaSdkVersion sdkVersion = JavaVersionService.getInstance().getJavaSdkVersion(element);
|
||||
if (sdkVersion == null) {
|
||||
sdkVersion = JavaSdkVersion.fromLanguageLevel(PsiUtil.getLanguageLevel(element));
|
||||
}
|
||||
|
||||
int version = 0;
|
||||
switch (sdkVersion) {
|
||||
case JDK_1_0:
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.intellij.openapi.projectRoots;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author anna
|
||||
@@ -28,6 +29,7 @@ public class JavaVersionServiceImpl extends JavaVersionService {
|
||||
return JavaSdkVersionUtil.isAtLeast(element, version);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public JavaSdkVersion getJavaSdkVersion(@NotNull PsiElement element) {
|
||||
return JavaSdkVersionUtil.getJavaSdkVersion(element);
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class JavaVersionService {
|
||||
public static JavaVersionService getInstance() {
|
||||
@@ -33,6 +34,7 @@ public class JavaVersionService {
|
||||
return PsiUtil.getLanguageLevel(element).isAtLeast(version.getMaxLanguageLevel());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JavaSdkVersion getJavaSdkVersion(@NotNull PsiElement element) {
|
||||
return JavaSdkVersion.fromLanguageLevel(PsiUtil.getLanguageLevel(element));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -23,20 +23,40 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Represents a JavaDoc comment.
|
||||
*/
|
||||
public interface PsiDocComment extends PsiComment, PsiDocCommentBase {
|
||||
/**
|
||||
* Returns the class, method or field described by the comment.
|
||||
*/
|
||||
@Override
|
||||
@Nullable
|
||||
PsiDocCommentOwner getOwner();
|
||||
|
||||
/**
|
||||
* Returns the PSI elements containing the description of the element being documented
|
||||
* (all significant tokens up to the first doc comment tag).
|
||||
*/
|
||||
@NotNull
|
||||
PsiElement[] getDescriptionElements();
|
||||
|
||||
/**
|
||||
* Returns the list of JavaDoc tags in the comment.
|
||||
*/
|
||||
@NotNull
|
||||
PsiDocTag[] getTags();
|
||||
|
||||
/**
|
||||
* Finds the first JavaDoc tag with the specified name.
|
||||
* @return the tag with the specified name, or null if not found.
|
||||
*/
|
||||
@Nullable
|
||||
PsiDocTag findTagByName(@NonNls String name);
|
||||
|
||||
/**
|
||||
* Finds all JavaDoc tags with the specified name.
|
||||
*/
|
||||
@NotNull
|
||||
PsiDocTag[] findTagsByName(@NonNls String name);
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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,13 +22,38 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public interface PsiDocTag extends PsiElement, PsiNamedElement{
|
||||
/**
|
||||
* Represents a JavaDoc tag (either an inline tag or a block tag).
|
||||
*/
|
||||
public interface PsiDocTag extends PsiElement, PsiNamedElement {
|
||||
PsiDocTag[] EMPTY_ARRAY = new PsiDocTag[0];
|
||||
|
||||
/**
|
||||
* Returns the doc comment in which the tag is conained.
|
||||
*/
|
||||
PsiDocComment getContainingComment();
|
||||
|
||||
/**
|
||||
* Returns the token representing the name of this JavaDoc tag.
|
||||
*/
|
||||
PsiElement getNameElement();
|
||||
|
||||
/**
|
||||
* Returns the name of this JavaDoc tag.
|
||||
*/
|
||||
@Override
|
||||
@NonNls @NotNull String getName();
|
||||
|
||||
/**
|
||||
* Returns the list of all elements representing the contents of a tag.
|
||||
*/
|
||||
PsiElement[] getDataElements();
|
||||
|
||||
/**
|
||||
* Returns the element specifying what exactly is being documented by this tag
|
||||
* (for example, the parameter name for a param tag or the exception name for a throws tag).
|
||||
*
|
||||
* @return the element, or null if the tag structure does not include such an element.
|
||||
*/
|
||||
@Nullable PsiDocTagValue getValueElement();
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -19,8 +19,13 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
|
||||
/**
|
||||
* Represents a token inside a JavaDoc comment.
|
||||
*
|
||||
* @author Mike
|
||||
*/
|
||||
public interface PsiDocToken extends PsiElement {
|
||||
/**
|
||||
* Returns the element type of this token.
|
||||
*/
|
||||
IElementType getTokenType();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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,5 +15,8 @@
|
||||
*/
|
||||
package com.intellij.psi.javadoc;
|
||||
|
||||
/**
|
||||
* Represents an inline JavaDoc tag.
|
||||
*/
|
||||
public interface PsiInlineDocTag extends PsiDocTag {
|
||||
}
|
||||
@@ -16,10 +16,7 @@
|
||||
package org.jetbrains.jps.incremental;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.LowMemoryWatcher;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.UserDataHolder;
|
||||
import com.intellij.openapi.util.UserDataHolderBase;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.SmartList;
|
||||
@@ -84,7 +81,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||
public class IncProjectBuilder {
|
||||
private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.IncProjectBuilder");
|
||||
|
||||
private static final String CLASSPATH_INDEX_FINE_NAME = "classpath.index";
|
||||
private static final String CLASSPATH_INDEX_FILE_NAME = "classpath.index";
|
||||
private static final boolean GENERATE_CLASSPATH_INDEX = Boolean.parseBoolean(System.getProperty(GlobalOptions.GENERATE_CLASSPATH_INDEX_OPTION, "false"));
|
||||
private static final boolean SYNC_DELETE = Boolean.parseBoolean(System.getProperty("jps.sync.delete", SystemInfo.isWindows ? "true" : "false"));
|
||||
private static final GlobalContextKey<Set<BuildTarget<?>>> TARGET_WITH_CLEARED_OUTPUT = GlobalContextKey.create("_targets_with_cleared_output_");
|
||||
@@ -334,7 +331,25 @@ public class IncProjectBuilder {
|
||||
BuildRunner.PARALLEL_BUILD_ENABLED);
|
||||
|
||||
context.addBuildListener(new ChainedTargetsBuildListener(context));
|
||||
|
||||
//Deletes class loader classpath index files for changed output roots
|
||||
context.addBuildListener(new BuildListener() {
|
||||
@Override
|
||||
public void filesGenerated(Collection<Pair<String, String>> paths) {
|
||||
final Set<File> outputs = new THashSet<File>(FileUtil.FILE_HASHING_STRATEGY);
|
||||
for (Pair<String, String> pair : paths) {
|
||||
outputs.add(new File(pair.getFirst()));
|
||||
}
|
||||
for (File root : outputs) {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
new File(root, CLASSPATH_INDEX_FILE_NAME).delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void filesDeleted(Collection<String> paths) {
|
||||
}
|
||||
});
|
||||
for (TargetBuilder builder : myBuilderRegistry.getTargetBuilders()) {
|
||||
builder.buildStarted(context);
|
||||
}
|
||||
@@ -965,7 +980,7 @@ public class IncProjectBuilder {
|
||||
File outputDir = ((ModuleBuildTarget)target).getOutputDir();
|
||||
if (outputDir != null && outputDirs.add(outputDir)) {
|
||||
try {
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(outputDir, CLASSPATH_INDEX_FINE_NAME)));
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(outputDir, CLASSPATH_INDEX_FILE_NAME)));
|
||||
try {
|
||||
writeIndex(writer, outputDir, "");
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public class OptimizeImportsAction extends AnAction {
|
||||
if (file == null) return;
|
||||
dir = file.getContainingDirectory();
|
||||
}
|
||||
else if (files != null && ReformatCodeAction.areFiles(files)) {
|
||||
else if (files != null && ReformatCodeAction.containsAtLeastOneFile(files)) {
|
||||
final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(files);
|
||||
if (!operationStatus.hasReadonlyFiles()) {
|
||||
new OptimizeImportsProcessor(project, ReformatCodeAction.convertToPsiFiles(files, project), null).run();
|
||||
@@ -160,7 +160,7 @@ public class OptimizeImportsAction extends AnAction {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (files != null && ReformatCodeAction.areFiles(files)) {
|
||||
else if (files != null && ReformatCodeAction.containsAtLeastOneFile(files)) {
|
||||
boolean anyHasOptimizeImports = false;
|
||||
for (VirtualFile virtualFile : files) {
|
||||
PsiFile file = PsiManager.getInstance(project).findFile(virtualFile);
|
||||
|
||||
@@ -88,7 +88,7 @@ public class ReformatCodeAction extends AnAction implements DumbAware {
|
||||
dir = file.getContainingDirectory();
|
||||
hasSelection = editor.getSelectionModel().hasSelection();
|
||||
}
|
||||
else if (areFiles(files)) {
|
||||
else if (containsAtLeastOneFile(files)) {
|
||||
final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(files);
|
||||
if (!operationStatus.hasReadonlyFiles()) {
|
||||
ReformatFilesOptions selectedFlags = getReformatFilesOptions(project, files);
|
||||
@@ -118,9 +118,6 @@ public class ReformatCodeAction extends AnAction implements DumbAware {
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (files != null && files.length == 1) {
|
||||
file = PsiManager.getInstance(project).findFile(files[0]);
|
||||
}
|
||||
else {
|
||||
PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(dataContext);
|
||||
if (element == null) return;
|
||||
@@ -385,7 +382,7 @@ public class ReformatCodeAction extends AnAction implements DumbAware {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (files!= null && areFiles(files)) {
|
||||
else if (files!= null && containsAtLeastOneFile(files)) {
|
||||
boolean anyFormatters = false;
|
||||
for (VirtualFile virtualFile : files) {
|
||||
if (virtualFile.isDirectory()) {
|
||||
@@ -490,9 +487,9 @@ public class ReformatCodeAction extends AnAction implements DumbAware {
|
||||
myTestOptions = options;
|
||||
}
|
||||
|
||||
public static boolean areFiles(final VirtualFile[] files) {
|
||||
public static boolean containsAtLeastOneFile(final VirtualFile[] files) {
|
||||
if (files == null) return false;
|
||||
if (files.length < 2) return false;
|
||||
if (files.length < 1) return false;
|
||||
for (VirtualFile virtualFile : files) {
|
||||
if (virtualFile.isDirectory()) return false;
|
||||
}
|
||||
|
||||
+2
-14
@@ -33,6 +33,7 @@ import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.EmptyRunnable;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.speedSearch.SpeedSearchSupply;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.NullableFunction;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
@@ -947,20 +948,7 @@ public class TemplateListPanel extends JPanel implements Disposable {
|
||||
}
|
||||
|
||||
void selectNode(@NotNull String searchQuery) {
|
||||
for (TemplateGroup group : myTemplateGroups) {
|
||||
for (TemplateImpl template : group.getElements()) {
|
||||
if (StringUtil.startsWithIgnoreCase(template.getKey(), searchQuery)) {
|
||||
selectTemplate(group.getName(), template.getKey());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (TemplateGroup group : myTemplateGroups) {
|
||||
if (StringUtil.startsWithIgnoreCase(group.getName(), searchQuery)) {
|
||||
selectTemplate(group.getName(), null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
ObjectUtils.assertNotNull(SpeedSearchSupply.getSupply(myTree, true)).findAndSelectElement(searchQuery);
|
||||
}
|
||||
|
||||
private void selectTemplate(@Nullable final String groupName, @Nullable final String templateKey) {
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.intellij.ui.*;
|
||||
import com.intellij.ui.components.panels.VerticalLayout;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.ui.ColorIcon;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
@@ -237,11 +238,11 @@ public class ScopeEditorPanel {
|
||||
myPackageTree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(TreeSelectionEvent e) {
|
||||
final boolean recursiveEnabled = isButtonEnabled(true, e.getPaths(), e);
|
||||
final boolean recursiveEnabled = isButtonEnabled(true);
|
||||
includeRec.setEnabled(recursiveEnabled);
|
||||
excludeRec.setEnabled(recursiveEnabled);
|
||||
|
||||
final boolean nonRecursiveEnabled = isButtonEnabled(false, e.getPaths(), e);
|
||||
final boolean nonRecursiveEnabled = isButtonEnabled(false);
|
||||
include.setEnabled(nonRecursiveEnabled);
|
||||
exclude.setEnabled(nonRecursiveEnabled);
|
||||
}
|
||||
@@ -281,19 +282,6 @@ public class ScopeEditorPanel {
|
||||
return buttonsPanel;
|
||||
}
|
||||
|
||||
static boolean isButtonEnabled(boolean rec, TreePath[] paths, TreeSelectionEvent e) {
|
||||
if (paths != null) {
|
||||
for (TreePath path : paths) {
|
||||
if (!e.isAddedPath(path)) continue;
|
||||
final PackageDependenciesNode node = (PackageDependenciesNode)path.getLastPathComponent();
|
||||
if (PatternDialectProvider.getInstance(DependencyUISettings.getInstance().SCOPE_TYPE).createPackageSet(node, rec) != null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean isButtonEnabled(boolean rec) {
|
||||
final TreePath[] paths = myPackageTree.getSelectionPaths();
|
||||
if (paths != null) {
|
||||
|
||||
@@ -80,4 +80,10 @@ public abstract class SpeedSearchSupply {
|
||||
|
||||
public abstract void addChangeListener(@NotNull PropertyChangeListener listener);
|
||||
public abstract void removeChangeListener(@NotNull PropertyChangeListener listener);
|
||||
|
||||
/**
|
||||
* Find an element matching the searching query in the underlying component and select it there. Speed-search popup is not affected.
|
||||
* @param searchQuery text that the selected element should match
|
||||
*/
|
||||
public abstract void findAndSelectElement(@NotNull String searchQuery);
|
||||
}
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2000-2015 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.notification.impl;
|
||||
|
||||
import com.intellij.ide.ui.search.SearchableOptionContributor;
|
||||
import com.intellij.ide.ui.search.SearchableOptionProcessor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class NotificationSearchableOptionContributor extends SearchableOptionContributor {
|
||||
@Override
|
||||
public void processOptions(@NotNull SearchableOptionProcessor processor) {
|
||||
for (NotificationSettings settings : NotificationsConfigurationImpl.getInstanceImpl().getAllSettings()) {
|
||||
processor.addOptions(settings.getGroupId(), null, settings.getGroupId() + " notifications", NotificationsConfigurable.ID, NotificationsConfigurable.DISPLAY_NAME, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
+8
-2
@@ -30,6 +30,7 @@ import javax.swing.*;
|
||||
*/
|
||||
public class NotificationsConfigurable implements Configurable, SearchableConfigurable, Configurable.NoScroll {
|
||||
public static final String DISPLAY_NAME = "Notifications";
|
||||
static final String ID = "reference.settings.ide.settings.notifications";
|
||||
private NotificationsConfigurablePanel myComponent;
|
||||
|
||||
@Override
|
||||
@@ -41,7 +42,7 @@ public class NotificationsConfigurable implements Configurable, SearchableConfig
|
||||
@Override
|
||||
@NotNull
|
||||
public String getHelpTopic() {
|
||||
return "reference.settings.ide.settings.notifications";
|
||||
return ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,6 +83,11 @@ public class NotificationsConfigurable implements Configurable, SearchableConfig
|
||||
|
||||
@Override
|
||||
public Runnable enableSearch(final String option) {
|
||||
return null;
|
||||
return new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
myComponent.selectGroup(option);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -23,6 +23,8 @@ import com.intellij.openapi.ui.ComboBoxTableRenderer;
|
||||
import com.intellij.openapi.ui.StripeTable;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.speedSearch.SpeedSearchSupply;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -427,4 +429,8 @@ public class NotificationsConfigurablePanel extends JPanel implements Disposable
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public void selectGroup(String searchQuery) {
|
||||
ObjectUtils.assertNotNull(SpeedSearchSupply.getSupply(myTable, true)).findAndSelectElement(searchQuery);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,6 +338,11 @@ public abstract class SpeedSearchBase<Comp extends JComponent> extends SpeedSear
|
||||
if ( mySearchPopup != null ) mySearchPopup.refreshSelection();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findAndSelectElement(@NotNull String searchQuery) {
|
||||
selectElement(findElement(searchQuery), searchQuery);
|
||||
}
|
||||
|
||||
private class SearchPopup extends JPanel {
|
||||
private final SearchField mySearchField;
|
||||
|
||||
@@ -425,7 +430,7 @@ public abstract class SpeedSearchBase<Comp extends JComponent> extends SpeedSear
|
||||
}
|
||||
|
||||
public void refreshSelection () {
|
||||
updateSelection(findElement(mySearchField.getText()));
|
||||
findAndSelectElement(mySearchField.getText());
|
||||
}
|
||||
|
||||
private void updateSelection(Object element) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -35,6 +35,7 @@ import com.intellij.ui.switcher.SwitchProvider;
|
||||
import com.intellij.ui.switcher.SwitchTarget;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -100,7 +101,7 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene
|
||||
|
||||
myFocusProxy = new Wrapper.FocusHolder();
|
||||
myFocusProxy.setOpaque(false);
|
||||
myFocusProxy.setPreferredSize(new Dimension(0, 0));
|
||||
myFocusProxy.setPreferredSize(JBUI.emptySize());
|
||||
|
||||
MyContentComponent contentComponent = new MyContentComponent();
|
||||
contentComponent.setContent(myUI.getComponent());
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -49,6 +49,7 @@ import com.intellij.util.IJSwingUtilities;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.ui.ChildFocusWatcher;
|
||||
import com.intellij.util.ui.EmptyIcon;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -292,7 +293,7 @@ public class AbstractPopup implements JBPopup {
|
||||
else {
|
||||
myCaption = new CaptionPanel();
|
||||
myCaption.setBorder(null);
|
||||
myCaption.setPreferredSize(new Dimension(0, 0));
|
||||
myCaption.setPreferredSize(JBUI.emptySize());
|
||||
}
|
||||
|
||||
setWindowActive(myHeaderAlwaysFocusable);
|
||||
|
||||
@@ -241,6 +241,7 @@
|
||||
displayName="Notifications"
|
||||
id="reference.settings.ide.settings.notifications"
|
||||
provider="com.intellij.notification.impl.NotificationsConfigurableProvider"/>
|
||||
<search.optionContributor implementation="com.intellij.notification.impl.NotificationSearchableOptionContributor"/>
|
||||
|
||||
<!-- Plugins -->
|
||||
<applicationConfigurable groupId="root" groupWeight="55" instance="com.intellij.ide.plugins.PluginManagerConfigurable" id="preferences.pluginManager"
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
<remoteServer.deploymentSource.type implementation="com.intellij.remoteServer.impl.configuration.deployment.ModuleDeploymentSourceType"/>
|
||||
|
||||
<productivityFeaturesProvider implementation="com.intellij.remoteServer.statistics.CloudFeaturesProvider"/>
|
||||
|
||||
<tipAndTrick file="UploadSshKey.html" feature-id="upload.ssh.key"/>
|
||||
</extensions>
|
||||
<application-components>
|
||||
<component>
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package org.jetbrains.debugger;
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.xdebugger.XDebuggerUtil;
|
||||
import com.intellij.xdebugger.XSourcePosition;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public final class DebuggerSupportUtils {
|
||||
@Nullable
|
||||
public static XSourcePosition calcSourcePosition(@Nullable PsiElement element) {
|
||||
if (element != null) {
|
||||
PsiElement navigationElement = element.getNavigationElement();
|
||||
VirtualFile file = navigationElement.getContainingFile().getVirtualFile();
|
||||
if (file != null) {
|
||||
return XDebuggerUtil.getInstance().createPositionByOffset(file, navigationElement.getTextOffset());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,7 @@ public class FileSystemUtil {
|
||||
@Nullable
|
||||
protected abstract String resolveSymLink(@NotNull String path) throws Exception;
|
||||
|
||||
protected boolean clonePermissions(@NotNull String source, @NotNull String target) throws Exception { return false; }
|
||||
protected boolean clonePermissions(@NotNull String source, @NotNull String target, boolean onlyPermissionsToExecute) throws Exception { return false; }
|
||||
|
||||
@NotNull
|
||||
private String getName() { return getClass().getSimpleName().replace("MediatorImpl", ""); }
|
||||
@@ -196,7 +196,21 @@ public class FileSystemUtil {
|
||||
*/
|
||||
public static boolean clonePermissions(@NotNull String source, @NotNull String target) {
|
||||
try {
|
||||
return ourMediator.clonePermissions(source, target);
|
||||
return ourMediator.clonePermissions(source, target, false);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.warn(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gives the second file permissions to execute of the first one if possible; returns true if succeed.
|
||||
* Will do nothing on Windows.
|
||||
*/
|
||||
public static boolean clonePermissionsToExecute(@NotNull String source, @NotNull String target) {
|
||||
try {
|
||||
return ourMediator.clonePermissions(source, target, true);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.warn(e);
|
||||
@@ -303,21 +317,44 @@ public class FileSystemUtil {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean clonePermissions(@NotNull String source, @NotNull String target) throws Exception {
|
||||
protected boolean clonePermissions(@NotNull String source, @NotNull String target, boolean onlyPermissionsToExecute) throws Exception {
|
||||
if (SystemInfo.isUnix) {
|
||||
Object pathObj = myGetPath.invoke(myDefaultFileSystem, source, ArrayUtil.EMPTY_STRING_ARRAY);
|
||||
Map attributes = (Map)myReadAttributes.invoke(null, pathObj, "posix:permissions", myLinkOptions);
|
||||
if (attributes != null) {
|
||||
Object permissions = attributes.get("permissions");
|
||||
if (permissions instanceof Collection) {
|
||||
mySetAttribute.invoke(null, pathObj, "posix:permissions", permissions, myLinkOptions);
|
||||
return true;
|
||||
Object sourcePath = myGetPath.invoke(myDefaultFileSystem, source, ArrayUtil.EMPTY_STRING_ARRAY);
|
||||
Object targetPath = myGetPath.invoke(myDefaultFileSystem, target, ArrayUtil.EMPTY_STRING_ARRAY);
|
||||
Collection sourcePermissions = getPermissions(sourcePath);
|
||||
if (sourcePermissions != null) {
|
||||
Collection permissionsToSet;
|
||||
if (onlyPermissionsToExecute) {
|
||||
Collection targetPermissions = getPermissions(targetPath);
|
||||
permissionsToSet = new HashSet();
|
||||
for (Object permission : targetPermissions) {
|
||||
if (!permission.toString().endsWith("_EXECUTE")) {
|
||||
permissionsToSet.add(permission);
|
||||
}
|
||||
}
|
||||
for (Object permission : sourcePermissions) {
|
||||
if (permission.toString().endsWith("_EXECUTE")) {
|
||||
permissionsToSet.add(permission);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
permissionsToSet = sourcePermissions;
|
||||
}
|
||||
mySetAttribute.invoke(null, targetPath, "posix:permissions", permissionsToSet, myLinkOptions);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Collection getPermissions(Object sourcePath) throws IllegalAccessException, InvocationTargetException {
|
||||
Map attributes = (Map)myReadAttributes.invoke(null, sourcePath, "posix:permissions", myLinkOptions);
|
||||
if (attributes == null) return null;
|
||||
Object permissions = attributes.get("permissions");
|
||||
return permissions instanceof Collection<?> ? (Collection)permissions : null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -346,6 +383,7 @@ public class FileSystemUtil {
|
||||
int S_IFREG = 0100000; // regular file
|
||||
int S_IFDIR = 0040000; // directory
|
||||
int PERM_MASK = 0777;
|
||||
int EXECUTE_MASK = 0111;
|
||||
int WRITE_MASK = 0222;
|
||||
int W_OK = 2; // write permission flag for access(2)
|
||||
|
||||
@@ -396,14 +434,13 @@ public class FileSystemUtil {
|
||||
int res = SystemInfo.isLinux ? myLibC.__lxstat64(0, path, buffer) : myLibC.lstat(path, buffer);
|
||||
if (res != 0) return null;
|
||||
|
||||
int mode = (SystemInfo.isLinux ? buffer.getInt(myOffsets[OFF_MODE]) : buffer.getShort(myOffsets[OFF_MODE])) & LibC.S_MASK;
|
||||
int mode = getModeFlags(buffer) & LibC.S_MASK;
|
||||
boolean isSymlink = (mode & LibC.S_IFLNK) == LibC.S_IFLNK;
|
||||
if (isSymlink) {
|
||||
res = SystemInfo.isLinux ? myLibC.__xstat64(0, path, buffer) : myLibC.stat(path, buffer);
|
||||
if (res != 0) {
|
||||
if (!loadFileStatus(path, buffer)) {
|
||||
return FileAttributes.BROKEN_SYMLINK;
|
||||
}
|
||||
mode = (SystemInfo.isLinux ? buffer.getInt(myOffsets[OFF_MODE]) : buffer.getShort(myOffsets[OFF_MODE])) & LibC.S_MASK;
|
||||
mode = getModeFlags(buffer) & LibC.S_MASK;
|
||||
}
|
||||
|
||||
boolean isDirectory = (mode & LibC.S_IFDIR) == LibC.S_IFDIR;
|
||||
@@ -418,6 +455,10 @@ public class FileSystemUtil {
|
||||
return new FileAttributes(isDirectory, isSpecial, isSymlink, false, size, mTime, writable);
|
||||
}
|
||||
|
||||
private boolean loadFileStatus(@NotNull String path, Memory buffer) {
|
||||
return (SystemInfo.isLinux ? myLibC.__xstat64(0, path, buffer) : myLibC.stat(path, buffer)) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String resolveSymLink(@NotNull final String path) throws Exception {
|
||||
try {
|
||||
@@ -434,15 +475,25 @@ public class FileSystemUtil {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean clonePermissions(@NotNull String source, @NotNull String target) throws Exception {
|
||||
protected boolean clonePermissions(@NotNull String source, @NotNull String target, boolean onlyPermissionsToExecute) throws Exception {
|
||||
Memory buffer = new Memory(256);
|
||||
int res = SystemInfo.isLinux ? myLibC.__xstat64(0, source, buffer) : myLibC.stat(source, buffer);
|
||||
if (res == 0) {
|
||||
int permissions = (SystemInfo.isLinux ? buffer.getInt(myOffsets[OFF_MODE]) : buffer.getShort(myOffsets[OFF_MODE])) & LibC.PERM_MASK;
|
||||
return myLibC.chmod(target, permissions) == 0;
|
||||
}
|
||||
if (!loadFileStatus(source, buffer)) return false;
|
||||
|
||||
return false;
|
||||
int permissions;
|
||||
int sourcePermissions = getModeFlags(buffer) & LibC.PERM_MASK;
|
||||
if (onlyPermissionsToExecute) {
|
||||
if (!loadFileStatus(target, buffer)) return false;
|
||||
int targetPermissions = getModeFlags(buffer) & LibC.PERM_MASK;
|
||||
permissions = targetPermissions & ~LibC.EXECUTE_MASK | sourcePermissions & LibC.EXECUTE_MASK;
|
||||
}
|
||||
else {
|
||||
permissions = sourcePermissions;
|
||||
}
|
||||
return myLibC.chmod(target, permissions) == 0;
|
||||
}
|
||||
|
||||
private int getModeFlags(Memory buffer) {
|
||||
return SystemInfo.isLinux ? buffer.getInt(myOffsets[OFF_MODE]) : buffer.getShort(myOffsets[OFF_MODE]);
|
||||
}
|
||||
|
||||
private boolean ownFile(Memory buffer) {
|
||||
@@ -509,11 +560,14 @@ public class FileSystemUtil {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean clonePermissions(@NotNull String source, @NotNull String target) throws Exception {
|
||||
protected boolean clonePermissions(@NotNull String source, @NotNull String target, boolean onlyPermissionsToExecute) throws Exception {
|
||||
if (SystemInfo.isUnix) {
|
||||
File srcFile = new File(source);
|
||||
File dstFile = new File(target);
|
||||
return dstFile.setWritable(srcFile.canWrite(), true) && dstFile.setExecutable(srcFile.canExecute(), true);
|
||||
if (!onlyPermissionsToExecute) {
|
||||
if (!dstFile.setWritable(srcFile.canWrite(), true)) return false;
|
||||
}
|
||||
return dstFile.setExecutable(srcFile.canExecute(), true);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -497,7 +497,7 @@ public class FileUtil extends FileUtilRt {
|
||||
}
|
||||
|
||||
if (SystemInfo.isUnix && fromFile.canExecute()) {
|
||||
FileSystemUtil.clonePermissions(fromFile.getPath(), toFile.getPath());
|
||||
FileSystemUtil.clonePermissionsToExecute(fromFile.getPath(), toFile.getPath());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -156,6 +156,7 @@ public class Restarter {
|
||||
public static File createTempExecutable(File executable) throws IOException {
|
||||
File executableDir = new File(System.getProperty("user.home") + "/." + System.getProperty("idea.paths.selector") + "/restart");
|
||||
File copy = new File(executableDir.getPath() + "/" + executable.getName());
|
||||
if (!FileUtilRt.createDirectory(executableDir)) throw new IOException("Cannot create dir: " + executableDir);
|
||||
if (!FileUtilRt.ensureCanCreateFile(copy) || (copy.exists() && !copy.delete())) {
|
||||
String ext = FileUtilRt.getExtension(executable.getName());
|
||||
copy = FileUtilRt.createTempFile(executableDir, FileUtilRt.getNameWithoutExtension(copy.getName()),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2013 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -54,7 +54,7 @@ public abstract class AbstractLayoutManager implements LayoutManager2 {
|
||||
|
||||
@Override
|
||||
public Dimension minimumLayoutSize(final Container parent) {
|
||||
return new Dimension(0, 0);
|
||||
return JBUI.emptySize();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2013 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -31,7 +31,7 @@ public class Layers extends JLayeredPane {
|
||||
@Override
|
||||
public Dimension getMinimumSize() {
|
||||
if (!isMinimumSizeSet())
|
||||
return new Dimension(0, 0);
|
||||
return JBUI.emptySize();
|
||||
return super.getMinimumSize();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -56,6 +56,7 @@ import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.ContentFactory;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
import org.intellij.lang.annotations.JdkConstants;
|
||||
@@ -361,7 +362,7 @@ public class ChangesViewManager implements ChangesViewI, JDOMExternalizable, Pro
|
||||
if (myProgressLabel != null) {
|
||||
myProgressLabel.removeAll();
|
||||
myProgressLabel.add(progress.create());
|
||||
myProgressLabel.setMinimumSize(new Dimension(0, 0));
|
||||
myProgressLabel.setMinimumSize(JBUI.emptySize());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -300,7 +300,7 @@ public class VcsDirectoryConfigurationPanel extends JPanel implements Configurab
|
||||
}
|
||||
|
||||
myDirectoryMappingTable = new TableView<MapInfo>();
|
||||
myDirectoryMappingTable.setIntercellSpacing(new Dimension(0, 0));
|
||||
myDirectoryMappingTable.setIntercellSpacing(JBUI.emptySize());
|
||||
|
||||
myBaseRevisionTexts = new JCheckBox("Store on shelf base revision texts for files under DVCS");
|
||||
myLimitHistory = new VcsLimitHistoryConfigurable(myProject);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -32,6 +32,7 @@ import com.intellij.util.Function;
|
||||
import com.intellij.util.NotNullProducer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.text.DateFormatUtil;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import com.intellij.vcs.log.VcsFullCommitDetails;
|
||||
import com.intellij.vcs.log.VcsLogHighlighter;
|
||||
@@ -114,7 +115,7 @@ public class VcsLogGraphTable extends JBTable implements TypeSafeDataProvider, C
|
||||
|
||||
setRowHeight(HEIGHT_CELL);
|
||||
setShowHorizontalLines(false);
|
||||
setIntercellSpacing(new Dimension(0, 0));
|
||||
setIntercellSpacing(JBUI.emptySize());
|
||||
|
||||
MouseAdapter mouseAdapter = new MyMouseAdapter();
|
||||
addMouseMotionListener(mouseAdapter);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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.
|
||||
@@ -275,6 +275,11 @@ public class XDebuggerUtilImpl extends XDebuggerUtil {
|
||||
|
||||
PsiElement element;
|
||||
int offset = lineStart;
|
||||
|
||||
if (file instanceof PsiCompiledFile) {
|
||||
file = ((PsiCompiledFile)file).getDecompiledPsiFile();
|
||||
}
|
||||
|
||||
while (offset < lineEnd) {
|
||||
element = file.findElementAt(offset);
|
||||
if (element != null) {
|
||||
|
||||
@@ -99,7 +99,7 @@ public class ChooseModulesDialog extends DialogWrapper {
|
||||
|
||||
myView.setShowGrid(false);
|
||||
myView.setTableHeader(null);
|
||||
myView.setIntercellSpacing(new Dimension(0, 0));
|
||||
myView.setIntercellSpacing(JBUI.emptySize());
|
||||
TableUtil.setupCheckboxColumn(myView, 0);
|
||||
myView.getModel().addTableModelListener(new TableModelListener() {
|
||||
public void tableChanged(TableModelEvent e) {
|
||||
|
||||
+14
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 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,6 +16,7 @@
|
||||
package org.jetbrains.plugins.groovy.dsl;
|
||||
|
||||
import com.intellij.openapi.components.*;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import gnu.trove.THashMap;
|
||||
@@ -49,11 +50,16 @@ public class DslActivationStatus implements PersistentStateComponent<Element> {
|
||||
@Nullable
|
||||
public synchronized String getInactivityReason(VirtualFile file) {
|
||||
String status = myStatus.get(file);
|
||||
return status == null || status == ENABLED ? null : status;
|
||||
return ENABLED.equals(status) ? null : status;
|
||||
}
|
||||
|
||||
public synchronized boolean isActivated(VirtualFile file) {
|
||||
return myStatus.get(file) == ENABLED;
|
||||
final String status = myStatus.get(file);
|
||||
if (status == null) {
|
||||
myStatus.put(file, ENABLED);
|
||||
return true;
|
||||
}
|
||||
return ENABLED.equals(status);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -66,7 +72,9 @@ public class DslActivationStatus implements PersistentStateComponent<Element> {
|
||||
Element element = new Element("file");
|
||||
root.addContent(element);
|
||||
element.setAttribute("url", file.getUrl());
|
||||
element.setAttribute("status", (status == ENABLED ? "" : status));
|
||||
if (!ENABLED.equals(status)) {
|
||||
element.setAttribute("status", status);
|
||||
}
|
||||
}
|
||||
return root;
|
||||
}
|
||||
@@ -76,10 +84,10 @@ public class DslActivationStatus implements PersistentStateComponent<Element> {
|
||||
List<Element> children = state.getChildren("file");
|
||||
for (Element element : children) {
|
||||
String url = element.getAttributeValue("url", "");
|
||||
String status = element.getAttributeValue("status", ENABLED);
|
||||
String status = element.getAttributeValue("status");
|
||||
VirtualFile file = VirtualFileManager.getInstance().findFileByUrl(url);
|
||||
if (file != null) {
|
||||
myStatus.put(file, status);
|
||||
myStatus.put(file, StringUtil.isNotEmpty(status) ? status : ENABLED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -74,7 +74,7 @@ import java.util.regex.Pattern;
|
||||
*/
|
||||
public class GroovyDslFileIndex extends ScalarIndexExtension<String> {
|
||||
private static final Key<Pair<GroovyDslExecutor, Long>> CACHED_EXECUTOR = Key.create("CachedGdslExecutor");
|
||||
private static final Logger LOG = Logger.getInstance("#org.jetbrains.plugins.groovy.dsl.GroovyDslFileIndex");
|
||||
private static final Logger LOG = Logger.getInstance(GroovyDslFileIndex.class);
|
||||
|
||||
@NonNls public static final ID<String, Void> NAME = ID.create("GroovyDslFileIndex");
|
||||
@NonNls private static final String OUR_KEY = "ourKey";
|
||||
@@ -412,7 +412,10 @@ public class GroovyDslFileIndex extends ScalarIndexExtension<String> {
|
||||
if (!vfile.isValid()) {
|
||||
continue;
|
||||
}
|
||||
if (!fileIndex.isInLibraryClasses(vfile) && !fileIndex.isInLibrarySource(vfile)) {
|
||||
if (fileIndex.isInLibrarySource(vfile)) {
|
||||
continue;
|
||||
}
|
||||
if (!fileIndex.isInLibraryClasses(vfile)) {
|
||||
if (!fileIndex.isInSourceContent(vfile) || !isActivated(vfile)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
+15
-4
@@ -221,20 +221,31 @@ public class TypesUtil {
|
||||
@NotNull PsiElement context,
|
||||
@NotNull ApplicableTo position) {
|
||||
if (actualType instanceof PsiIntersectionType) {
|
||||
ConversionResult min = ConversionResult.ERROR;
|
||||
for (PsiType child : ((PsiIntersectionType)actualType).getConjuncts()) {
|
||||
if (canAssign(targetType, child, context, position) == ConversionResult.OK) {
|
||||
final ConversionResult result = canAssign(targetType, child, context, position);
|
||||
if (result.ordinal() < min.ordinal()) {
|
||||
min = result;
|
||||
}
|
||||
if (min == ConversionResult.OK) {
|
||||
return ConversionResult.OK;
|
||||
}
|
||||
}
|
||||
return ConversionResult.ERROR;
|
||||
return min;
|
||||
}
|
||||
|
||||
if (targetType instanceof PsiIntersectionType) {
|
||||
ConversionResult max = ConversionResult.OK;
|
||||
for (PsiType child : ((PsiIntersectionType)targetType).getConjuncts()) {
|
||||
if (canAssign(child, actualType, context, position) != ConversionResult.OK) {
|
||||
final ConversionResult result = canAssign(child, actualType, context, position);
|
||||
if (result.ordinal() > max.ordinal()) {
|
||||
max = result;
|
||||
}
|
||||
if (max == ConversionResult.ERROR) {
|
||||
return ConversionResult.ERROR;
|
||||
}
|
||||
}
|
||||
return ConversionResult.OK;
|
||||
return max;
|
||||
}
|
||||
|
||||
final ConversionResult result = areTypesConvertible(targetType, actualType, context, position);
|
||||
|
||||
@@ -49,11 +49,15 @@ public class PyProjectStructureDetector extends ProjectStructureDetector {
|
||||
@NotNull List<DetectedProjectRoot> result) {
|
||||
LOG.info("Detecting roots under " + dir);
|
||||
for (File child : children) {
|
||||
if (FileUtilRt.extensionEquals(child.getName(), "py")) {
|
||||
final String name = child.getName();
|
||||
if (FileUtilRt.extensionEquals(name, "py")) {
|
||||
LOG.info("Found Python file " + child.getPath());
|
||||
result.add(new DetectedContentRoot(dir, "Python", PythonModuleTypeBase.getInstance(), WebModuleType.getInstance()));
|
||||
return DirectoryProcessingResult.SKIP_CHILDREN;
|
||||
}
|
||||
if ("node_modules".equals(name)) {
|
||||
return DirectoryProcessingResult.SKIP_CHILDREN;
|
||||
}
|
||||
}
|
||||
return DirectoryProcessingResult.PROCESS_CHILDREN;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user