diff --git a/build/cucumber-test-runner/src/com/intellij/cucumber/CucumberMain.java b/build/cucumber-test-runner/src/com/intellij/cucumber/CucumberMain.java index 7500dc2213d2..40d91c7dfe0c 100644 --- a/build/cucumber-test-runner/src/com/intellij/cucumber/CucumberMain.java +++ b/build/cucumber-test-runner/src/com/intellij/cucumber/CucumberMain.java @@ -19,7 +19,6 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Ref; import com.intellij.testFramework.UsefulTestCase; import com.intellij.util.ui.UIUtil; -import cucumber.runtime.Env; import cucumber.runtime.Runtime; import cucumber.runtime.RuntimeOptions; import cucumber.runtime.io.MultiLoader; @@ -39,8 +38,14 @@ public class CucumberMain { } public static void main(String[] args) throws IOException { - int exitstatus = run(args, Thread.currentThread().getContextClassLoader()); - System.exit(exitstatus); + int exitStatus; + try { + exitStatus = run(args, Thread.currentThread().getContextClassLoader()); + } + catch (Throwable e) { + exitStatus = 1; + } + System.exit(exitStatus); } @@ -60,17 +65,18 @@ public class CucumberMain { Runtime runtime = new Runtime(resourceLoader, classFinder, classLoader, runtimeOptions); runtimeRef.set(runtime); runtime.run(); - } catch (Throwable throwable) { - errorRef.set(throwable); - Logger.getInstance(CucumberMain.class).error(throwable); - } } - }); - } - catch (Throwable t) { - errorRef.set(t); - Logger.getInstance(CucumberMain.class).error(t); - } + catch (Throwable throwable) { + errorRef.set(throwable); + Logger.getInstance(CucumberMain.class).error(throwable); + } + } + }); + } + catch (Throwable t) { + errorRef.set(t); + Logger.getInstance(CucumberMain.class).error(t); + } final Throwable throwable = errorRef.get(); if (throwable != null) { diff --git a/build/scripts/libLicenses.gant b/build/scripts/libLicenses.gant index 721e00dab165..f25ca2bdda3f 100644 --- a/build/scripts/libLicenses.gant +++ b/build/scripts/libLicenses.gant @@ -290,7 +290,7 @@ libraryLicense(name: "EditorConfig Java Core", libraryName: "editorconfig-core-j libraryLicense(name: "Fest", libraryName: "fest", version: "", license: "Apache 2.0", licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0.txt", url: "https://code.google.com/p/fest/") libraryLicense(name: "Gherkin", libraryName: "Gherkin", version: "2.12.2", license: "MIT", licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0.txt", url: "https://github.com/cucumber/gherkin") libraryLicense(name: "imgscalr", libraryName: "imgscalr", version: "4.2", license: "Apache 2.0", licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0.txt", url: "https://github.com/thebuzzmedia/imgscalr") -libraryLicense(name: "Spantable", libraryName: "spantable.jar", version: "unknown", license: "LGPL 2.1", licenseUrl: "http://www.gnu.org/licenses/lgpl.html", url: "http://code.google.com/p/spantable/") +libraryLicense(name: "Spantable", libraryName: "spantable.jar", version: "patched", license: "LGPL 2.1", licenseUrl: "http://www.gnu.org/licenses/lgpl.html", url: "https://android.googlesource.com/platform/prebuilts/tools/+/master/common/spantable/") libraryLicense(name: "JGit", libraryName: "jgit", version: "4.0", license: "Eclipse Distribution License 1.0", licenseUrl: "http://www.eclipse.org/org/documents/edl-v10.php", url: "https://eclipse.org/jgit/") libraryLicense(name: "JGit", libraryName: "jackson", version: "2.5.1", license: "Apache 2.0", licenseUrl: "http://www.eclipse.org/org/documents/edl-v10.php", url: "https://github.com/FasterXML/jackson") jetbrainsLibrary("Coverage") diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java index 71e81fbba7d9..d7cf1f2516cb 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java @@ -273,8 +273,15 @@ public class DebuggerSession implements AbstractDebuggerSession { } public void stepOut(int stepSize) { - final SuspendContextImpl suspendContext = getSuspendContext(); - final DebugProcessImpl.ResumeCommand cmd = myDebugProcess.createStepOutCommand(suspendContext, stepSize); + SuspendContextImpl suspendContext = getSuspendContext(); + DebugProcessImpl.ResumeCommand cmd = null; + for (JvmSteppingCommandProvider handler : JvmSteppingCommandProvider.EP_NAME.getExtensions()) { + cmd = handler.getStepOutCommand(suspendContext, stepSize); + if (cmd != null) break; + } + if (cmd == null) { + cmd = myDebugProcess.createStepOutCommand(suspendContext, stepSize); + } setSteppingThrough(cmd.getContextThread()); resumeAction(cmd, Event.STEP); } @@ -284,8 +291,15 @@ public class DebuggerSession implements AbstractDebuggerSession { } public void stepOver(boolean ignoreBreakpoints, int stepSize) { - final SuspendContextImpl suspendContext = getSuspendContext(); - final DebugProcessImpl.ResumeCommand cmd = myDebugProcess.createStepOverCommand(suspendContext, ignoreBreakpoints, stepSize); + SuspendContextImpl suspendContext = getSuspendContext(); + DebugProcessImpl.ResumeCommand cmd = null; + for (JvmSteppingCommandProvider handler : JvmSteppingCommandProvider.EP_NAME.getExtensions()) { + cmd = handler.getStepOverCommand(suspendContext, ignoreBreakpoints, stepSize); + if (cmd != null) break; + } + if (cmd == null) { + cmd = myDebugProcess.createStepOverCommand(suspendContext, ignoreBreakpoints, stepSize); + } setSteppingThrough(cmd.getContextThread()); resumeAction(cmd, Event.STEP); } @@ -296,7 +310,14 @@ public class DebuggerSession implements AbstractDebuggerSession { public void stepInto(final boolean ignoreFilters, final @Nullable MethodFilter smartStepFilter, int stepSize) { final SuspendContextImpl suspendContext = getSuspendContext(); - final DebugProcessImpl.ResumeCommand cmd = myDebugProcess.createStepIntoCommand(suspendContext, ignoreFilters, smartStepFilter, stepSize); + DebugProcessImpl.ResumeCommand cmd = null; + for (JvmSteppingCommandProvider handler : JvmSteppingCommandProvider.EP_NAME.getExtensions()) { + cmd = handler.getStepIntoCommand(suspendContext, ignoreFilters, smartStepFilter, stepSize); + if (cmd != null) break; + } + if (cmd == null) { + cmd = myDebugProcess.createStepIntoCommand(suspendContext, ignoreFilters, smartStepFilter, stepSize); + } setSteppingThrough(cmd.getContextThread()); resumeAction(cmd, Event.STEP); } diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/JvmSteppingCommandProvider.java b/java/debugger/impl/src/com/intellij/debugger/impl/JvmSteppingCommandProvider.java new file mode 100644 index 000000000000..3331a4c98b8e --- /dev/null +++ b/java/debugger/impl/src/com/intellij/debugger/impl/JvmSteppingCommandProvider.java @@ -0,0 +1,54 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.debugger.impl; + +import com.intellij.debugger.engine.DebugProcessImpl; +import com.intellij.debugger.engine.MethodFilter; +import com.intellij.debugger.engine.SuspendContextImpl; +import com.intellij.openapi.extensions.ExtensionPointName; +import org.jetbrains.annotations.Nullable; + +/** + * @author egor + */ +public abstract class JvmSteppingCommandProvider { + public static ExtensionPointName EP_NAME = + ExtensionPointName.create("com.intellij.debugger.jvmSteppingCommandProvider"); + + /** + * @return null if can not handle + */ + public DebugProcessImpl.ResumeCommand getStepIntoCommand(SuspendContextImpl suspendContext, + boolean ignoreFilters, + final MethodFilter smartStepFilter, + int stepSize) { + return null; + } + + /** + * @return null if can not handle + */ + public DebugProcessImpl.ResumeCommand getStepOutCommand(SuspendContextImpl suspendContext, int stepSize) { + return null; + } + + /** + * @return null if can not handle + */ + public DebugProcessImpl.ResumeCommand getStepOverCommand(SuspendContextImpl suspendContext, boolean ignoreBreakpoints, int stepSize) { + return null; + } +} diff --git a/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java b/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java index 3382d0bf1933..4bb082b1d29c 100644 --- a/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java +++ b/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java @@ -62,6 +62,7 @@ import org.jetbrains.jps.model.serialization.PathMacroUtil; import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; +import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Map; @@ -195,12 +196,16 @@ public abstract class JavaTestFrameworkRunnableState getNamedParams(String parameters) { + return Collections.singletonList("@name" + parameters); + } + private ServerSocket myForkSocket = null; @Nullable diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/LambdaHighlightingUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/LambdaHighlightingUtil.java index fbd6edb1907b..c2dd86e7d813 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/LambdaHighlightingUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/LambdaHighlightingUtil.java @@ -17,6 +17,7 @@ package com.intellij.codeInsight.daemon.impl.analysis; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.HighlightInfoType; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import com.intellij.psi.util.MethodSignature; import com.intellij.psi.util.PsiTypesUtil; @@ -25,12 +26,16 @@ import com.intellij.psi.util.TypeConversionUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * User: anna */ public class LambdaHighlightingUtil { + private static final Logger LOG = Logger.getInstance("#" + LambdaHighlightingUtil.class.getName()); + @Nullable public static String checkInterfaceFunctional(@NotNull PsiClass psiClass) { return checkInterfaceFunctional(psiClass, "Target type of a lambda conversion must be an interface"); @@ -90,14 +95,16 @@ public class LambdaHighlightingUtil { @Nullable public static String checkInterfaceFunctional(PsiType functionalInterfaceType) { if (functionalInterfaceType instanceof PsiIntersectionType) { - int count = 0; + final Set signatures = new HashSet(); for (PsiType type : ((PsiIntersectionType)functionalInterfaceType).getConjuncts()) { if (checkInterfaceFunctional(type) == null) { - count++; + final MethodSignature signature = LambdaUtil.getFunction(PsiUtil.resolveClassInType(type)); + LOG.assertTrue(signature != null, type.getCanonicalText()); + signatures.add(signature); } } - if (count > 1) { + if (signatures.size() > 1) { return "Multiple non-overriding abstract methods found in " + functionalInterfaceType.getPresentableText(); } return null; diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index 3e342e538a09..ad6ce9526b8a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -114,7 +114,7 @@ public class JavaCompletionContributor extends CompletionContributor { if (JavaKeywordCompletion.DECLARATION_START.getValue().accepts(position) || JavaKeywordCompletion.isInsideParameterList(position) || - psiElement().inside(psiElement(PsiJavaCodeReferenceElement.class).withParent(psiAnnotation())).accepts(position)) { + isInsideAnnotationName(position)) { return new OrFilter(ElementClassFilter.CLASS, ElementClassFilter.PACKAGE_FILTER); } @@ -166,6 +166,11 @@ public class JavaCompletionContributor extends CompletionContributor { return TrueFilter.INSTANCE; } + private static boolean isInsideAnnotationName(PsiElement position) { + PsiAnnotation anno = PsiTreeUtil.getParentOfType(position, PsiAnnotation.class, true, PsiMember.class); + return anno != null && PsiTreeUtil.isAncestor(anno.getNameReferenceElement(), position, true); + } + private static ElementFilter createAnnotationFilter(PsiElement position) { OrFilter orFilter = new OrFilter(ElementClassFilter.CLASS, ElementClassFilter.PACKAGE_FILTER, diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java b/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java index 9a078bbc9573..89624b0363fa 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java @@ -81,22 +81,18 @@ public class TypeInfo { private static final int HAS_ARRAY_COUNT = 0x40; private static final int HAS_ELLIPSIS = 0x80; - private static final TypeInfo NULL = new TypeInfo((StringRef)null, (byte)0, false, PsiAnnotationStub.EMPTY_ARRAY); + private static final TypeInfo NULL = new TypeInfo(null, (byte)0, false, PsiAnnotationStub.EMPTY_ARRAY); - public final StringRef text; + public final String text; public final byte arrayCount; public final boolean isEllipsis; private final PsiAnnotationStub[] myAnnotationStubs; public TypeInfo(String text, byte arrayCount, boolean ellipsis, @NotNull PsiAnnotationStub[] annotationStubs) { - this(StringRef.fromString(text == null ? null : internFrequentType(text)), arrayCount, ellipsis, annotationStubs); - } - - private TypeInfo(StringRef text, byte arrayCount, boolean isEllipsis, @NotNull PsiAnnotationStub[] annotationStubs) { - this.text = text; + this.text = text == null ? null : internFrequentType(text); this.arrayCount = arrayCount; - this.isEllipsis = isEllipsis; + this.isEllipsis = ellipsis; myAnnotationStubs = annotationStubs; } @@ -123,7 +119,7 @@ public class TypeInfo { @NotNull public String getShortTypeText() { if (text == null) return ""; - String name = PsiNameHelper.getShortClassName(text.getString()); + String name = PsiNameHelper.getShortClassName(text); if (arrayCount > 0) { name += StringUtil.repeat("[]", arrayCount); } @@ -227,7 +223,7 @@ public class TypeInfo { byte arrayCount = isSet(flags, HAS_ARRAY_COUNT) ? record.readByte() : 0; boolean hasEllipsis = isSet(flags, HAS_ELLIPSIS); - StringRef text = frequentIndex == 0 ? record.readName() : StringRef.fromString(ourIndexFrequentType[frequentIndex]); + String text = frequentIndex == 0 ? StringRef.toString(record.readName()) : ourIndexFrequentType[frequentIndex]; return new TypeInfo(text, arrayCount, hasEllipsis, PsiAnnotationStub.EMPTY_ARRAY); } @@ -238,7 +234,7 @@ public class TypeInfo { return; } - String text = typeInfo.text.getString(); + String text = typeInfo.text; byte arrayCount = typeInfo.arrayCount; int frequentIndex = ourFrequentTypeIndex.get(text); int flags = (typeInfo.isEllipsis ? HAS_ELLIPSIS : 0) | (arrayCount != 0 ? HAS_ARRAY_COUNT : 0) | frequentIndex; @@ -259,7 +255,7 @@ public class TypeInfo { return null; } if (typeInfo.arrayCount == 0 && typeInfo.myAnnotationStubs.length == 0) { - return typeInfo.text.getString(); + return typeInfo.text; } StringBuilder buf = new StringBuilder(); @@ -268,7 +264,7 @@ public class TypeInfo { buf.append(stub.getText()).append(' '); } - buf.append(typeInfo.text.getString()); + buf.append(typeInfo.text); int arrayCount = typeInfo.isEllipsis ? typeInfo.arrayCount - 1 : typeInfo.arrayCount; for (int i = 0; i < arrayCount; i++) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java index bfa4bd5c5754..3a3704d9fd01 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java @@ -27,7 +27,6 @@ import com.intellij.psi.stubs.PsiFileStub; import com.intellij.psi.stubs.StubElement; import com.intellij.util.ArrayUtil; import com.intellij.util.cls.ClsFormatException; -import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.org.objectweb.asm.*; @@ -344,7 +343,7 @@ public class StubBuildingVisitor extends ClassVisitor { byte flags = PsiFieldStubImpl.packFlags((access & Opcodes.ACC_ENUM) != 0, (access & Opcodes.ACC_DEPRECATED) != 0, false, false); TypeInfo type = fieldType(desc, signature); - String initializer = constToString(value, type.text.getString(), false); + String initializer = constToString(value, type.text, false); PsiFieldStub stub = new PsiFieldStubImpl(myResult, name, type, initializer, flags); PsiModifierListStub modList = new PsiModifierListStubImpl(stub, packFieldFlags(access)); return new AnnotationCollectingVisitor(modList); @@ -412,9 +411,8 @@ public class StubBuildingVisitor extends ClassVisitor { List args = new ArrayList(); List throwables = exceptions != null ? new ArrayList() : null; - StringRef stringRef = StringRef.fromString(canonicalMethodName); int modifiersMask = packMethodFlags(access, myResult.isInterface()); - PsiMethodStubImpl stub = new PsiMethodStubImpl(myResult, stringRef, flags, signature, args, throwables, desc, modifiersMask); + PsiMethodStubImpl stub = new PsiMethodStubImpl(myResult, canonicalMethodName, flags, signature, args, throwables, desc, modifiersMask); PsiModifierListStub modList = (PsiModifierListStub)stub.findChildStubByType(JavaStubElementTypes.MODIFIER_LIST); assert modList != null : stub; diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaMethodElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaMethodElementType.java index c54166e0cfe3..4de4dbeec1f5 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaMethodElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaMethodElementType.java @@ -119,7 +119,7 @@ public abstract class JavaMethodElementType extends JavaStubElementType implements PsiMethodStub { private final TypeInfo myReturnType; private final byte myFlags; - private final StringRef myName; - private StringRef myDefaultValueText; + private final String myName; + private String myDefaultValueText; private static final int CONSTRUCTOR = 0x01; private static final int VARARGS = 0x02; @@ -51,7 +50,7 @@ public class PsiMethodStubImpl extends StubBase implements PsiMethodS private static final int HAS_DOC_COMMENT = 0x40; public PsiMethodStubImpl(StubElement parent, - StringRef name, + String name, byte flags, String signature, @NotNull List args, @@ -81,7 +80,7 @@ public class PsiMethodStubImpl extends StubBase implements PsiMethodS myFlags = (byte)(flags | (parsedViaGenericSignature ? PARSED_VIA_GENERIC_SIGNATURE : 0)); } - public PsiMethodStubImpl(StubElement parent, StringRef name, @NotNull TypeInfo returnType, byte flags, StringRef defaultValueText) { + public PsiMethodStubImpl(StubElement parent, String name, @NotNull TypeInfo returnType, byte flags, @Nullable String defaultValueText) { super(parent, isAnnotationMethod(flags) ? JavaStubElementTypes.ANNOTATION_METHOD : JavaStubElementTypes.METHOD); myReturnType = returnType; myFlags = flags; @@ -114,7 +113,7 @@ public class PsiMethodStubImpl extends StubBase implements PsiMethodS @Override public String getDefaultValueText() { - return StringRef.toString(myDefaultValueText); + return myDefaultValueText; } @Override @@ -158,7 +157,7 @@ public class PsiMethodStubImpl extends StubBase implements PsiMethodS @Override public String getName() { - return StringRef.toString(myName); + return myName; } public byte getFlags() { @@ -166,7 +165,7 @@ public class PsiMethodStubImpl extends StubBase implements PsiMethodS } public void setDefaultValueText(final String defaultValueText) { - myDefaultValueText = StringRef.fromString(defaultValueText); + myDefaultValueText = defaultValueText; } public static byte packFlags(boolean isConstructor, diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/NaturalSorting.java b/java/java-tests/testData/codeInsight/completion/normalSorting/NaturalSorting.java new file mode 100644 index 000000000000..7956a169c62f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/NaturalSorting.java @@ -0,0 +1,12 @@ +public class MainClass1 { + + { + fu + } + + void fun1() {} + void fun10() {} + void fun2() {} + +} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/IntersectionTypeWithSameBaseInterfaceInConjuncts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/IntersectionTypeWithSameBaseInterfaceInConjuncts.java new file mode 100644 index 000000000000..fae246acd210 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/functionalInterface/IntersectionTypeWithSameBaseInterfaceInConjuncts.java @@ -0,0 +1,12 @@ +interface Z { + void m(); +} + +interface X extends Z {} +interface Y extends Z {} + +class Test { + { + ((X & Y) () -> {}).m(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/FragmentCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/FragmentCompletionTest.groovy index a9b22b5ada21..012559bffc25 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/FragmentCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/FragmentCompletionTest.groovy @@ -140,4 +140,13 @@ public class FragmentCompletionTest extends LightCodeInsightFixtureTestCase { assert !myFixture.lookupElementStrings.contains('class') } + public void "test annotation context"() { + def ctxFile = myFixture.addClass("class Class { void foo(int context) { @Anno int a; } }").containingFile + def context = ctxFile.findElementAt(ctxFile.text.indexOf('Anno')) + PsiFile file = JavaCodeFragmentFactory.getInstance(project).createExpressionCodeFragment("c", context, null, true); + myFixture.configureFromExistingVirtualFile(file.getVirtualFile()); + myFixture.completeBasic() + assert myFixture.lookupElementStrings.contains('context') + } + } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy index 4a018f51bef1..4c2485df1e40 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -704,4 +704,8 @@ interface TxANotAnno {} checkPreferredItems 0, 'MainClass1', 'MainClass2', 'Maa' } + public void testNaturalSorting() { + checkPreferredItems 0, 'fun1', 'fun2', 'fun10' + } + } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FunctionalInterfaceTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FunctionalInterfaceTest.java index b09f4d7e2a77..a8501fd81660 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FunctionalInterfaceTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FunctionalInterfaceTest.java @@ -18,7 +18,11 @@ package com.intellij.codeInsight.daemon.lambda; import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase; import com.intellij.codeInsight.daemon.impl.analysis.LambdaHighlightingUtil; import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiType; +import com.intellij.psi.PsiTypeCastExpression; +import com.intellij.psi.PsiTypeElement; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -86,4 +90,17 @@ public class FunctionalInterfaceTest extends LightDaemonAnalyzerTestCase { public void testAbstractClass() throws Exception { doTestFunctionalInterface("Target type of a lambda conversion must be an interface"); } + + public void testIntersectionTypeWithSameBaseInterfaceInConjuncts() throws Exception { + String filePath = BASE_PATH + "/" + getTestName(false) + ".java"; + configureByFile(filePath); + final PsiTypeCastExpression castExpression = + PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiTypeCastExpression.class); + assertNotNull(castExpression); + final PsiTypeElement castTypeElement = castExpression.getCastType(); + assertNotNull(castTypeElement); + final PsiType type = castTypeElement.getType(); + final String errorMessage = LambdaHighlightingUtil.checkInterfaceFunctional(type); + assertEquals(null, errorMessage); + } } diff --git a/platform/core-api/src/com/intellij/psi/stubs/StubInputStream.java b/platform/core-api/src/com/intellij/psi/stubs/StubInputStream.java index 0023263c821c..b351575d015e 100644 --- a/platform/core-api/src/com/intellij/psi/stubs/StubInputStream.java +++ b/platform/core-api/src/com/intellij/psi/stubs/StubInputStream.java @@ -18,6 +18,7 @@ package com.intellij.psi.stubs; import com.intellij.util.io.*; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.DataInputStream; import java.io.IOException; @@ -35,10 +36,12 @@ public class StubInputStream extends DataInputStream { myNameStorage = nameStorage; } + @NotNull public String readUTFFast() throws IOException { return IOUtil.readUTFFast(myStringIOBuffer, this); } + @Nullable public StringRef readName() throws IOException { return DataInputOutputUtil.readNAME(this, myNameStorage); } diff --git a/platform/diff-impl/src/com/intellij/diff/DiffManagerImpl.java b/platform/diff-impl/src/com/intellij/diff/DiffManagerImpl.java index 26d799f7c45b..0ce5b5439870 100644 --- a/platform/diff-impl/src/com/intellij/diff/DiffManagerImpl.java +++ b/platform/diff-impl/src/com/intellij/diff/DiffManagerImpl.java @@ -89,11 +89,11 @@ public class DiffManagerImpl extends DiffManagerEx { @Override public List getDiffTools() { List result = new ArrayList(); + Collections.addAll(result, DiffTool.EP_NAME.getExtensions()); result.add(SimpleDiffTool.INSTANCE); result.add(UnifiedDiffTool.INSTANCE); result.add(BinaryDiffTool.INSTANCE); result.add(DirDiffTool.INSTANCE); - Collections.addAll(result, DiffTool.EP_NAME.getExtensions()); return result; } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffTool.java b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffTool.java index ca1b431fa14f..86b81313c4a6 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffTool.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffTool.java @@ -40,6 +40,6 @@ public class UnifiedDiffTool implements FrameDiffTool { @NotNull @Override public String getName() { - return "Oneside viewer"; + return "Unified viewer"; } } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffViewer.java index 950fb11fb26a..dae717310766 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffViewer.java @@ -601,7 +601,7 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase { StringBuilder info = new StringBuilder(); Document document1 = getDocument(Side.LEFT); Document document2 = getDocument(Side.RIGHT); - info.append("==== OnesideDiffViewer Debug Info ===="); + info.append("==== UnifiedDiffViewer Debug Info ===="); info.append("myMasterSide - ").append(myMasterSide).append('\n'); info.append("myLeftDocument.length() - ").append(document1.getTextLength()).append('\n'); info.append("myRightDocument.length() - ").append(document2.getTextLength()).append('\n'); @@ -619,7 +619,7 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase { .append(":").append(pair1.second).append('\n'); info.append("non-strict transferEndLine - ").append(pair2.first[0]).append("-").append(pair2.first[1]) .append(":").append(pair2.second).append('\n'); - info.append("---- OnesideDiffViewer Debug Info ----"); + info.append("---- UnifiedDiffViewer Debug Info ----"); LOG.warn(info.toString()); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java index d3bcb6a7380f..abdd0793ac31 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java @@ -60,7 +60,7 @@ public class CompletionLookupArranger extends LookupArranger { public int compare(LookupElement o1, LookupElement o2) { String invariant = PRESENTATION_INVARIANT.get(o1); assert invariant != null; - return invariant.compareToIgnoreCase(PRESENTATION_INVARIANT.get(o2)); + return StringUtil.naturalCompare(invariant, PRESENTATION_INVARIANT.get(o2)); } }; static final int MAX_PREFERRED_COUNT = 5; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/AutoIndentLinesHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/AutoIndentLinesHandler.java index e53e29f011c6..6d3e505ded6c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/AutoIndentLinesHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/AutoIndentLinesHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleManager; +import com.intellij.util.DocumentUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; @@ -92,7 +93,7 @@ public class AutoIndentLinesHandler implements CodeInsightActionHandler { codeStyleManager.adjustLineIndent(file, lineStart); } } else { - codeStyleManager.adjustLineIndent(file, new TextRange(startOffset, endOffset)); + codeStyleManager.adjustLineIndent(file, new TextRange(DocumentUtil.getLineStartOffset(startOffset, document), endOffset)); } } diff --git a/platform/util/src/com/intellij/util/io/DataInputOutputUtil.java b/platform/util/src/com/intellij/util/io/DataInputOutputUtil.java index e4a1f5c10a45..5311608a7dc9 100644 --- a/platform/util/src/com/intellij/util/io/DataInputOutputUtil.java +++ b/platform/util/src/com/intellij/util/io/DataInputOutputUtil.java @@ -30,6 +30,7 @@ public class DataInputOutputUtil { private DataInputOutputUtil() {} + @Nullable public static StringRef readNAME(@NotNull DataInput record, @NotNull AbstractStringEnumerator nameStore) throws IOException { return StringRef.fromStream(record, nameStore); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/ApplyPatchAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/ApplyPatchAction.java index 08c553cf8669..b73411c51789 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/ApplyPatchAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/ApplyPatchAction.java @@ -47,7 +47,6 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.WindowWrapper; import com.intellij.openapi.util.BooleanGetter; import com.intellij.openapi.util.Computable; @@ -306,7 +305,8 @@ public class ApplyPatchAction extends DumbAwareAction { } @NotNull - public static DiffRequest createBadDiffRequest(@NotNull final VirtualFile file, + public static DiffRequest createBadDiffRequest(@Nullable Project project, + @NotNull final VirtualFile file, @NotNull final ApplyPatchForBaseRevisionTexts texts) throws DiffRequestProducerException { if (texts.getLocal() == null) { throw new DiffRequestProducerException("Can't show diff for '" + file.getPresentableUrl() + "'"); @@ -317,10 +317,11 @@ public class ApplyPatchAction extends DumbAwareAction { final List titles = ContainerUtil.list(VcsBundle.message("diff.title.local"), "Patched (with problems)"); final DiffContentFactory contentFactory = DiffContentFactory.getInstance(); - final DocumentContent originalContent = contentFactory.create(texts.getLocal().toString(), file.getFileType()); + DocumentContent localContent = contentFactory.createDocument(project, file); + if (localContent == null) localContent = contentFactory.create(texts.getLocal().toString(), file.getFileType()); final DiffContent mergedContent = contentFactory.create(texts.getPatched(), file.getFileType()); - final List contents = ContainerUtil.list(originalContent, mergedContent); + final List contents = ContainerUtil.list(localContent, mergedContent); final DiffRequest request = new SimpleDiffRequest(windowTitle, contents, titles); DiffUtil.addNotification(new DiffIsApproximateNotification(), request); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/PatchDiffRequestFactory.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/PatchDiffRequestFactory.java index 4eb32f5a2146..485bbfd7513a 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/PatchDiffRequestFactory.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/PatchDiffRequestFactory.java @@ -20,10 +20,8 @@ import com.intellij.diff.chains.DiffRequestProducerException; import com.intellij.diff.contents.DocumentContent; import com.intellij.diff.requests.DiffRequest; import com.intellij.diff.requests.SimpleDiffRequest; -import com.intellij.diff.requests.UnknownFileTypeDiffRequest; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.UnknownFileType; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Getter; @@ -71,16 +69,17 @@ public class PatchDiffRequestFactory { ApplyPatchForBaseRevisionTexts texts = textsRef.get(); if (texts.getBase() == null) { - return ApplyPatchAction.createBadDiffRequest(file, texts); + return ApplyPatchAction.createBadDiffRequest(project, file, texts); } else { - DiffContentFactory contentFactory = DiffContentFactory.getInstance(); String path = FileUtil.toSystemDependentName(file.getPresentableUrl()); FileType type = file.getFileType(); String windowTitle = VcsBundle.message("patch.apply.conflict.title", path); - DocumentContent localContent = contentFactory.create(texts.getLocal().toString(), type); + DiffContentFactory contentFactory = DiffContentFactory.getInstance(); + DocumentContent localContent = contentFactory.createDocument(project, file); + if (localContent == null) localContent = contentFactory.create(texts.getLocal().toString(), type); DocumentContent baseContent = contentFactory.create(texts.getBase().toString(), type); DocumentContent patchedContent = contentFactory.create(texts.getPatched(), type); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/TextFilePatchInProgress.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/TextFilePatchInProgress.java index 71c1d1c5b165..2328b9cc1888 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/TextFilePatchInProgress.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/TextFilePatchInProgress.java @@ -104,6 +104,7 @@ public class TextFilePatchInProgress extends AbstractFilePatchInProgress+1); } + + public void n(Byte i) {} + public void n(int i) {} + void n() { + Byte b = 1; + m(+b); + } } \ No newline at end of file diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/parser/GroovyElementTypes.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/parser/GroovyElementTypes.java index dfcb3118d8ad..7c590bc80681 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/parser/GroovyElementTypes.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/parser/GroovyElementTypes.java @@ -22,6 +22,7 @@ import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.GroovyLanguage; import org.jetbrains.plugins.groovy.lang.lexer.GroovyElementType; +import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrThrowsClause; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; @@ -34,6 +35,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrEn import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameter; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameterList; +import org.jetbrains.plugins.groovy.lang.psi.impl.auxiliary.GrThrowsClauseImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.GrVariableDeclarationImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.blocks.GrBlockImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.blocks.GrClosableBlockImpl; @@ -311,8 +313,12 @@ public interface GroovyElementTypes { GroovyElementType EXPLICIT_CONSTRUCTOR = new GroovyElementType("explicit constructor invokation"); - //throws - GroovyElementType THROW_CLAUSE = new GroovyElementType("throw clause", true); + GrReferenceListElementType THROW_CLAUSE = new GrReferenceListElementType("throw clause") { + @Override + public GrThrowsClause createPsi(@NotNull GrReferenceListStub stub) { + return new GrThrowsClauseImpl(stub); + } + }; //annotation GroovyElementType ANNOTATION_ARRAY_INITIALIZER = new GroovyElementType("annotation array initializer"); GroovyElementType ANNOTATION_ARGUMENTS = new GroovyElementType("annotation arguments", true); @@ -337,7 +343,7 @@ public interface GroovyElementTypes { @Override public GrParameterStub createStub(@NotNull GrParameter psi, StubElement parentStub) { return new GrParameterStub(parentStub, StringRef.fromString(psi.getName()), GrStubUtils.getAnnotationNames(psi), GrStubUtils.getTypeText( - psi.getTypeElementGroovy())); + psi.getTypeElementGroovy()), GrParameterStub.encodeFlags(psi.getInitializerGroovy() != null, psi.isVarArgs())); } @Override @@ -345,6 +351,7 @@ public interface GroovyElementTypes { dataStream.writeName(stub.getName()); GrStubUtils.writeStringArray(dataStream, stub.getAnnotations()); GrStubUtils.writeNullableString(dataStream, stub.getTypeText()); + dataStream.writeVarInt(stub.getFlags()); } @NotNull @@ -353,7 +360,8 @@ public interface GroovyElementTypes { final StringRef name = dataStream.readName(); final String[] annotations = GrStubUtils.readStringArray(dataStream); final String typeText = GrStubUtils.readNullableString(dataStream); - return new GrParameterStub(parentStub, name, annotations, typeText); + final int flags = dataStream.readVarInt(); + return new GrParameterStub(parentStub, name, annotations, typeText, flags); } }; diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/auxiliary/GrThrowsClause.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/auxiliary/GrThrowsClause.java index 5a3848431006..3331479e5c05 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/auxiliary/GrThrowsClause.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/auxiliary/GrThrowsClause.java @@ -16,12 +16,11 @@ package org.jetbrains.plugins.groovy.lang.psi.api.auxiliary; -import com.intellij.psi.PsiReferenceList; -import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrReferenceList; /** * @author: Dmitry.Krasilschikov * @date: 03.04.2007 */ -public interface GrThrowsClause extends GroovyPsiElement, PsiReferenceList { +public interface GrThrowsClause extends GrReferenceList { } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/GrThrowsClauseImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/GrThrowsClauseImpl.java index d635971044df..e78935d6eaac 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/GrThrowsClauseImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/GrThrowsClauseImpl.java @@ -23,26 +23,36 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiJavaCodeReferenceElement; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.light.LightClassReference; +import com.intellij.psi.tree.IElementType; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; +import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrThrowsClause; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; -import org.jetbrains.plugins.groovy.lang.psi.impl.GrClassReferenceType; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiElementImpl; +import org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.GrReferenceListImpl; +import org.jetbrains.plugins.groovy.lang.psi.stubs.GrReferenceListStub; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; -import java.util.ArrayList; import java.util.List; /** * @author: Dmitry.Krasilschikov * @date: 03.04.2007 */ -public class GrThrowsClauseImpl extends GroovyPsiElementImpl implements GrThrowsClause { +public class GrThrowsClauseImpl extends GrReferenceListImpl implements GrThrowsClause { + public GrThrowsClauseImpl(GrReferenceListStub stub) { + super(stub, GroovyElementTypes.THROW_CLAUSE); + } + + @Override + protected IElementType getKeywordType() { + return GroovyTokenTypes.kTHROWS; + } + public GrThrowsClauseImpl(@NotNull ASTNode node) { super(node); } @@ -75,23 +85,6 @@ public class GrThrowsClauseImpl extends GroovyPsiElementImpl implements GrThrows return result.toArray(new PsiJavaCodeReferenceElement[result.size()]); } - @Override - @NotNull - public PsiClassType[] getReferencedTypes() { - List refs = new ArrayList(); - for (PsiElement cur = getFirstChild(); cur != null; cur = cur.getNextSibling()) { - if (cur instanceof GrCodeReferenceElement) refs.add((GrCodeReferenceElement)cur); - } - if (refs.isEmpty()) return PsiClassType.EMPTY_ARRAY; - - PsiClassType[] result = new PsiClassType[refs.size()]; - for (int i = 0; i < result.length; i++) { - result[i] = new GrClassReferenceType(refs.get(i)); - } - - return result; - } - @Override public Role getRole() { return Role.THROWS_LIST; diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/params/GrParameterImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/params/GrParameterImpl.java index eccc75b023be..6e387525e446 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/params/GrParameterImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/params/GrParameterImpl.java @@ -184,6 +184,11 @@ public class GrParameterImpl extends GrVariableBaseImpl impleme @Override public boolean isOptional() { + final GrParameterStub stub = getStub(); + if (stub != null) { + return GrParameterStub.hasInitializer(stub.getFlags()); + } + return getInitializerGroovy() != null; } @@ -242,6 +247,11 @@ public class GrParameterImpl extends GrVariableBaseImpl impleme @Override public boolean isVarArgs() { + GrParameterStub stub = getStub(); + if (stub != null) { + return GrParameterStub.isVarRags(stub.getFlags()); + } + PsiElement dots = getEllipsisDots(); return dots != null; } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java index e824bee24916..c9c2685ba450 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java @@ -331,7 +331,7 @@ public abstract class GrMethodBaseImpl extends GrStubElementBase i @Override @NotNull public PsiReferenceList getThrowsList() { - return (PsiReferenceList)findNotNullChildByType(GroovyElementTypes.THROW_CLAUSE); + return ObjectUtils.assertNotNull(getStubOrPsiChild(GroovyElementTypes.THROW_CLAUSE)); } @Override diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GrReflectedMethodImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GrReflectedMethodImpl.java index d77501acadc8..c67c34c30cab 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GrReflectedMethodImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GrReflectedMethodImpl.java @@ -95,15 +95,13 @@ public class GrReflectedMethodImpl extends LightMethodBuilder implements GrRefle } } - for (PsiElement modifier : baseMethod.getModifierList().getModifiers()) { - if (modifier instanceof GrAnnotation) { - final String qualifiedName = ((GrAnnotation)modifier).getQualifiedName(); - if (qualifiedName != null) { - myModifierList.addAnnotation(qualifiedName); - } - else { - myModifierList.addAnnotation(((GrAnnotation)modifier).getShortName()); - } + for (PsiAnnotation annotation : baseMethod.getModifierList().getRawAnnotations()) { + final String qualifiedName = annotation.getQualifiedName(); + if (qualifiedName != null) { + myModifierList.addAnnotation(qualifiedName); + } + else { + myModifierList.addAnnotation(((GrAnnotation)annotation).getShortName()); } } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrParameterStub.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrParameterStub.java index 55b278eb5539..d12eb41f752c 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrParameterStub.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrParameterStub.java @@ -18,6 +18,7 @@ package org.jetbrains.plugins.groovy.lang.psi.stubs; import com.intellij.psi.stubs.NamedStub; import com.intellij.psi.stubs.StubBase; import com.intellij.psi.stubs.StubElement; +import com.intellij.util.BitUtil; import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; @@ -30,15 +31,18 @@ public class GrParameterStub extends StubBase implements NamedStub< private final StringRef myName; private final String[] myAnnotations; private final String myTypeText; + private final int myFlags; public GrParameterStub(StubElement parent, StringRef name, final String[] annotations, - String typeText) { + String typeText, + int flags) { super(parent, GroovyElementTypes.PARAMETER); myName = name; myAnnotations = annotations; myTypeText = typeText; + myFlags = flags; } @Override @@ -55,4 +59,19 @@ public class GrParameterStub extends StubBase implements NamedStub< return myTypeText; } + public int getFlags() { + return myFlags; + } + + public static int encodeFlags(boolean hasInitializer, boolean isVarArgs) { + return (hasInitializer ? 2 : 0) + (isVarArgs ? 1 : 0); + } + + public static boolean hasInitializer(int flags) { + return BitUtil.isSet(flags, 2); + } + + public static boolean isVarRags(int flags) { + return BitUtil.isSet(flags, 1); + } } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java index b378c3aaa0dd..cda1ea71f088 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java @@ -58,7 +58,7 @@ public class GrStubFileElementType extends IStubFileElementType { @Override public int getStubVersion() { - return super.getStubVersion() + 23; + return super.getStubVersion() + 24; } @Override diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy index 2fba622d386b..f3fac88f2e7e 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy @@ -14,11 +14,9 @@ * limitations under the License. */ package org.jetbrains.plugins.groovy.lang.psi - import com.intellij.psi.* import org.jetbrains.plugins.groovy.LightGroovyTestCase import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyFileImpl - /** * Created by Max Medvedev on 12/4/13 */ @@ -220,4 +218,18 @@ class X { assert file.contentsLoaded } + public void "test do not load content for findMethodsByName"() { + GroovyFileImpl file = myFixture.addFileToProject('usage.groovy', '''\ +class X { + void foo(int a, int b = 2) {} +} +''') as GroovyFileImpl + assert !file.contentsLoaded + PsiClass clazz = file.classes[0] + assert !file.contentsLoaded + + assert clazz.findMethodsByName('foo', false).size() == 2 + assert !file.contentsLoaded + } + } diff --git a/plugins/groovy/testdata/groovy/stubs/config_object.test b/plugins/groovy/testdata/groovy/stubs/config_object.test index 687228bec99c..737e8ffecf8a 100644 --- a/plugins/groovy/testdata/groovy/stubs/config_object.test +++ b/plugins/groovy/testdata/groovy/stubs/config_object.test @@ -275,14 +275,17 @@ class ConfigObject extends LinkedHashMap implements Writable { [Parameter list] [Parameter : file] [Modifiers] + [Throw clause] [Constructor : ConfigObject] [Modifiers] [Parameter list] + [Throw clause] [Method : writeTo] [Modifiers] [Parameter list] [Parameter : outArg] [Modifiers] + [Throw clause] [Variable definitions] [Modifiers] [Method : getProperty] @@ -290,24 +293,29 @@ class ConfigObject extends LinkedHashMap implements Writable { [Parameter list] [Parameter : name] [Modifiers] + [Throw clause] [Variable definitions] [Modifiers] [Method : flatten] [Modifiers] [Parameter list] + [Throw clause] [Method : flatten] [Modifiers] [Parameter list] [Parameter : target] [Modifiers] + [Throw clause] [Method : merge] [Modifiers] [Parameter list] [Parameter : other] [Modifiers] + [Throw clause] [Method : toProperties] [Modifiers] [Parameter list] + [Throw clause] [Variable definitions] [Modifiers] [Method : toProperties] @@ -315,6 +323,7 @@ class ConfigObject extends LinkedHashMap implements Writable { [Parameter list] [Parameter : prefix] [Modifiers] + [Throw clause] [Variable definitions] [Modifiers] [Parameter list] @@ -325,6 +334,7 @@ class ConfigObject extends LinkedHashMap implements Writable { [Modifiers] [Parameter : other] [Modifiers] + [Throw clause] [Parameter : entry] [Modifiers] [Variable definitions] @@ -342,6 +352,7 @@ class ConfigObject extends LinkedHashMap implements Writable { [Modifiers] [Parameter : apply] [Modifiers] + [Throw clause] [Variable definitions] [Modifiers] [Parameter : key] @@ -389,6 +400,7 @@ class ConfigObject extends LinkedHashMap implements Writable { [Modifiers] [Parameter : out] [Modifiers] + [Throw clause] [Variable definitions] [Modifiers] [Parameter list] @@ -407,6 +419,7 @@ class ConfigObject extends LinkedHashMap implements Writable { [Modifiers] [Parameter : out] [Modifiers] + [Throw clause] [Parameter list] [Variable definitions] [Modifiers] @@ -416,6 +429,7 @@ class ConfigObject extends LinkedHashMap implements Writable { [Parameter list] [Parameter : props] [Modifiers] + [Throw clause] [Variable definitions] [Modifiers] [Parameter : e] @@ -429,6 +443,7 @@ class ConfigObject extends LinkedHashMap implements Writable { [Modifiers] [Parameter : map] [Modifiers] + [Throw clause] [Parameter : key] [Modifiers] [Variable definitions] diff --git a/plugins/groovy/testdata/groovy/stubs/slurper.test b/plugins/groovy/testdata/groovy/stubs/slurper.test index 7d48d65b6e8a..94c08487e623 100644 --- a/plugins/groovy/testdata/groovy/stubs/slurper.test +++ b/plugins/groovy/testdata/groovy/stubs/slurper.test @@ -305,21 +305,25 @@ class ConfigBinding extends Binding { [Constructor : ConfigSlurper] [Modifiers] [Parameter list] + [Throw clause] [Constructor : ConfigSlurper] [Modifiers] [Parameter list] [Parameter : env] [Modifiers] + [Throw clause] [Method : setBinding] [Modifiers] [Parameter list] [Parameter : vars] [Modifiers] + [Throw clause] [Method : parse] [Modifiers] [Parameter list] [Parameter : properties] [Modifiers] + [Throw clause] [Variable definitions] [Modifiers] [Parameter : key] @@ -351,21 +355,25 @@ class ConfigBinding extends Binding { [Parameter list] [Parameter : script] [Modifiers] + [Throw clause] [Method : parse] [Modifiers] [Parameter list] [Parameter : scriptClass] [Modifiers] + [Throw clause] [Method : parse] [Modifiers] [Parameter list] [Parameter : script] [Modifiers] + [Throw clause] [Method : parse] [Modifiers] [Parameter list] [Parameter : scriptLocation] [Modifiers] + [Throw clause] [Method : parse] [Modifiers] [Parameter list] @@ -373,6 +381,7 @@ class ConfigBinding extends Binding { [Modifiers] [Parameter : location] [Modifiers] + [Throw clause] [Variable definitions] [Modifiers] [Variable definitions] @@ -439,10 +448,12 @@ class ConfigBinding extends Binding { [Parameter list] [Parameter : c] [Modifiers] + [Throw clause] [Method : setVariable] [Modifiers] [Parameter list] [Parameter : name] [Modifiers] [Parameter : value] - [Modifiers] \ No newline at end of file + [Modifiers] + [Throw clause] \ No newline at end of file diff --git a/plugins/groovy/testdata/groovy/stubs/stub_method1.test b/plugins/groovy/testdata/groovy/stubs/stub_method1.test index e3c33bba0827..9c114e75232b 100644 --- a/plugins/groovy/testdata/groovy/stubs/stub_method1.test +++ b/plugins/groovy/testdata/groovy/stubs/stub_method1.test @@ -16,4 +16,5 @@ class Stub { [Modifiers] [Parameter list] [Parameter : i] - [Modifiers] \ No newline at end of file + [Modifiers] + [Throw clause] \ No newline at end of file diff --git a/plugins/groovy/testdata/groovy/stubs/typeParameters.test b/plugins/groovy/testdata/groovy/stubs/typeParameters.test index 9f7bb365d60d..858cf40ab484 100644 --- a/plugins/groovy/testdata/groovy/stubs/typeParameters.test +++ b/plugins/groovy/testdata/groovy/stubs/typeParameters.test @@ -16,4 +16,5 @@ [Modifiers] [Type parameter list] [Type parameter : T] - [Parameter list] \ No newline at end of file + [Parameter list] + [Throw clause] \ No newline at end of file diff --git a/plugins/testng/lib/src/testng-sources.jar b/plugins/testng/lib/src/testng-sources.jar new file mode 100644 index 000000000000..e00636b7fb17 Binary files /dev/null and b/plugins/testng/lib/src/testng-sources.jar differ diff --git a/plugins/testng/lib/src/testng.zip b/plugins/testng/lib/src/testng.zip deleted file mode 100644 index c20697953852..000000000000 Binary files a/plugins/testng/lib/src/testng.zip and /dev/null differ diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java index 409084ce294c..0bc127bf2344 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java @@ -217,6 +217,17 @@ public class TestNGRunnableState extends JavaTestFrameworkRunnableState getNamedParams(String parameters) { + try { + Integer.parseInt(parameters); + return super.getNamedParams(parameters); + } + catch (NumberFormatException e) { + return Arrays.asList(parameters.split(" ")); + } + } + @NotNull @Override protected String getForkMode() { diff --git a/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java b/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java index 902df9c7f6f2..18197fe169d7 100644 --- a/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java +++ b/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java @@ -110,7 +110,9 @@ public class PyCharmEduInitialConfigurator { "SelectIn", "GotoTypeDeclaration", "QuickChangeScheme", "GotoTest", "GotoRelated", "Hierarchy Actions", "Bookmarks", "Goto Error/Bookmark Actions", "GoToEditPointGroup", - "Change Navigation Actions", "Method Navigation Actions"); + "Change Navigation Actions", "Method Navigation Actions", + "EvaluateExpression", "Pause", "ViewBreakpoints", + "XDebugger.MuteBreakpoints"); public static class First { diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index 5f6b1a4d0341..e9f3a0c2fe14 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -135,6 +135,8 @@ area="IDEA_PROJECT"/> + diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlResourceResolver.java b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlResourceResolver.java index 2e2ed4e3d920..6a5f479cf58e 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlResourceResolver.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlResourceResolver.java @@ -245,8 +245,9 @@ public class XmlResourceResolver implements XMLEntityResolver { if (publicId != null) { try { String userDir = new File(System.getProperty("user.dir")).toURI().getPath(); - if (new URI(publicId).getPath().startsWith(userDir)) { - publicId = publicId.substring(publicId.indexOf(userDir) + userDir.length()); + String publicIdPath = new URI(publicId).getPath(); + if (publicIdPath.startsWith(userDir)) { + publicId = publicIdPath.substring(publicIdPath.indexOf(userDir) + userDir.length()); } } catch (Exception e) {