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:
@@ -496,12 +496,12 @@ public class DebuggerManagerImpl extends DebuggerManagerEx {
|
||||
}
|
||||
|
||||
private static boolean shouldAddXdebugKey(Sdk jdk) {
|
||||
if (jdk == null) {
|
||||
return true; // conservative choice
|
||||
}
|
||||
if (DebuggerSettings.getInstance().DISABLE_JIT) {
|
||||
return true;
|
||||
}
|
||||
if (jdk == null) {
|
||||
return false; // assume newer jdk by default
|
||||
}
|
||||
|
||||
//if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
// need this in unit tests to avoid false alarms when comparing actual output with expected output
|
||||
@@ -520,7 +520,7 @@ public class DebuggerManagerImpl extends DebuggerManagerEx {
|
||||
|
||||
private static boolean isJVMTIAvailable(Sdk jdk) {
|
||||
if (jdk == null) {
|
||||
return true; // assume newer jdk by default
|
||||
return false; // conservative choice
|
||||
}
|
||||
|
||||
final String version = JdkUtil.getJdkMainAttribute(jdk, Attributes.Name.IMPLEMENTATION_VERSION);
|
||||
|
||||
+7
-2
@@ -65,11 +65,16 @@ public abstract class HeaderHidingTabbedModuleEditor extends TabbedModuleEditor
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public ModuleConfigurationEditor getEditor(@NotNull String displayName) {
|
||||
ModuleConfigurationEditor singleEditor = getSingleEditor();
|
||||
if (singleEditor != null) {
|
||||
assert singleEditor.getDisplayName().equals(displayName);
|
||||
return singleEditor;
|
||||
if (displayName.equals(singleEditor.getDisplayName())) {
|
||||
return singleEditor;
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return super.getEditor(displayName);
|
||||
|
||||
@@ -20,25 +20,26 @@ import com.intellij.codeInsight.completion.simple.ParenthesesTailType;
|
||||
import com.intellij.codeInsight.completion.simple.RParenthTailType;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
|
||||
public class TailTypes {
|
||||
public static final TailType CALL_RPARENTH = new RParenthTailType(){
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES && editor.getDocument().getCharsSequence().charAt(tailOffset - 1) != '(';
|
||||
}
|
||||
};
|
||||
public static final TailType IF_RPARENTH = new RParenthTailType(){
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_IF_PARENTHESES;
|
||||
}
|
||||
};
|
||||
public static final TailType WHILE_RPARENTH = new RParenthTailType(){
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_WHILE_PARENTHESES;
|
||||
}
|
||||
};
|
||||
public static final TailType CALL_RPARENTH_SEMICOLON = new RParenthTailType(){
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES;
|
||||
}
|
||||
|
||||
@@ -48,56 +49,56 @@ public class TailTypes {
|
||||
};
|
||||
|
||||
public static final TailType SYNCHRONIZED_LPARENTH = new ParenthesesTailType() {
|
||||
protected boolean isSpaceBeforeParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceBeforeParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_BEFORE_SYNCHRONIZED_PARENTHESES;
|
||||
}
|
||||
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_SYNCHRONIZED_PARENTHESES;
|
||||
}
|
||||
};
|
||||
public static final TailType CATCH_LPARENTH = new ParenthesesTailType() {
|
||||
protected boolean isSpaceBeforeParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceBeforeParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_BEFORE_CATCH_PARENTHESES;
|
||||
}
|
||||
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_CATCH_PARENTHESES;
|
||||
}
|
||||
};
|
||||
public static final TailType SWITCH_LPARENTH = new ParenthesesTailType() {
|
||||
protected boolean isSpaceBeforeParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceBeforeParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_BEFORE_SWITCH_PARENTHESES;
|
||||
}
|
||||
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_SWITCH_PARENTHESES;
|
||||
}
|
||||
};
|
||||
public static final TailType WHILE_LPARENTH = new ParenthesesTailType() {
|
||||
protected boolean isSpaceBeforeParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceBeforeParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_BEFORE_WHILE_PARENTHESES;
|
||||
}
|
||||
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_WHILE_PARENTHESES;
|
||||
}
|
||||
};
|
||||
public static final TailType FOR_LPARENTH = new ParenthesesTailType() {
|
||||
protected boolean isSpaceBeforeParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceBeforeParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_BEFORE_FOR_PARENTHESES;
|
||||
}
|
||||
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_FOR_PARENTHESES;
|
||||
}
|
||||
};
|
||||
public static final TailType IF_LPARENTH = new ParenthesesTailType() {
|
||||
protected boolean isSpaceBeforeParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceBeforeParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_BEFORE_IF_PARENTHESES;
|
||||
}
|
||||
|
||||
protected boolean isSpaceWithinParentheses(final CodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
|
||||
return styleSettings.SPACE_WITHIN_IF_PARENTHESES;
|
||||
}
|
||||
};
|
||||
|
||||
+2
-3
@@ -20,8 +20,7 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.util.ClassConditionKey;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
@@ -64,7 +63,7 @@ public class CastingLookupElementDecorator extends LookupElementDecorator<Lookup
|
||||
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context) {
|
||||
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(context.getProject());
|
||||
final CommonCodeStyleSettings settings = context.getCodeStyleSettings();
|
||||
String spaceWithin = settings.SPACE_WITHIN_CAST_PARENTHESES ? " " : "";
|
||||
String spaceAfter = settings.SPACE_AFTER_TYPE_CAST ? " " : "";
|
||||
final Editor editor = context.getEditor();
|
||||
|
||||
@@ -27,8 +27,7 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class DefaultInsertHandler extends TemplateInsertHandler implements Cloneable {
|
||||
@@ -94,7 +93,7 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
|
||||
}
|
||||
}
|
||||
else{
|
||||
final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(context.getProject());
|
||||
final CommonCodeStyleSettings styleSettings = context.getCodeStyleSettings();
|
||||
myState.tailOffset = context.getSelectionEndOffset();
|
||||
myState.caretOffset = context.getSelectionEndOffset();
|
||||
|
||||
|
||||
@@ -30,7 +30,10 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.RangeMarker;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.NullableLazyKey;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.patterns.PsiElementPattern;
|
||||
import com.intellij.patterns.PsiJavaPatterns;
|
||||
@@ -66,7 +69,10 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.intellij.patterns.PlatformPatterns.psiElement;
|
||||
|
||||
@@ -272,7 +278,7 @@ public class JavaCompletionUtil {
|
||||
|
||||
if (element instanceof PsiWhiteSpace &&
|
||||
( !element.textContains('\n') ||
|
||||
CodeStyleSettingsManager.getInstance(project).getCurrentSettings().METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE
|
||||
CodeStyleSettingsManager.getSettings(project).getCommonSettings(JavaLanguage.INSTANCE).METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE
|
||||
)
|
||||
){
|
||||
element = file.findElementAt(element.getTextRange().getEndOffset());
|
||||
@@ -541,7 +547,7 @@ public class JavaCompletionUtil {
|
||||
if (ref != null) {
|
||||
final PsiElement qualifier = ref.getQualifier();
|
||||
if (qualifier != null) {
|
||||
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(qualifier.getProject());
|
||||
final CommonCodeStyleSettings settings = context.getCodeStyleSettings();
|
||||
|
||||
final String parenSpace = settings.SPACE_WITHIN_PARENTHESES ? " " : "";
|
||||
document.insertString(qualifier.getTextRange().getEndOffset(), parenSpace + ")");
|
||||
@@ -821,7 +827,7 @@ public class JavaCompletionUtil {
|
||||
|
||||
PsiDocumentManager.getInstance(context.getProject()).commitDocument(context.getDocument());
|
||||
|
||||
final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(context.getProject());
|
||||
final CommonCodeStyleSettings styleSettings = context.getCodeStyleSettings();
|
||||
ParenthesesInsertHandler.getInstance(hasParams,
|
||||
styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES,
|
||||
styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES && hasParams,
|
||||
|
||||
@@ -14,8 +14,7 @@ import com.intellij.openapi.editor.ScrollType;
|
||||
import com.intellij.patterns.PlatformPatterns;
|
||||
import com.intellij.patterns.PsiElementPattern;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
|
||||
import com.intellij.psi.impl.source.tree.java.PsiEmptyExpressionImpl;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
@@ -100,7 +99,7 @@ class SmartCastProvider extends CompletionProvider<CompletionParameters> {
|
||||
context.getOffsetMap().getOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET));
|
||||
}
|
||||
|
||||
final CodeStyleSettings csSettings = CodeStyleSettingsManager.getSettings(context.getProject());
|
||||
final CommonCodeStyleSettings csSettings = context.getCodeStyleSettings();
|
||||
final int oldTail = context.getTailOffset();
|
||||
context.setTailOffset(RParenthTailType.addRParenth(editor, oldTail, csSettings.SPACE_WITHIN_CAST_PARENTHESES));
|
||||
|
||||
|
||||
+4
-5
@@ -18,20 +18,19 @@ package com.intellij.codeInsight.completion.simple;
|
||||
|
||||
import com.intellij.codeInsight.TailType;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public abstract class ParenthesesTailType extends TailType {
|
||||
|
||||
protected abstract boolean isSpaceBeforeParentheses(CodeStyleSettings styleSettings, Editor editor, final int tailOffset);
|
||||
protected abstract boolean isSpaceBeforeParentheses(CommonCodeStyleSettings styleSettings, Editor editor, final int tailOffset);
|
||||
|
||||
protected abstract boolean isSpaceWithinParentheses(CodeStyleSettings styleSettings, Editor editor, final int tailOffset);
|
||||
protected abstract boolean isSpaceWithinParentheses(CommonCodeStyleSettings styleSettings, Editor editor, final int tailOffset);
|
||||
|
||||
public int processTail(final Editor editor, int tailOffset) {
|
||||
CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(editor.getProject());
|
||||
CommonCodeStyleSettings styleSettings = getLocalCodeStyleSettings(editor, tailOffset);
|
||||
if (isSpaceBeforeParentheses(styleSettings, editor, tailOffset)) {
|
||||
tailOffset = insertChar(editor, tailOffset, ' ');
|
||||
}
|
||||
|
||||
@@ -24,8 +24,7 @@ import com.intellij.openapi.editor.highlighter.EditorHighlighter;
|
||||
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.impl.source.tree.ElementType;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.java.IJavaElementType;
|
||||
@@ -50,10 +49,10 @@ public abstract class RParenthTailType extends TailType {
|
||||
return element == null ? new TextRange(0, document.getTextLength()) : element.getTextRange();
|
||||
}
|
||||
|
||||
protected abstract boolean isSpaceWithinParentheses(CodeStyleSettings styleSettings, Editor editor, final int tailOffset);
|
||||
protected abstract boolean isSpaceWithinParentheses(CommonCodeStyleSettings styleSettings, Editor editor, final int tailOffset);
|
||||
|
||||
public int processTail(final Editor editor, int tailOffset) {
|
||||
return addRParenth(editor, tailOffset, isSpaceWithinParentheses(CodeStyleSettingsManager.getSettings(editor.getProject()), editor, tailOffset));
|
||||
return addRParenth(editor, tailOffset, isSpaceWithinParentheses(getLocalCodeStyleSettings(editor, tailOffset), editor, tailOffset));
|
||||
}
|
||||
|
||||
public static int addRParenth(Editor editor, int offset, boolean spaceWithinParens) {
|
||||
|
||||
+4
-29
@@ -353,41 +353,18 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool {
|
||||
}
|
||||
return;
|
||||
}
|
||||
refElement.accept(new RefJavaVisitor() {
|
||||
@Override public void visitElement(final RefEntity elem) {
|
||||
if (elem instanceof RefElement) {
|
||||
final RefElement element = (RefElement)elem;
|
||||
if (isEntryPoint(element)) {
|
||||
getEntryPointsManager().addEntryPoint(element, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
refElement.accept(new RefJavaVisitor() {
|
||||
@Override public void visitMethod(RefMethod method) {
|
||||
if (isAddMainsEnabled() && method.isAppMain()) {
|
||||
getEntryPointsManager().addEntryPoint(method, false);
|
||||
} else {
|
||||
super.visitMethod(method);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void visitClass(RefClass aClass) {
|
||||
final PsiClass psiClass = aClass.getElement();
|
||||
if (psiClass == null) return;
|
||||
if (
|
||||
isAddAppletEnabled() && aClass.isApplet() ||
|
||||
isAddServletEnabled() && aClass.isServlet()) {
|
||||
if (isAddAppletEnabled() && aClass.isApplet() ||
|
||||
isAddServletEnabled() && aClass.isServlet()) {
|
||||
getEntryPointsManager().addEntryPoint(aClass, false);
|
||||
} else if (psiClass.isAnnotationType()){
|
||||
getEntryPointsManager().addEntryPoint(aClass, false);
|
||||
final PsiMethod[] psiMethods = psiClass.getMethods();
|
||||
for (PsiMethod psiMethod : psiMethods) {
|
||||
getEntryPointsManager().addEntryPoint(getRefManager().getReference(psiMethod), false);
|
||||
}
|
||||
} else if (psiClass.isEnum()) {
|
||||
getEntryPointsManager().addEntryPoint(aClass, false);
|
||||
} else {
|
||||
super.visitClass(aClass);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -437,7 +414,7 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool {
|
||||
myPhase = 1;
|
||||
}
|
||||
|
||||
private boolean isEntryPoint(final RefElement owner) {
|
||||
public boolean isEntryPoint(final RefElement owner) {
|
||||
final PsiElement element = owner.getElement();
|
||||
if (RefUtil.isImplicitUsage(element)) return true;
|
||||
if (element instanceof PsiModifierListOwner) {
|
||||
@@ -907,8 +884,6 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool {
|
||||
@Override public void visitElement(RefEntity refEntity) {
|
||||
if (refEntity instanceof RefJavaElement) {
|
||||
final RefJavaElementImpl refElement = (RefJavaElementImpl)refEntity;
|
||||
final PsiElement element = refElement.getElement();
|
||||
if (element == null) return;
|
||||
if (!getContext().isToCheckMember(refElement, UnusedDeclarationInspection.this)) return;
|
||||
refElement.setReachable(false);
|
||||
}
|
||||
|
||||
@@ -15,14 +15,20 @@
|
||||
*/
|
||||
package com.intellij.codeInspection.reference;
|
||||
|
||||
import com.intellij.codeInspection.InspectionProfileEntry;
|
||||
import com.intellij.codeInspection.InspectionsBundle;
|
||||
import com.intellij.codeInspection.SuppressionUtil;
|
||||
import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection;
|
||||
import com.intellij.codeInspection.ex.EntryPointsManager;
|
||||
import com.intellij.codeInspection.ex.EntryPointsManagerImpl;
|
||||
import com.intellij.codeInspection.ex.InspectionToolWrapper;
|
||||
import com.intellij.codeInspection.ex.Tools;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.UserDataCache;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.javadoc.PsiDocTag;
|
||||
@@ -89,6 +95,41 @@ public class RefJavaManagerImpl extends RefJavaManager {
|
||||
return refPackage;
|
||||
}
|
||||
|
||||
|
||||
public boolean isEntryPoint(final RefElement element) {
|
||||
UnusedDeclarationInspection tool = getDeadCodeTool(element);
|
||||
return tool != null && tool.isEntryPoint(element);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private UnusedDeclarationInspection getDeadCodeTool(RefElement element) {
|
||||
PsiFile file = ((RefElementImpl)element).getContainingFile();
|
||||
if (file == null) return null;
|
||||
|
||||
return getDeadCodeTool(file);
|
||||
}
|
||||
|
||||
private static final UserDataCache<Ref<UnusedDeclarationInspection>, PsiFile, RefManagerImpl> DEAD_CODE_TOOL = new UserDataCache<Ref<UnusedDeclarationInspection>, PsiFile, RefManagerImpl>("DEAD_CODE_TOOL") {
|
||||
@Override
|
||||
protected Ref<UnusedDeclarationInspection> compute(PsiFile file, RefManagerImpl refManager) {
|
||||
Tools tools = refManager.getContext().getTools().get(UnusedDeclarationInspection.SHORT_NAME);
|
||||
InspectionProfileEntry tool = tools != null ? tools.getEnabledTool(file) : null;
|
||||
if (tool instanceof InspectionToolWrapper) tool = ((InspectionToolWrapper)tool).getTool();
|
||||
return Ref.create(tool instanceof UnusedDeclarationInspection ? (UnusedDeclarationInspection)tool : null);
|
||||
}
|
||||
};
|
||||
|
||||
@Nullable
|
||||
private UnusedDeclarationInspection getDeadCodeTool(PsiElement element) {
|
||||
PsiFile file = element.getContainingFile();
|
||||
return file != null ? DEAD_CODE_TOOL.get(file, myRefManager).get() : null;
|
||||
}
|
||||
|
||||
public boolean isEntryPoint(PsiElement element) {
|
||||
UnusedDeclarationInspection tool = getDeadCodeTool(element);
|
||||
return tool != null && tool.isEntryPoint(element);
|
||||
}
|
||||
|
||||
public RefPackage getDefaultPackage() {
|
||||
if (myDefaultPackage == null) {
|
||||
myDefaultPackage = getPackage(InspectionsBundle.message("inspection.reference.default.package"));
|
||||
@@ -269,6 +310,28 @@ public class RefJavaManagerImpl extends RefJavaManager {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityInitialized(RefElement refElement, PsiElement psiElement) {
|
||||
if (isEntryPoint(refElement)) {
|
||||
getEntryPointsManager().addEntryPoint(refElement, false);
|
||||
}
|
||||
|
||||
if (psiElement instanceof PsiClass) {
|
||||
PsiClass psiClass = (PsiClass)psiElement;
|
||||
|
||||
EntryPointsManager entryPointsManager = getEntryPointsManager();
|
||||
if (psiClass.isAnnotationType()){
|
||||
entryPointsManager.addEntryPoint(refElement, false);
|
||||
for (PsiMethod psiMethod : psiClass.getMethods()) {
|
||||
entryPointsManager.addEntryPoint(myRefManager.getReference(psiMethod), false);
|
||||
}
|
||||
}
|
||||
else if (psiClass.isEnum()) {
|
||||
entryPointsManager.addEntryPoint(refElement, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void appendPackageElement(final Element element, final String packageName) {
|
||||
final Element packageElement = new Element("package");
|
||||
packageElement.addContent(packageName.length() > 0 ? packageName : InspectionsBundle.message("inspection.export.results.default"));
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
public static class G {
|
||||
public static void foo(String s1, String s2) {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String sss1 = "text";
|
||||
foo(sss1,<caret>);
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
public static class G {
|
||||
public static void foo(String s1, String s2) {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String sss1 = "text";
|
||||
foo(ss<caret>);
|
||||
}
|
||||
}
|
||||
+14
-12
@@ -5,10 +5,11 @@ import com.intellij.codeInsight.lookup.Lookup;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupManager;
|
||||
import com.intellij.codeInsight.lookup.impl.LookupManagerImpl;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.statistics.StatisticsManager;
|
||||
import com.intellij.psi.statistics.impl.StatisticsManagerImpl;
|
||||
import com.intellij.testFramework.LightCodeInsightTestCase;
|
||||
@@ -208,8 +209,9 @@ public class CompletionStyleTest extends LightCodeInsightTestCase{
|
||||
}
|
||||
|
||||
public void testParensInSynchronized() throws Exception{
|
||||
CodeStyleSettingsManager.getSettings(getProject()).SPACE_BEFORE_SYNCHRONIZED_PARENTHESES = false;
|
||||
CodeStyleSettingsManager.getSettings(getProject()).SPACE_WITHIN_SYNCHRONIZED_PARENTHESES = true;
|
||||
CommonCodeStyleSettings styleSettings = getCodeStyleSettings();
|
||||
styleSettings.SPACE_BEFORE_SYNCHRONIZED_PARENTHESES = false;
|
||||
styleSettings.SPACE_WITHIN_SYNCHRONIZED_PARENTHESES = true;
|
||||
final String path = BASE_PATH;
|
||||
|
||||
configureByFile(path + "/before22.java");
|
||||
@@ -254,22 +256,17 @@ public class CompletionStyleTest extends LightCodeInsightTestCase{
|
||||
|
||||
public void testCastParensStyle1() throws Exception{
|
||||
final String path = BASE_PATH;
|
||||
CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(getProject());
|
||||
final boolean space_within_cast_parentheses = styleSettings.SPACE_WITHIN_CAST_PARENTHESES;
|
||||
final boolean space_after_type_cast = styleSettings.SPACE_AFTER_TYPE_CAST;
|
||||
|
||||
styleSettings.SPACE_WITHIN_CAST_PARENTHESES = true;
|
||||
styleSettings.SPACE_AFTER_TYPE_CAST = false;
|
||||
getCodeStyleSettings().SPACE_WITHIN_CAST_PARENTHESES = true;
|
||||
getCodeStyleSettings().SPACE_AFTER_TYPE_CAST = false;
|
||||
configureByFile(path + "/before31.java");
|
||||
performSmartCompletion();
|
||||
checkResultByFile(path + "/after31.java");
|
||||
styleSettings.SPACE_WITHIN_CAST_PARENTHESES = space_within_cast_parentheses;
|
||||
styleSettings.SPACE_AFTER_TYPE_CAST = space_after_type_cast;
|
||||
}
|
||||
|
||||
public void testMethodParensStyle2() throws Exception{
|
||||
final String path = BASE_PATH;
|
||||
CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(getProject());
|
||||
CommonCodeStyleSettings styleSettings = getCodeStyleSettings();
|
||||
final boolean space_before_method_call_parentheses = styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES;
|
||||
styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true;
|
||||
configureByFile(path + "/before32.java");
|
||||
@@ -278,9 +275,14 @@ public class CompletionStyleTest extends LightCodeInsightTestCase{
|
||||
styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = space_before_method_call_parentheses;
|
||||
}
|
||||
|
||||
private static CommonCodeStyleSettings getCodeStyleSettings() {
|
||||
return CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
|
||||
}
|
||||
|
||||
|
||||
public void testMethodParensStyle3() throws Exception{
|
||||
final String path = BASE_PATH;
|
||||
CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(getProject());
|
||||
CommonCodeStyleSettings styleSettings = getCodeStyleSettings();
|
||||
final boolean space_before_method_call_parentheses = styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES;
|
||||
final boolean space_within_method_call_parentheses = styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES;
|
||||
|
||||
|
||||
+15
-20
@@ -22,11 +22,12 @@ import com.intellij.codeInsight.lookup.Lookup
|
||||
import com.intellij.codeInsight.lookup.LookupElement
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation
|
||||
import com.intellij.codeInsight.lookup.LookupManager
|
||||
import com.intellij.lang.java.JavaLanguage
|
||||
import com.intellij.openapi.actionSystem.IdeActions
|
||||
import com.intellij.openapi.command.WriteCommandAction
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings
|
||||
import com.intellij.psi.*
|
||||
|
||||
public class NormalCompletionTest extends LightFixtureCompletionTestCase {
|
||||
@@ -287,12 +288,9 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase {
|
||||
}
|
||||
|
||||
public void testMethodCallBeforeAnotherStatementWithParen2() throws Exception {
|
||||
CodeStyleSettings settings = CodeStyleSettingsManager.getInstance(getProject()).getCurrentSettings();
|
||||
boolean oldvalue = settings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE;
|
||||
settings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE = true;
|
||||
codeStyleSettings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE = true;
|
||||
configureByFile("MethodLookup2.java");
|
||||
checkResultByFile("MethodLookup2_After2.java");
|
||||
settings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE = oldvalue;
|
||||
}
|
||||
|
||||
public void testSwitchEnumLabel() throws Exception {
|
||||
@@ -494,16 +492,14 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase {
|
||||
public void testPrivateInAnonymous() throws Throwable { doTest() }
|
||||
|
||||
public void testMethodParenthesesSpaces() throws Throwable {
|
||||
final settings = CodeStyleSettingsManager.getSettings(getProject())
|
||||
settings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true
|
||||
settings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true
|
||||
codeStyleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true
|
||||
codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testMethodParenthesesSpacesArgs() throws Throwable {
|
||||
final settings = CodeStyleSettingsManager.getSettings(getProject())
|
||||
settings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true
|
||||
settings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true
|
||||
codeStyleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true
|
||||
codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true
|
||||
doTest();
|
||||
}
|
||||
|
||||
@@ -601,23 +597,18 @@ public class ListUtils {
|
||||
}
|
||||
|
||||
public void testNoSpaceInParensWithoutParams() throws Throwable {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
|
||||
codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
|
||||
try {
|
||||
doTest();
|
||||
}
|
||||
finally {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).SPACE_WITHIN_METHOD_CALL_PARENTHESES = false;
|
||||
codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void testTwoSpacesInParensWithParams() throws Throwable {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
|
||||
try {
|
||||
doTest();
|
||||
}
|
||||
finally {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).SPACE_WITHIN_METHOD_CALL_PARENTHESES = false;
|
||||
}
|
||||
codeStyleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testFillCommonPrefixOnSecondCompletion() throws Throwable {
|
||||
@@ -1330,6 +1321,10 @@ public class ListUtils {
|
||||
public void testInterfaceImplementationNoCast() { doTest() }
|
||||
public void testStaticallyImportedMethodsBeforeExpression() { doTest() }
|
||||
|
||||
private CommonCodeStyleSettings getCodeStyleSettings() {
|
||||
return CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
|
||||
}
|
||||
|
||||
public void testCompatibleInterfacesCast() {
|
||||
configure()
|
||||
assert myFixture.lookupElementStrings.containsAll(['foo', 'bar'])
|
||||
|
||||
+15
-17
@@ -12,10 +12,12 @@ import com.intellij.codeInsight.template.TemplateContextType;
|
||||
import com.intellij.codeInsight.template.TemplateManager;
|
||||
import com.intellij.codeInsight.template.impl.TemplateImpl;
|
||||
import com.intellij.codeInsight.template.impl.TemplateSettings;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
|
||||
public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
@@ -92,15 +94,9 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
public void testParenAfterCall1_SpaceWithinMethodCallParens() throws Exception {
|
||||
String path = "/parenAfterCall";
|
||||
|
||||
CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(getProject());
|
||||
myFixture.configureByFile(path + "/before1.java");
|
||||
styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
|
||||
try{
|
||||
complete();
|
||||
}
|
||||
finally{
|
||||
styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = false;
|
||||
}
|
||||
getCodeStyleSettings().SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
|
||||
complete();
|
||||
checkResultByFile(path + "/after1_space.java");
|
||||
}
|
||||
|
||||
@@ -659,14 +655,8 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
public void testUseIntConstantsInOr() throws Throwable { doTest(); }
|
||||
|
||||
public void testExtraSemicolonAfterMethodParam() throws Throwable {
|
||||
CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(getProject());
|
||||
styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
|
||||
try{
|
||||
doTest();
|
||||
}
|
||||
finally{
|
||||
styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = false;
|
||||
}
|
||||
getCodeStyleSettings().SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testAssignFromTheSameFieldOfAnotherObject() throws Throwable {
|
||||
@@ -1132,7 +1122,7 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
doTest(Lookup.NORMAL_SELECT_CHAR);
|
||||
}
|
||||
|
||||
private void doTest(final char c) throws Exception {
|
||||
private void doTest(final char c) {
|
||||
boolean old = CodeInsightSettings.getInstance().AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION;
|
||||
if (c != Lookup.NORMAL_SELECT_CHAR) {
|
||||
CodeInsightSettings.getInstance().AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION = false;
|
||||
@@ -1173,4 +1163,12 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testSpaceAfterCommaInMethodCall() {
|
||||
getCodeStyleSettings().SPACE_AFTER_COMMA = false;
|
||||
doTest(',');
|
||||
}
|
||||
|
||||
private CommonCodeStyleSettings getCodeStyleSettings() {
|
||||
return CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,16 @@ import com.intellij.ide.Bootstrap;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.io.StreamUtil;
|
||||
import com.intellij.util.Restarter;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
@@ -46,39 +50,30 @@ public class Main {
|
||||
System.setProperty("jna.nounpack", "false");
|
||||
}
|
||||
|
||||
// pre-load class before installing the patch to prevent class loader problems
|
||||
Restarter.isSupported();
|
||||
final int[] restartCode = {Restarter.getRestartCode()};
|
||||
|
||||
if (installPatch()) {
|
||||
boolean restarted = false;
|
||||
int restartCode = 0;
|
||||
try {
|
||||
restarted = Restarter.restart();
|
||||
restartCode = Restarter.getRestartCode();
|
||||
Runnable restart = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (restartCode[0] == 0) {
|
||||
try {
|
||||
if (Restarter.restart()) restartCode[0] = 1;
|
||||
}
|
||||
catch (Throwable ignore) {
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Throwable e) {
|
||||
// can be either CannotRestartException
|
||||
// or something like class/method not found if they has been changed during update
|
||||
};
|
||||
|
||||
//noinspection CallToPrintStackTrace
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (installPatch(restart)) {
|
||||
if (restartCode[0] == 0) {
|
||||
try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Throwable ignore) { }
|
||||
|
||||
if (!restarted && restartCode == 0) {
|
||||
try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ignore) { }
|
||||
String msg = "The application cannot start right away since some critical files have been changed.\nPlease restart it manually.";
|
||||
String msg = "Patch has been applied successfully, please restart application.";
|
||||
JOptionPane.showMessageDialog(null, msg, "Update", JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
|
||||
final int finalRestartCode = restartCode;
|
||||
//noinspection SSBasedInspection
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
System.exit(finalRestartCode);
|
||||
}
|
||||
});
|
||||
|
||||
System.exit(restartCode[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -124,7 +119,7 @@ public class Main {
|
||||
return isHeadless;
|
||||
}
|
||||
|
||||
private static boolean installPatch() {
|
||||
private static boolean installPatch(Runnable restart) {
|
||||
try {
|
||||
File ideaHomeDir = getIdeaHomeDir();
|
||||
if (ideaHomeDir == null) return false;
|
||||
@@ -141,10 +136,12 @@ public class Main {
|
||||
File launcherFile = new File(ideaHomeDir, "bin/vistalauncher.exe");
|
||||
File launcherCopy = FileUtil.createTempFile("vistalauncher", ".exe");
|
||||
launcherCopy.deleteOnExit();
|
||||
copyFile(launcherFile, launcherCopy);
|
||||
FileUtil.copy(launcherFile, launcherCopy);
|
||||
args.add(launcherCopy.getPath());
|
||||
}
|
||||
|
||||
restart.run();
|
||||
|
||||
Collections.addAll(args,
|
||||
System.getProperty("java.home") + "/bin/java",
|
||||
"-classpath",
|
||||
@@ -160,13 +157,14 @@ public class Main {
|
||||
errThread.start();
|
||||
|
||||
try {
|
||||
boolean requiresRestart = process.waitFor() == 42;
|
||||
return requiresRestart;
|
||||
process.waitFor();
|
||||
}
|
||||
finally {
|
||||
outThread.join();
|
||||
errThread.join();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
finally {
|
||||
patchFile.delete();
|
||||
@@ -189,7 +187,7 @@ public class Main {
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
copyStream(myIn, myOut);
|
||||
StreamUtil.copyStreamContent(myIn, myOut);
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
@@ -217,44 +215,4 @@ public class Main {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void copyFile(File from, File to) throws IOException {
|
||||
to.getParentFile().mkdirs();
|
||||
|
||||
FileInputStream is = null;
|
||||
FileOutputStream os = null;
|
||||
try {
|
||||
is = new FileInputStream(from);
|
||||
os = new FileOutputStream(to);
|
||||
|
||||
copyStream(is, os);
|
||||
}
|
||||
finally {
|
||||
if (is != null) {
|
||||
try {
|
||||
is.close();
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (os != null) {
|
||||
try {
|
||||
os.close();
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void copyStream(InputStream from, OutputStream to) throws IOException {
|
||||
byte[] buffer = new byte[65536];
|
||||
while (true) {
|
||||
int read = from.read(buffer);
|
||||
if (read < 0) break;
|
||||
to.write(buffer, 0, read);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,11 +16,16 @@
|
||||
package com.intellij.codeInsight;
|
||||
|
||||
import com.intellij.codeInsight.completion.InsertionContext;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.editor.CaretModel;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
@@ -72,11 +77,11 @@ public abstract class TailType {
|
||||
};
|
||||
|
||||
public static final TailType SEMICOLON = new CharTailType(';');
|
||||
public static final TailType EXCLAMATION = new CharTailType('!');
|
||||
@Deprecated public static final TailType EXCLAMATION = new CharTailType('!');
|
||||
|
||||
public static final TailType COMMA = new TailType(){
|
||||
public int processTail(final Editor editor, int tailOffset) {
|
||||
CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(editor.getProject());
|
||||
CommonCodeStyleSettings styleSettings = getLocalCodeStyleSettings(editor, tailOffset);
|
||||
if (styleSettings.SPACE_BEFORE_COMMA) tailOffset = insertChar(editor, tailOffset, ' ');
|
||||
tailOffset = insertChar(editor, tailOffset, ',');
|
||||
if (styleSettings.SPACE_AFTER_COMMA) tailOffset = insertChar(editor, tailOffset, ' ');
|
||||
@@ -87,6 +92,17 @@ public abstract class TailType {
|
||||
return "COMMA";
|
||||
}
|
||||
};
|
||||
|
||||
protected static CommonCodeStyleSettings getLocalCodeStyleSettings(Editor editor, int tailOffset) {
|
||||
Project project = editor.getProject();
|
||||
assert project != null;
|
||||
PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
|
||||
assert psiFile != null;
|
||||
Language language = PsiUtilBase.getLanguageAtOffset(psiFile, tailOffset);
|
||||
|
||||
return CodeStyleSettingsManager.getSettings(project).getCommonSettings(language);
|
||||
}
|
||||
|
||||
/**
|
||||
* insert a space, overtype if already present
|
||||
*/
|
||||
|
||||
@@ -16,11 +16,15 @@
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -132,4 +136,9 @@ public class InsertionContext {
|
||||
public boolean shouldAddCompletionChar() {
|
||||
return myAddCompletionChar;
|
||||
}
|
||||
|
||||
public CommonCodeStyleSettings getCodeStyleSettings() {
|
||||
Language lang = PsiUtilBase.getLanguageAtOffset(getFile(), getTailOffset());
|
||||
return CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(lang);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -18,13 +18,13 @@ package com.intellij.codeInspection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* This class is for the inspections that are gathered by another inspection,
|
||||
* This interface is for the inspections that are gathered by another inspection,
|
||||
* but should be shown under this inspection in the inspections result view.
|
||||
* This inspection is identified by the problem group, which is stored in the Annotation, HighlightInfo and ProblemDescriptor classes.
|
||||
*/
|
||||
public abstract class LocalDummyInspectionTool extends LocalInspectionTool {
|
||||
public interface DummyInspectionTool {
|
||||
@NotNull
|
||||
public abstract String getProblemGroup();
|
||||
String getProblemGroup();
|
||||
|
||||
public abstract boolean shouldBeShownInInspectionProfile();
|
||||
boolean shouldBeShownInInspectionProfile();
|
||||
}
|
||||
@@ -59,4 +59,6 @@ public interface RefManagerExtension<T> {
|
||||
boolean belongsToScope(final PsiElement psiElement);
|
||||
|
||||
void export(final RefEntity refEntity, final Element element);
|
||||
}
|
||||
|
||||
void onEntityInitialized(RefElement refEntity, PsiElement psiElement);
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 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.
|
||||
@@ -78,7 +78,7 @@ public class EmacsStyleIndentAction extends BaseCodeInsightAction implements Dum
|
||||
final int newPos = codeStyleManager.adjustLineIndent(file, lineStart);
|
||||
final int newCol = newPos - lineStart;
|
||||
final int lineInc = document.getLineEndOffset(line) - initLineEnd;
|
||||
if (newCol >= col + lineInc) {
|
||||
if (newCol >= col + lineInc && newCol >= 0) {
|
||||
final LogicalPosition pos = new LogicalPosition(line, newCol);
|
||||
editor.getCaretModel().moveToLogicalPosition(pos);
|
||||
editor.getSelectionModel().removeSelection();
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 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.
|
||||
@@ -36,7 +36,7 @@ public abstract class AbstractElementSignatureProvider implements ElementSignatu
|
||||
|
||||
@Nullable
|
||||
public PsiElement restoreBySignature(@NotNull PsiFile file, @NotNull String signature, @Nullable StringBuilder processingInfoStorage) {
|
||||
int semicolonIndex = signature.indexOf(';');
|
||||
int semicolonIndex = signature.indexOf(ELEMENTS_SEPARATOR);
|
||||
PsiElement parent;
|
||||
|
||||
if (semicolonIndex >= 0) {
|
||||
|
||||
+5
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 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.
|
||||
@@ -42,6 +42,9 @@ public class CollapseSelectionHandler implements CodeInsightActionHandler {
|
||||
if (editor.getSelectionModel().hasSelection()) {
|
||||
int start = editor.getSelectionModel().getSelectionStart();
|
||||
int end = editor.getSelectionModel().getSelectionEnd();
|
||||
if (start + 1 >= end) {
|
||||
return;
|
||||
}
|
||||
Document doc = editor.getDocument();
|
||||
if (start < end && doc.getCharsSequence().charAt(end-1) == '\n') end--;
|
||||
FoldRegion region;
|
||||
@@ -52,7 +55,7 @@ public class CollapseSelectionHandler implements CodeInsightActionHandler {
|
||||
}
|
||||
} else if (!foldingModel.intersectsRegion(start, end)) {
|
||||
region = foldingModel.addFoldRegion(start, end, ourPlaceHolderText);
|
||||
LOG.assertTrue(region != null);
|
||||
LOG.assertTrue(region != null, "Fold region is not created. Folding model: " + foldingModel);
|
||||
region.setExpanded(false);
|
||||
int offset = Math.min(start + ourPlaceHolderText.length(), doc.getTextLength());
|
||||
editor.getCaretModel().moveToOffset(offset);
|
||||
|
||||
+12
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 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.
|
||||
@@ -79,10 +79,21 @@ public class OffsetsElementSignatureProvider extends AbstractElementSignaturePro
|
||||
PsiElement element = file.findElementAt(start);
|
||||
if (element != null) {
|
||||
result = findElement(start, end, index, element, processingInfoStorage);
|
||||
if (result == null && processingInfoStorage != null) {
|
||||
processingInfoStorage.append(String.format(
|
||||
"Failed to find an element by the given offsets. Started by the element '%s' (%s)", element, element.getText()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if (result == null) {
|
||||
final PsiElement injectedStartElement = InjectedLanguageUtil.findElementAtNoCommit(file, start);
|
||||
if (processingInfoStorage != null) {
|
||||
processingInfoStorage.append(String.format(
|
||||
"Trying to find injected element starting from the '%s'%s%n",
|
||||
injectedStartElement, injectedStartElement == null ? "" : String.format("(%s)", injectedStartElement.getText())
|
||||
));
|
||||
}
|
||||
if (injectedStartElement != null && injectedStartElement != element) {
|
||||
result = findElement(start, end, index, injectedStartElement, processingInfoStorage);
|
||||
}
|
||||
|
||||
+11
-3
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.folding.impl;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -67,7 +68,7 @@ public class PsiNamesElementSignatureProvider extends AbstractElementSignaturePr
|
||||
else {
|
||||
if (processingInfoStorage != null) {
|
||||
processingInfoStorage.append(String.format(
|
||||
"Stopping '%s' provider because it has top level marker but more than one non white-space child: %s",
|
||||
"Stopping '%s' provider because it has top level marker but more than one non white-space child: %s%n",
|
||||
getClass().getName(), Arrays.toString(file.getChildren())
|
||||
));
|
||||
}
|
||||
@@ -77,7 +78,7 @@ public class PsiNamesElementSignatureProvider extends AbstractElementSignaturePr
|
||||
}
|
||||
if (processingInfoStorage != null) {
|
||||
processingInfoStorage.append(String.format(
|
||||
"Finished processing of '%s' provider because all of its top-level children have been processed: %s",
|
||||
"Finished processing of '%s' provider because all of its top-level children have been processed: %s%n",
|
||||
getClass().getName(), Arrays.toString(file.getChildren())
|
||||
));
|
||||
}
|
||||
@@ -99,10 +100,17 @@ public class PsiNamesElementSignatureProvider extends AbstractElementSignaturePr
|
||||
}
|
||||
|
||||
if (!tokenizer.hasMoreTokens()) {
|
||||
if (processingInfoStorage != null) {
|
||||
processingInfoStorage.append(String.format("Stopping '%s' provider because it has no more data to process%n", getClass().getName()));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
int index = Integer.parseInt(tokenizer.nextToken());
|
||||
if (processingInfoStorage != null) {
|
||||
processingInfoStorage.append(String.format("Looking for the child with a name '%s' # %d at the element '%s'%n",
|
||||
elementMarker, index, parent));
|
||||
}
|
||||
return restoreElementInternal(parent, elementMarker, index, PsiNamedElement.class);
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
@@ -172,7 +180,7 @@ public class PsiNamesElementSignatureProvider extends AbstractElementSignaturePr
|
||||
if (element instanceof PsiNamedElement) {
|
||||
PsiNamedElement named = (PsiNamedElement)element;
|
||||
final String name = named.getName();
|
||||
if (name == null) {
|
||||
if (StringUtil.isEmpty(name)) {
|
||||
return null;
|
||||
}
|
||||
int index = getChildIndex(named, element.getParent(), name, (Class<PsiNamedElement>)named.getClass());
|
||||
|
||||
+10
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 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.
|
||||
@@ -18,6 +18,7 @@ package com.intellij.codeInsight.folding.impl;
|
||||
|
||||
import com.intellij.lang.folding.FoldingDescriptor;
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.FoldRegion;
|
||||
import com.intellij.openapi.editor.FoldingGroup;
|
||||
@@ -41,6 +42,9 @@ import static com.intellij.util.containers.CollectionFactory.newTroveMap;
|
||||
* @author cdr
|
||||
*/
|
||||
class UpdateFoldRegionsOperation implements Runnable {
|
||||
|
||||
private static final Logger LOG = Logger.getInstance("#" + UpdateFoldRegionsOperation.class.getName());
|
||||
|
||||
private final Project myProject;
|
||||
private final Editor myEditor;
|
||||
private final PsiFile myFile;
|
||||
@@ -104,6 +108,11 @@ class UpdateFoldRegionsOperation implements Runnable {
|
||||
FoldingGroup group = descriptor.getGroup();
|
||||
TextRange range = descriptor.getRange();
|
||||
String placeholder = descriptor.getPlaceholderText();
|
||||
if (range.getEndOffset() > myEditor.getDocument().getTextLength()) {
|
||||
LOG.error(String.format("Invalid folding descriptor detected (%s). It ends beyond the document range (%d)",
|
||||
descriptor, myEditor.getDocument().getTextLength()));
|
||||
continue;
|
||||
}
|
||||
FoldRegion region = foldingModel.createFoldRegion(range.getStartOffset(), range.getEndOffset(),
|
||||
placeholder == null ? "..." : placeholder,
|
||||
group,
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright 2000-2012 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.codeInsight.lookup.impl;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.ui.HeavyweightHint;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class CompletionExtender extends HeavyweightHint {
|
||||
private LookupElement myElement;
|
||||
private LookupImpl myLookup;
|
||||
private int myIndex;
|
||||
|
||||
public CompletionExtender(@NotNull LookupElement element, @NotNull LookupImpl lookup) {
|
||||
super(createComponent(element, lookup), false);
|
||||
myElement = element;
|
||||
myLookup = lookup;
|
||||
myIndex = myLookup.getList().getSelectedIndex();
|
||||
}
|
||||
|
||||
public LookupElement getLookupElement() {
|
||||
return myElement;
|
||||
}
|
||||
|
||||
public boolean sameAsFor(LookupElement item) {
|
||||
return getLookupElement().equals(item)
|
||||
&& myIndex == myLookup.getList().getSelectedIndex();
|
||||
}
|
||||
|
||||
private static JComponent createComponent(LookupElement element, LookupImpl lookup) {
|
||||
final LookupCellRenderer renderer = new LookupCellRenderer(lookup);
|
||||
renderer.setFullSize(true);
|
||||
final JComponent component = (JComponent)renderer.getListCellRendererComponent(lookup.getList(), element,
|
||||
lookup.getList().getSelectedIndex(),
|
||||
true, false);
|
||||
component.setSize(component.getPreferredSize());
|
||||
return component;
|
||||
}
|
||||
|
||||
public boolean show() {
|
||||
final JList list = myLookup.getList();
|
||||
if (getComponent().getWidth() > list.getWidth()) {
|
||||
final JComponent rootPane = UIUtil.getRootPane(myLookup.getEditor().getContentComponent());
|
||||
|
||||
final Point p = list.getLocationOnScreen();
|
||||
p.y += list.indexToLocation(list.getSelectedIndex()).y;
|
||||
SwingUtilities.convertPointFromScreen(p, rootPane);
|
||||
|
||||
if (rootPane != null) {
|
||||
show(rootPane, p);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hide() {
|
||||
super.hide();
|
||||
myLookup = null;
|
||||
myElement = null;
|
||||
}
|
||||
}
|
||||
@@ -95,7 +95,7 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable
|
||||
|
||||
private final Project myProject;
|
||||
private final Editor myEditor;
|
||||
private Hint tip;
|
||||
private CompletionExtender extender;
|
||||
private String myInitialPrefix;
|
||||
|
||||
private boolean myStableStart;
|
||||
@@ -1029,10 +1029,6 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable
|
||||
public void valueChanged(ListSelectionEvent e){
|
||||
myHintAlarm.cancelAllRequests();
|
||||
|
||||
if (tip != null && tip.isVisible()) {
|
||||
tip.hide();
|
||||
}
|
||||
|
||||
final LookupElement item = getCurrentItem();
|
||||
if (oldItem != item) {
|
||||
mySelectionInvariant = item == null ? null : myPresentableModel.getItemPresentationInvariant(item);
|
||||
@@ -1043,26 +1039,18 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable
|
||||
}
|
||||
if (item != null) {
|
||||
updateHint(item);
|
||||
if (myList.getModel().getSize() > 1 && isVisible()) {
|
||||
final LookupCellRenderer renderer = new LookupCellRenderer(LookupImpl.this);
|
||||
renderer.setFullSize(true);
|
||||
final JComponent component = (JComponent)renderer.getListCellRendererComponent(myList, item,
|
||||
myList
|
||||
.getSelectedIndex(),
|
||||
true, false);
|
||||
component.setSize(component.getPreferredSize());
|
||||
if (component.getWidth() > myList.getWidth()) {
|
||||
tip = new HeavyweightHint(component, false);
|
||||
final Point p = myList.getLocationOnScreen();
|
||||
p.y += myList.indexToLocation(myList.getSelectedIndex()).y;
|
||||
}
|
||||
oldItem = item;
|
||||
|
||||
final JComponent editor = UIUtil.getRootPane(myEditor.getContentComponent());
|
||||
SwingUtilities.convertPointFromScreen(p, editor);
|
||||
tip.show(editor, p.x, p.y, null, new HintHint(editor, p));
|
||||
if (item != null && LookupImpl.this.isVisible()) {
|
||||
if (extender == null || !extender.isVisible() || !extender.sameAsFor(item)) {
|
||||
if (extender != null) extender.hide();
|
||||
extender = new CompletionExtender(item, LookupImpl.this);
|
||||
if (!extender.show()) {
|
||||
extender.hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
oldItem = item;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1390,8 +1378,8 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable
|
||||
}
|
||||
Disposer.dispose(myProcessIcon);
|
||||
Disposer.dispose(myHintAlarm);
|
||||
if (tip != null) {
|
||||
tip.hide();
|
||||
if (extender != null) {
|
||||
extender.hide();
|
||||
}
|
||||
myDisposed = true;
|
||||
disposeTrace = DebugUtil.currentStackTrace() + "\n============";
|
||||
|
||||
@@ -18,8 +18,8 @@ package com.intellij.codeInspection.ex;
|
||||
|
||||
import com.intellij.codeHighlighting.HighlightDisplayLevel;
|
||||
import com.intellij.codeInsight.daemon.HighlightDisplayKey;
|
||||
import com.intellij.codeInspection.DummyInspectionTool;
|
||||
import com.intellij.codeInspection.InspectionProfileEntry;
|
||||
import com.intellij.codeInspection.LocalDummyInspectionTool;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScope;
|
||||
@@ -62,8 +62,8 @@ public class Descriptor {
|
||||
if (tool instanceof InspectionToolWrapper) {
|
||||
InspectionProfileEntry inspection = ((InspectionToolWrapper)tool).getTool();
|
||||
|
||||
if (inspection instanceof LocalDummyInspectionTool) {
|
||||
myShouldBeShown = ((LocalDummyInspectionTool)inspection).shouldBeShownInInspectionProfile();
|
||||
if (inspection instanceof DummyInspectionTool) {
|
||||
myShouldBeShown = ((DummyInspectionTool)inspection).shouldBeShownInInspectionProfile();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -354,7 +354,7 @@ public class GlobalInspectionContextImpl extends UserDataHolderBase implements G
|
||||
|
||||
public boolean isToCheckFile(PsiFile file, final InspectionProfileEntry tool) {
|
||||
final Tools tools = myTools.get(tool.getShortName());
|
||||
if (tools != null) {
|
||||
if (tools != null && file != null) {
|
||||
for (ScopeToolState state : tools.getTools()) {
|
||||
final NamedScope namedScope = state.getScope(file.getProject());
|
||||
if (namedScope == null || namedScope.getValue().contains(file, getCurrentProfile().getProfileManager().getScopesManager())) {
|
||||
@@ -636,12 +636,12 @@ public class GlobalInspectionContextImpl extends UserDataHolderBase implements G
|
||||
InspectionToolWrapper toolWrapper = (InspectionToolWrapper)profileEntry;
|
||||
InspectionProfileEntry inspectionTool = toolWrapper.getTool();
|
||||
|
||||
if (inspectionTool instanceof LocalDummyInspectionTool) {
|
||||
if (inspectionTool instanceof DummyInspectionTool) {
|
||||
if (toolWrappers == null) {
|
||||
toolWrappers = new HashMap<String, DescriptorProviderInspection>();
|
||||
}
|
||||
|
||||
toolWrappers.put(((LocalDummyInspectionTool)inspectionTool).getProblemGroup(), toolWrapper);
|
||||
toolWrappers.put(((DummyInspectionTool)inspectionTool).getProblemGroup(), toolWrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +99,10 @@ public class RefManagerImpl extends RefManager {
|
||||
}
|
||||
}
|
||||
|
||||
public GlobalInspectionContextImpl getContext() {
|
||||
return myContext;
|
||||
}
|
||||
|
||||
public void iterate(RefVisitor visitor) {
|
||||
myLock.readLock().lock();
|
||||
try {
|
||||
@@ -440,6 +444,9 @@ public class RefManagerImpl extends RefManager {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
refElement.initialize();
|
||||
for (RefManagerExtension extension : myExtensions.values()) {
|
||||
extension.onEntityInitialized(refElement, elem);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -84,7 +84,10 @@ public class FormattingDocumentModelImpl implements FormattingDocumentModel {
|
||||
|
||||
@Override
|
||||
public int getLineNumber(int offset) {
|
||||
LOG.assertTrue (offset <= myDocument.getTextLength());
|
||||
if (offset > myDocument.getTextLength()) {
|
||||
LOG.error(String.format("Invalid offset detected (%d). Document length: %d. Target file: %s",
|
||||
offset, myDocument.getTextLength(), myFile));
|
||||
}
|
||||
return myDocument.getLineNumber(offset);
|
||||
}
|
||||
|
||||
|
||||
+9
@@ -26,6 +26,7 @@ import com.intellij.openapi.diff.DiffPanel;
|
||||
import com.intellij.openapi.diff.ex.DiffPanelEx;
|
||||
import com.intellij.openapi.diff.ex.DiffPanelOptions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.ExcludingTraversalPolicy;
|
||||
@@ -63,6 +64,14 @@ public class FileHistoryDialog extends HistoryDialog<FileHistoryDialogModel> {
|
||||
protected void setDiffBorder(Border border) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
if (myDiffPanel != null) {
|
||||
Disposer.dispose(myDiffPanel);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Runnable doUpdateDiffs(final FileHistoryDialogModel model) {
|
||||
final FileDifferenceModel diffModel = model.getDifferenceModel();
|
||||
|
||||
@@ -20,6 +20,8 @@ import com.intellij.openapi.project.Project;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
*
|
||||
* This may implement {@link com.intellij.openapi.project.DumbAware}.
|
||||
*/
|
||||
public interface StartupActivity {
|
||||
|
||||
|
||||
@@ -275,8 +275,8 @@ public class Switcher extends AnAction implements DumbAware {
|
||||
toolWindows.addMouseMotionListener(this);
|
||||
toolWindows.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
if (!toolWindows.getSelectionModel().isSelectionEmpty()) {
|
||||
files.getSelectionModel().clearSelection();
|
||||
if (!toolWindows.isSelectionEmpty() && !files.isSelectionEmpty()) {
|
||||
files.clearSelection();
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -411,7 +411,7 @@ public class Switcher extends AnAction implements DumbAware {
|
||||
files.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
files.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
if (!files.getSelectionModel().isSelectionEmpty()) {
|
||||
if (!files.isSelectionEmpty() && !toolWindows.isSelectionEmpty()) {
|
||||
toolWindows.getSelectionModel().clearSelection();
|
||||
}
|
||||
}
|
||||
@@ -693,12 +693,20 @@ public class Switcher extends AnAction implements DumbAware {
|
||||
}
|
||||
|
||||
public JList getSelectedList() {
|
||||
return getSelectedList(files);
|
||||
}
|
||||
|
||||
JList getSelectedList(JList preferable) {
|
||||
if (toolWindows.isSelectionEmpty() && files.isSelectionEmpty()) {
|
||||
if (files.getModel().getSize() > 1) {
|
||||
if (preferable != null && preferable.getModel().getSize() > 0) {
|
||||
preferable.setSelectedIndex(0);
|
||||
return preferable;
|
||||
} else
|
||||
|
||||
if (files.getModel().getSize() > 0) {
|
||||
files.setSelectedIndex(0);
|
||||
return files;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
toolWindows.setSelectedIndex(0);
|
||||
return toolWindows;
|
||||
}
|
||||
@@ -709,8 +717,8 @@ public class Switcher extends AnAction implements DumbAware {
|
||||
}
|
||||
|
||||
void navigate() {
|
||||
myPopup.closeOk(null);
|
||||
final Object value = getSelectedList().getSelectedValue();
|
||||
myPopup.closeOk(null);
|
||||
if (value instanceof ToolWindow) {
|
||||
((ToolWindow)value).activate(null, true, true);
|
||||
}
|
||||
@@ -847,21 +855,23 @@ public class Switcher extends AnAction implements DumbAware {
|
||||
@Override
|
||||
protected void selectElement(Object element, String selectedText) {
|
||||
if (element instanceof FileInfo) {
|
||||
toolWindows.getSelectionModel().clearSelection();
|
||||
if (!toolWindows.isSelectionEmpty()) toolWindows.clearSelection();
|
||||
files.setSelectedValue(element, false);
|
||||
} else {
|
||||
files.clearSelection();
|
||||
if (!files.isSelectionEmpty()) files.clearSelection();
|
||||
toolWindows.setSelectedValue(element, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
final JList list = getSelectedList();
|
||||
final Object value = list.getSelectedValue();
|
||||
((NameFilteringListModel)files.getModel()).refilter();
|
||||
((NameFilteringListModel)toolWindows.getModel()).refilter();
|
||||
files.repaint();
|
||||
toolWindows.repaint();
|
||||
getSelectedList();
|
||||
getSelectedList(list).setSelectedValue(value, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -141,12 +141,14 @@ public class EditorUtil {
|
||||
editorInfo = ((EditorImpl)editor).dumpState();
|
||||
}
|
||||
else {
|
||||
editorInfo = "all soft wraps: " + editor.getSoftWrapModel().getSoftWrapsForRange(0, document.getTextLength())
|
||||
+ ", fold regions: " + Arrays.toString(editor.getFoldingModel().getAllFoldRegions());
|
||||
editorInfo = "editor's class: " + editor.getClass()
|
||||
+ ", all soft wraps: " + editor.getSoftWrapModel().getSoftWrapsForRange(0, document.getTextLength())
|
||||
+ ", fold regions: " + Arrays.toString(editor.getFoldingModel().getAllFoldRegions());
|
||||
}
|
||||
LOG.error(String.format(
|
||||
LogMessageEx.error(LOG, "Can't calculate last visual column", String.format(
|
||||
"Target visual line: %d, mapped logical line: %d, visual lines range for the mapped logical line: [%s]-[%s], soft wraps for "
|
||||
+ "the target logical line: %s. Editor info: %s", line, resultLogLine, resVisStart, resVisEnd, softWraps, editorInfo
|
||||
+ "the target logical line: %s. Editor info: %s",
|
||||
line, resultLogLine, resVisStart, resVisEnd, softWraps, editorInfo
|
||||
));
|
||||
|
||||
return resVisEnd.column;
|
||||
|
||||
@@ -117,7 +117,7 @@ public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener,
|
||||
public void updateFinished(@NotNull Document doc) {
|
||||
if (doc != myEditor.getDocument() || myIsInUpdate) return;
|
||||
if (savedBeforeBulkCaretMarker != null && savedBeforeBulkCaretMarker.isValid()
|
||||
&& savedBeforeBulkCaretMarker.getStartOffset() != myOffset)
|
||||
&& savedBeforeBulkCaretMarker.getStartOffset() != myOffset && !myReportCaretMoves)
|
||||
{
|
||||
moveToOffset(savedBeforeBulkCaretMarker.getStartOffset());
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 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,6 +19,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.wm.ex.WindowManagerEx;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.EventListenerList;
|
||||
@@ -45,7 +46,11 @@ public class HeavyweightHint implements Hint {
|
||||
/**
|
||||
* Shows the hint as the window
|
||||
*/
|
||||
public void show(@NotNull JComponent parentComponent, int x, int y, JComponent focusBackComponent, @NotNull HintHint hintInfo) {
|
||||
public void show(@NotNull JComponent parentComponent, int x, int y, @Nullable JComponent focusBackComponent, @Nullable HintHint hintInfo) {
|
||||
show(parentComponent, new Point(x, y));
|
||||
}
|
||||
|
||||
public void show(@NotNull JComponent parentComponent, Point p) {
|
||||
myParentComponent = parentComponent;
|
||||
LOG.assertTrue(parentComponent.isShowing());
|
||||
|
||||
@@ -59,10 +64,12 @@ public class HeavyweightHint implements Hint {
|
||||
myWindow.getContentPane().setLayout(new BorderLayout());
|
||||
myWindow.getContentPane().add(myComponent, BorderLayout.CENTER);
|
||||
|
||||
updateBounds(x, y);
|
||||
updateBounds(p.x, p.y);
|
||||
myWindow.setVisible(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected void fireHintHidden() {
|
||||
final EventListener[] listeners = myListenerList.getListeners(HintListener.class);
|
||||
for (EventListener listener1 : listeners) {
|
||||
|
||||
@@ -368,9 +368,10 @@ public class FileWatcherTest extends PlatformLangTestCase {
|
||||
}
|
||||
}
|
||||
finally {
|
||||
VirtualDirectoryImpl.disallowRootAccess(substRoot);
|
||||
delete(targetDir);
|
||||
new GeneralCommandLine("subst", subst + ":", "/d").createProcess().waitFor();
|
||||
myFileSystem.refresh(false);
|
||||
VirtualDirectoryImpl.disallowRootAccess(substRoot);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.intellij.util;
|
||||
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.win32.StdCallLibrary;
|
||||
@@ -68,7 +69,13 @@ public class Restarter {
|
||||
int pid = kernel32.GetCurrentProcessId();
|
||||
|
||||
try {
|
||||
String command = "restarter " + Integer.toString(pid) + " " + cline;
|
||||
// to prevent blocking exe file during update we should copy it
|
||||
File restarterFile = new File(PathManager.getBinPath(), "restarter.exe");
|
||||
File restarterCopy = FileUtil.createTempFile("restarter", ".exe");
|
||||
|
||||
FileUtil.copy(restarterFile, restarterCopy);
|
||||
|
||||
String command = "\"" + restarterCopy + "\" " + Integer.toString(pid) + " " + cline;
|
||||
Runtime.getRuntime().exec(command, null, new File(PathManager.getBinPath()));
|
||||
}
|
||||
catch (IOException ex) {
|
||||
|
||||
@@ -36,11 +36,16 @@ public abstract class VcsBackgroundTask<T> extends Task.ConditionalModal {
|
||||
private final List<VcsException> myExceptions = new ArrayList<VcsException>();
|
||||
|
||||
public VcsBackgroundTask(final Project project, @NotNull final String title, @NotNull final PerformInBackgroundOption backgroundOption,
|
||||
final Collection<T> itemsToProcess) {
|
||||
super(project, title, false, backgroundOption);
|
||||
final Collection<T> itemsToProcess, final boolean canBeCanceled) {
|
||||
super(project, title, canBeCanceled, backgroundOption);
|
||||
myItems = itemsToProcess;
|
||||
}
|
||||
|
||||
public VcsBackgroundTask(final Project project, @NotNull final String title, @NotNull final PerformInBackgroundOption backgroundOption,
|
||||
final Collection<T> itemsToProcess) {
|
||||
this(project, title, backgroundOption, itemsToProcess, false);
|
||||
}
|
||||
|
||||
public void run(@NotNull ProgressIndicator indicator) {
|
||||
for(T item: myItems) {
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright 2000-2012 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.util.ui;
|
||||
|
||||
import com.intellij.history.LocalHistory;
|
||||
import com.intellij.history.LocalHistoryAction;
|
||||
import com.intellij.openapi.progress.PerformInBackgroundOption;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
* User: Irina.Chernushina
|
||||
* Date: 4/13/12
|
||||
* Time: 1:59 PM
|
||||
*/
|
||||
public abstract class VcsBackgroundTaskWithLocalHistory<T> extends VcsBackgroundTask<T> {
|
||||
private final String myActionName;
|
||||
|
||||
protected VcsBackgroundTaskWithLocalHistory(Project project,
|
||||
@NotNull String title,
|
||||
@NotNull PerformInBackgroundOption backgroundOption,
|
||||
Collection<T> itemsToProcess,
|
||||
String actionName) {
|
||||
super(project, title, backgroundOption, itemsToProcess);
|
||||
myActionName = actionName;
|
||||
}
|
||||
|
||||
protected VcsBackgroundTaskWithLocalHistory(Project project,
|
||||
@NotNull String title,
|
||||
@NotNull PerformInBackgroundOption backgroundOption,
|
||||
Collection<T> itemsToProcess,
|
||||
boolean canBeCanceled, String actionName) {
|
||||
super(project, title, backgroundOption, itemsToProcess, canBeCanceled);
|
||||
myActionName = actionName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(@NotNull ProgressIndicator indicator) {
|
||||
LocalHistoryAction action = LocalHistoryAction.NULL;
|
||||
if (myActionName != null) {
|
||||
action = LocalHistory.getInstance().startAction(myActionName);
|
||||
}
|
||||
try {
|
||||
super.run(indicator);
|
||||
} finally {
|
||||
action.finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,6 +40,7 @@ import java.util.List;
|
||||
*/
|
||||
public class InspectionDescriptionNotFoundInspection extends DevKitInspectionBase{
|
||||
@NonNls static final String INSPECTION_PROFILE_ENTRY = InspectionProfileEntry.class.getName();
|
||||
@NonNls static final String DUMMY_INSPECTION_TOOL = DummyInspectionTool.class.getName();
|
||||
@NonNls private static final String INSPECTION_DESCRIPTIONS = "inspectionDescriptions";
|
||||
|
||||
@Override
|
||||
@@ -51,8 +52,10 @@ public class InspectionDescriptionNotFoundInspection extends DevKitInspectionBas
|
||||
if (nameIdentifier == null || module == null || !PsiUtil.isInstantiatable(aClass)) return null;
|
||||
|
||||
final PsiClass base = JavaPsiFacade.getInstance(project).findClass(INSPECTION_PROFILE_ENTRY, GlobalSearchScope.allScope(project));
|
||||
final PsiClass dummy = JavaPsiFacade.getInstance(project).findClass(DUMMY_INSPECTION_TOOL, GlobalSearchScope.allScope(project));
|
||||
|
||||
if (base == null || ! aClass.isInheritor(base, true) || isPathMethodsAreOverridden(aClass)) return null;
|
||||
if (dummy == null || aClass.isInheritor(dummy, true)) return null;
|
||||
|
||||
PsiMethod method = findNearestMethod("getShortName", aClass);
|
||||
if (method != null && method.getContainingClass().getQualifiedName().equals(INSPECTION_PROFILE_ENTRY)) {
|
||||
|
||||
@@ -37,7 +37,7 @@ import java.awt.event.ActionListener;
|
||||
*/
|
||||
public class GitVcsPanel {
|
||||
|
||||
private static final String IDEA_SSH = ApplicationNamesInfo.getInstance().getProductName() + " " + GitBundle.getString("git.vcs.config.ssh.mode.idea"); // IDEA ssh value
|
||||
private static final String IDEA_SSH = GitBundle.getString("git.vcs.config.ssh.mode.idea"); // IDEA ssh value
|
||||
private static final String NATIVE_SSH = GitBundle.getString("git.vcs.config.ssh.mode.native"); // Native SSH value
|
||||
private static final String CRLF_CONVERT_TO_PROJECT = GitBundle.getString("git.vcs.config.convert.project");
|
||||
private static final String CRLF_DO_NOT_CONVERT = GitBundle.getString("git.vcs.config.convert.do.not.convert");
|
||||
|
||||
@@ -144,7 +144,7 @@ git.vcs.config.convert.tooltip=<html>Specify what to do if line separators in a
|
||||
Note that this setting has nothing common with Git autocrlf and other Git settings.\
|
||||
</html>
|
||||
git.vcs.config.path.label=Path to &Git Executable:
|
||||
git.vcs.config.ssh.mode.idea=ssh
|
||||
git.vcs.config.ssh.mode.idea=Built-in
|
||||
git.vcs.config.ssh.mode.native=Native
|
||||
git.vcs.config.ssh.mode.tooltip=<html>Specify which version of SSH to be used with Git.<ul><li><b>Native</b> means that the native SSH will be used.</li><li><b>{0} SSH</b> means that the implementation provided by the {0} will be used.</li></ul>The native implementation might cause hangups on some platforms. In native case, you also might need to configure <em>ssh-askpass</em> for your platform to receive GUI prompts for passwords.</html>
|
||||
git.vcs.config.ssh.mode=&SSH Executable:
|
||||
|
||||
@@ -19,12 +19,16 @@ package org.jetbrains.idea.svn.actions;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.changes.BackgroundFromStartOption;
|
||||
import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.util.ui.VcsBackgroundTaskWithLocalHistory;
|
||||
import org.jetbrains.idea.svn.SvnBundle;
|
||||
import org.jetbrains.idea.svn.SvnStatusUtil;
|
||||
import org.jetbrains.idea.svn.SvnVcs;
|
||||
@@ -40,6 +44,7 @@ import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
public class AddAction extends BasicAction {
|
||||
static final Logger log = Logger.getInstance("org.jetbrains.idea.svn.action.AddAction");
|
||||
@@ -57,22 +62,47 @@ public class AddAction extends BasicAction {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void batchPerform(final Project project, SvnVcs activeVcs, VirtualFile[] files, DataContext context)
|
||||
protected void batchPerform(final Project project, final SvnVcs activeVcs, final VirtualFile[] files, DataContext context)
|
||||
throws VcsException {
|
||||
log.debug("enter: batchPerform");
|
||||
|
||||
SvnVcs vcs = SvnVcs.getInstance(project);
|
||||
SVNWCClient wcClient = vcs.createWCClient();
|
||||
wcClient.setEventHandler(new AddEventListener(project));
|
||||
addFiles(project, activeVcs, files);
|
||||
}
|
||||
|
||||
Collection<SVNException> exceptions = SvnCheckinEnvironment.scheduleUnversionedFilesForAddition(wcClient, Arrays.asList(files), true);
|
||||
if (! exceptions.isEmpty()) {
|
||||
final Collection<String> messages = new ArrayList<String>(exceptions.size());
|
||||
for (SVNException exception : exceptions) {
|
||||
messages.add(exception.getMessage());
|
||||
}
|
||||
throw new VcsException(messages);
|
||||
}
|
||||
private void addFiles(final Project project, final SvnVcs activeVcs, final VirtualFile[] files) {
|
||||
// passed parameter serves only for ""
|
||||
VcsBackgroundTaskWithLocalHistory taskWithLocalHistory =
|
||||
new VcsBackgroundTaskWithLocalHistory<VirtualFile[]>(project, getActionName(activeVcs), BackgroundFromStartOption.getInstance(),
|
||||
Collections.singleton(files), true, SvnBundle.message("action.Subversion.Add.text")) {
|
||||
@Override
|
||||
protected void process(VirtualFile[] items) throws VcsException {
|
||||
ProjectLevelVcsManager manager = ProjectLevelVcsManager.getInstance(project);
|
||||
manager.startBackgroundVcsOperation();
|
||||
try {
|
||||
|
||||
SVNWCClient wcClient = activeVcs.createWCClient();
|
||||
wcClient.setEventHandler(new AddEventListener(project));
|
||||
|
||||
Collection<SVNException> exceptions =
|
||||
SvnCheckinEnvironment.scheduleUnversionedFilesForAddition(wcClient, Arrays.asList(items), true);
|
||||
if (!exceptions.isEmpty()) {
|
||||
final Collection<String> messages = new ArrayList<String>(exceptions.size());
|
||||
for (SVNException exception : exceptions) {
|
||||
messages.add(exception.getMessage());
|
||||
}
|
||||
throw new VcsException(messages);
|
||||
}
|
||||
} finally {
|
||||
manager.stopBackgroundVcsOperation();
|
||||
}
|
||||
}
|
||||
};
|
||||
ProgressManager.getInstance().run(taskWithLocalHistory);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean witeLocalHistory() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean isBatchAction() {
|
||||
@@ -82,16 +112,7 @@ public class AddAction extends BasicAction {
|
||||
|
||||
protected void perform(Project project, SvnVcs activeVcs, VirtualFile file, DataContext context)
|
||||
throws VcsException {
|
||||
try {
|
||||
SVNWCClient wcClient = activeVcs.createWCClient();
|
||||
wcClient.setEventHandler(new AddEventListener(project));
|
||||
wcClient.doAdd(new File(file.getPath()), false, false, true, true);
|
||||
}
|
||||
catch (SVNException e) {
|
||||
VcsException ve = new VcsException(e);
|
||||
ve.setVirtualFile(file);
|
||||
throw ve;
|
||||
}
|
||||
addFiles(project, activeVcs, new VirtualFile[] {file});
|
||||
}
|
||||
|
||||
private static class AddEventListener implements ISVNEventHandler {
|
||||
|
||||
@@ -61,7 +61,7 @@ public abstract class BasicAction extends AnAction implements DumbAware {
|
||||
|
||||
final AbstractVcsHelper helper = AbstractVcsHelper.getInstance(project);
|
||||
LocalHistoryAction action = LocalHistoryAction.NULL;
|
||||
if (actionName != null) {
|
||||
if (witeLocalHistory() && actionName != null) {
|
||||
action = LocalHistory.getInstance().startAction(actionName);
|
||||
}
|
||||
|
||||
@@ -95,6 +95,10 @@ public abstract class BasicAction extends AnAction implements DumbAware {
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean witeLocalHistory() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void update(AnActionEvent e) {
|
||||
//LOG.debug("enter: update class:"+getClass().getName());
|
||||
super.update(e);
|
||||
|
||||
@@ -392,6 +392,26 @@ public class SvnCheckinEnvironment implements CheckinEnvironment {
|
||||
|
||||
Collections.sort(files, FilePathComparator.getInstance());
|
||||
|
||||
wcClient.setEventHandler(new ISVNEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(SVNEvent event, double progress) throws SVNException {
|
||||
final ProgressManager pm = ProgressManager.getInstance();
|
||||
final ProgressIndicator pi = pm.getProgressIndicator();
|
||||
if (pi != null && event.getFile() != null) {
|
||||
File file = event.getFile();
|
||||
pi.setText(SvnBundle.message("progress.text2.adding", file.getName() + " (" + file.getParent() + ")"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCancelled() throws SVNCancelException {
|
||||
final ProgressManager pm = ProgressManager.getInstance();
|
||||
final ProgressIndicator pi = pm.getProgressIndicator();
|
||||
if (pi != null) {
|
||||
if (pi.isCanceled()) throw new SVNCancelException();
|
||||
}
|
||||
}
|
||||
});
|
||||
for (VirtualFile file : files) {
|
||||
try {
|
||||
wcClient.doAdd(new File(FileUtil.toSystemDependentName(file.getPath())), true, false, true, recursive);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.jetbrains.idea.svn.history;
|
||||
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import org.tmatesoft.svn.core.SVNException;
|
||||
@@ -88,6 +89,7 @@ public class BunchFactory {
|
||||
if (defender == 0) {
|
||||
return;
|
||||
}
|
||||
ProgressManager.checkCanceled();
|
||||
final Fragment fragment = myCurrentProvider.getEarliestBunchInInterval(myYoungest, 0,
|
||||
(myYoungest == -1) ? myBunchSize : (myBunchSize + 1), (myYoungest == -1), true);
|
||||
if ((fragment == null) || (fragment.getList().isEmpty())) {
|
||||
@@ -95,6 +97,7 @@ public class BunchFactory {
|
||||
break;
|
||||
}
|
||||
|
||||
ProgressManager.checkCanceled();
|
||||
final List<CommittedChangeList> bunchLists = fragment.getList();
|
||||
if (! fragment.isConsistentWithYounger()) {
|
||||
final long endRevision = bunchLists.get(0).getNumber();
|
||||
|
||||
@@ -659,7 +659,7 @@ public class SvnHistoryProvider
|
||||
}
|
||||
}
|
||||
|
||||
private class MergeSourceColumnInfo extends ColumnInfo<VcsFileRevision, VcsFileRevision> {
|
||||
private class MergeSourceColumnInfo extends ColumnInfo<VcsFileRevision, String> {
|
||||
private final MergeSourceRenderer myRenderer;
|
||||
|
||||
private MergeSourceColumnInfo(final MyHistorySession session) {
|
||||
@@ -672,8 +672,8 @@ public class SvnHistoryProvider
|
||||
return myRenderer;
|
||||
}
|
||||
|
||||
public VcsFileRevision valueOf(final VcsFileRevision vcsFileRevision) {
|
||||
return vcsFileRevision;
|
||||
public String valueOf(final VcsFileRevision vcsFileRevision) {
|
||||
return vcsFileRevision == null ? "" : getText(vcsFileRevision);
|
||||
}
|
||||
|
||||
public String getText(final VcsFileRevision vcsFileRevision) {
|
||||
@@ -777,6 +777,10 @@ public class SvnHistoryProvider
|
||||
myListener = new MergeSourceDetailsLinkListener(MERGE_SOURCE_DETAILS_TAG, myFile);
|
||||
myListener.install(table);
|
||||
}
|
||||
if (value instanceof String) {
|
||||
append((String)value, SimpleTextAttributes.REGULAR_ATTRIBUTES);
|
||||
return;
|
||||
}
|
||||
if (!(value instanceof SvnFileRevision)) {
|
||||
append("", SimpleTextAttributes.REGULAR_ATTRIBUTES);
|
||||
return;
|
||||
|
||||
+30
-13
@@ -57,9 +57,9 @@ public class SvnRevisionsNavigationMediator implements CommittedChangesNavigatio
|
||||
|
||||
final SVNURL[] repositoryRoot = new SVNURL[1];
|
||||
final long[] youngRevision = new long[1];
|
||||
final SVNException[] exception = new SVNException[1];
|
||||
final VcsException[] exception = new VcsException[1];
|
||||
|
||||
final boolean succeeded = ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
|
||||
Runnable process = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
SVNRepository repository = null;
|
||||
@@ -69,7 +69,7 @@ public class SvnRevisionsNavigationMediator implements CommittedChangesNavigatio
|
||||
repositoryRoot[0] = repository.getRepositoryRoot(false);
|
||||
}
|
||||
catch (SVNException e) {
|
||||
exception[0] = e;
|
||||
exception[0] = new VcsException(e);
|
||||
}
|
||||
finally {
|
||||
if (repository != null) {
|
||||
@@ -77,14 +77,8 @@ public class SvnRevisionsNavigationMediator implements CommittedChangesNavigatio
|
||||
}
|
||||
}
|
||||
}
|
||||
}, "Getting latest repository revision", true, myProject);
|
||||
|
||||
if (exception[0] != null) {
|
||||
throw new VcsException(exception[0]);
|
||||
}
|
||||
if (! succeeded) {
|
||||
throw new ProcessCanceledException();
|
||||
}
|
||||
};
|
||||
underProgress(exception, process);
|
||||
|
||||
final Iterator<ChangesBunch> visualIterator = project.isDefault() ? null :
|
||||
CommittedChangesCache.getInstance(project).getBackBunchedIterator(vcs, vcsRoot, location, CHUNK_SIZE);
|
||||
@@ -97,8 +91,31 @@ public class SvnRevisionsNavigationMediator implements CommittedChangesNavigatio
|
||||
new LiveProvider(vcs, location, youngRevision[0], new SvnLogUtil(myProject, vcs, location, repositoryRoot[0])));
|
||||
|
||||
myCurrentIdx = -1;
|
||||
// init first screen
|
||||
goBack();
|
||||
|
||||
underProgress(exception, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// init first screen
|
||||
try {
|
||||
goBack();
|
||||
}
|
||||
catch (VcsException e) {
|
||||
exception[0] = e;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void underProgress(final VcsException[] exception, final Runnable process) throws VcsException {
|
||||
final boolean succeeded = ProgressManager.getInstance().runProcessWithProgressSynchronously(
|
||||
process, "Getting latest repository revision", true, myProject);
|
||||
|
||||
if (exception[0] != null) {
|
||||
throw exception[0];
|
||||
}
|
||||
if (! succeeded) {
|
||||
throw new ProcessCanceledException();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canGoBack() {
|
||||
|
||||
@@ -35,6 +35,7 @@ import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.containers.CollectionFactory;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.xml.Html5SchemaProvider;
|
||||
import com.intellij.xml.XmlSchemaProvider;
|
||||
import com.intellij.xml.util.XmlUtil;
|
||||
import org.jdom.Element;
|
||||
@@ -75,7 +76,7 @@ public class ExternalResourceManagerImpl extends ExternalResourceManagerEx imple
|
||||
}
|
||||
};
|
||||
|
||||
private String myDefaultHtmlDoctype = XmlUtil.XHTML_URI;
|
||||
private String myDefaultHtmlDoctype = Html5SchemaProvider.HTML5_SCHEMA_LOCATION;
|
||||
|
||||
protected Map<String, Map<String, Resource>> computeStdResources() {
|
||||
ResourceRegistrarImpl registrar = new ResourceRegistrarImpl();
|
||||
|
||||
@@ -27,7 +27,6 @@ import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.psi.xml.XmlToken;
|
||||
import com.intellij.xml.XmlNSDescriptor;
|
||||
import com.intellij.xml.util.HtmlUtil;
|
||||
import com.intellij.xml.util.XmlTagUtil;
|
||||
|
||||
/**
|
||||
@@ -42,7 +41,7 @@ public class XMLExternalAnnotator extends ExternalAnnotator {
|
||||
XmlTag rootTag = document.getRootTag();
|
||||
XmlNSDescriptor nsDescriptor = rootTag == null ? null : rootTag.getNSDescriptor(rootTag.getNamespace(), false);
|
||||
|
||||
if (nsDescriptor instanceof Validator && !HtmlUtil.isHtml5Document(document)) {
|
||||
if (nsDescriptor instanceof Validator) {
|
||||
//noinspection unchecked
|
||||
((Validator<XmlDocument>)nsDescriptor).validate(document, new MyHost(holder));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 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.
|
||||
@@ -88,7 +88,9 @@ public class HtmlConditionalCommentInjector implements MultiHostInjector {
|
||||
ASTNode conditionalStart = pair.first;
|
||||
ASTNode conditionalEnd = pair.second;
|
||||
TextRange range = new TextRange(conditionalStart.getTextRange().getEndOffset() - startOffset, conditionalEnd.getStartOffset() - startOffset);
|
||||
registrar.startInjecting(language).addPlace(null, null, (PsiLanguageInjectionHost)host, range).doneInjecting();
|
||||
if (range.getStartOffset() < range.getEndOffset()) {
|
||||
registrar.startInjecting(language).addPlace(null, null, (PsiLanguageInjectionHost)host, range).doneInjecting();
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -39,7 +39,7 @@ public class XmlElementsGroupImpl implements XmlElementsGroup {
|
||||
return ContainerUtil.map(myParticle.getSubParticles(), new Function<XmlContentParticle, XmlElementsGroup>() {
|
||||
@Override
|
||||
public XmlElementsGroup fun(XmlContentParticle xmlContentParticle) {
|
||||
return new XmlElementsGroupImpl(xmlContentParticle, XmlElementsGroupImpl.this);
|
||||
return new XmlElementsGroupImpl(xmlContentParticle, XmlElementsGroupImpl.this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.xml.XmlAttributeDescriptor;
|
||||
import com.intellij.xml.XmlElementDescriptor;
|
||||
import com.intellij.xml.XmlNSDescriptor;
|
||||
import com.intellij.xml.XmlNSDescriptorEx;
|
||||
import com.intellij.xml.impl.ExternalDocumentValidator;
|
||||
import com.intellij.xml.util.XmlUtil;
|
||||
import gnu.trove.THashSet;
|
||||
@@ -50,7 +51,7 @@ import java.util.*;
|
||||
* @author Mike
|
||||
*/
|
||||
@SuppressWarnings({"HardCodedStringLiteral"})
|
||||
public class XmlNSDescriptorImpl implements XmlNSDescriptor,Validator<XmlDocument>, DumbAware, XmlNSTypeDescriptorProvider {
|
||||
public class XmlNSDescriptorImpl implements XmlNSDescriptorEx,Validator<XmlDocument>, DumbAware, XmlNSTypeDescriptorProvider {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.xml.impl.schema.XmlNSDescriptorImpl");
|
||||
@NonNls private static final Set<String> STD_TYPES = new HashSet<String>();
|
||||
private static final Set<String> UNDECLARED_STD_TYPES = new HashSet<String>();
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.intellij.xml;
|
||||
|
||||
/**
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
public interface XmlNSDescriptorEx extends XmlNSDescriptor {
|
||||
XmlElementDescriptor getElementDescriptor(String localName, String namespace);
|
||||
}
|
||||
+32
-7
@@ -35,7 +35,8 @@ import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.xml.XmlElementDescriptor;
|
||||
import com.intellij.xml.XmlNSDescriptor;
|
||||
import com.intellij.xml.XmlNSDescriptorEx;
|
||||
import com.intellij.xml.impl.schema.AnyXmlElementDescriptor;
|
||||
import org.intellij.plugins.relaxNG.ApplicationLoader;
|
||||
import org.intellij.plugins.relaxNG.model.resolve.RelaxIncludeIndex;
|
||||
import org.intellij.plugins.relaxNG.validation.RngParser;
|
||||
@@ -48,17 +49,17 @@ import org.kohsuke.rngom.digested.DPattern;
|
||||
import org.kohsuke.rngom.nc.NameClass;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: sweinreuter
|
||||
* Date: 18.07.2007
|
||||
*/
|
||||
public class RngNsDescriptor implements XmlNSDescriptor, Validator {
|
||||
public class RngNsDescriptor implements XmlNSDescriptorEx, Validator {
|
||||
private final Map<QName, CachedValue<XmlElementDescriptor>> myDescriptorsMap =
|
||||
Collections.synchronizedMap(new HashMap<QName, CachedValue<XmlElementDescriptor>>());
|
||||
|
||||
private static final Key<ParameterizedCachedValue<XmlElementDescriptor, RngNsDescriptor>> ROOT_KEY = Key.create("ROOT_DESCRIPTOR");
|
||||
|
||||
private XmlFile myFile;
|
||||
@@ -95,7 +96,7 @@ public class RngNsDescriptor implements XmlNSDescriptor, Validator {
|
||||
}
|
||||
}
|
||||
|
||||
if (desc == null) {
|
||||
if (desc == null || desc instanceof AnyXmlElementDescriptor) {
|
||||
return findRootDescriptor(tag);
|
||||
}
|
||||
|
||||
@@ -124,6 +125,11 @@ public class RngNsDescriptor implements XmlNSDescriptor, Validator {
|
||||
return descriptor != null ? descriptor : findDescriptor(tag, ChildElementFinder.find(myPattern));
|
||||
}
|
||||
|
||||
private XmlElementDescriptor findRootDescriptorInner(QName qName) {
|
||||
return findDescriptor(qName, ContainerUtil.findAll(
|
||||
ChildElementFinder.find(-1, myPattern), NamedPatternFilter.INSTANCE));
|
||||
}
|
||||
|
||||
public XmlElementDescriptor findDescriptor(XmlTag tag, List<DElementPattern> list) {
|
||||
final QName qName = new QName(tag.getNamespace(), tag.getLocalName());
|
||||
|
||||
@@ -279,4 +285,23 @@ public class RngNsDescriptor implements XmlNSDescriptor, Validator {
|
||||
XmlInstanceValidator.doValidation(doc, host, getDescriptorFile());
|
||||
}
|
||||
}
|
||||
|
||||
//@Override
|
||||
public XmlElementDescriptor getElementDescriptor(String localName, String namespace) {
|
||||
final QName qName = new QName(namespace, localName);
|
||||
CachedValue<XmlElementDescriptor> cachedValue = myDescriptorsMap.get(qName);
|
||||
if (cachedValue == null) {
|
||||
cachedValue =
|
||||
CachedValuesManager.getManager(myElement.getProject()).createCachedValue(new CachedValueProvider<XmlElementDescriptor>() {
|
||||
public Result<XmlElementDescriptor> compute() {
|
||||
final XmlElementDescriptor descriptor = findRootDescriptorInner(qName);
|
||||
return descriptor != null
|
||||
? new Result<XmlElementDescriptor>(descriptor, descriptor.getDependences())
|
||||
: new Result<XmlElementDescriptor>(null, getDependences());
|
||||
}
|
||||
}, false);
|
||||
myDescriptorsMap.put(qName, cachedValue);
|
||||
}
|
||||
return cachedValue.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user