Merge remote-tracking branch 'origin/master'

This commit is contained in:
Dmitry Trofimov
2016-09-01 17:14:02 +02:00
@@ -47,6 +47,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.stream.Collectors;
public class HighlightClassUtil {
private static final QuickFixFactory QUICK_FIX_FACTORY = QuickFixFactory.getInstance();
@@ -235,7 +236,7 @@ public class HighlightClassUtil {
if (aClass.getParent() != containingFile || !aClass.hasModifierProperty(PsiModifier.PUBLIC) || !(containingFile instanceof PsiJavaFile)) return null;
PsiJavaFile file = (PsiJavaFile)containingFile;
VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile == null || aClass.getName().equals(virtualFile.getNameWithoutExtension())) {
if (virtualFile == null || virtualFile.getNameWithoutExtension().equals(aClass.getName())) {
return null;
}
String message = JavaErrorMessages.message("public.class.should.be.named.after.file", aClass.getName());
@@ -253,7 +254,7 @@ public class HighlightClassUtil {
for (PsiClass otherClass : classes) {
if (!otherClass.getManager().areElementsEquivalent(otherClass, aClass) &&
otherClass.hasModifierProperty(PsiModifier.PUBLIC) &&
otherClass.getName().equals(virtualFile.getNameWithoutExtension())) {
virtualFile.getNameWithoutExtension().equals(otherClass.getName())) {
return errorResult;
}
}
@@ -564,22 +565,26 @@ public class HighlightClassUtil {
@NotNull TextRange range,
@NotNull PsiClass subClass,
@NotNull PsiClass superClass) {
PsiElement resolved = JavaResolveUtil.resolveImaginarySuperCallInThisPlace(subClass, subClass.getProject(), superClass);
Project project = subClass.getProject();
PsiElement resolved = JavaResolveUtil.resolveImaginarySuperCallInThisPlace(subClass, project, superClass);
if (resolved != null) {
return null;
}
// find two ambiguous var-args-only constructors
List<PsiMethod> varargConstructors = new ArrayList<>();
for (PsiMethod constructor : constructors) {
final PsiParameter[] parameters = constructor.getParameterList().getParameters();
if (parameters.length == 1 && parameters[0].isVarArgs()) {
varargConstructors.add(constructor);
if (varargConstructors.size() == 2) break;
}
}
List<PsiMethod> varargConstructors = Arrays.stream(constructors)
.filter(constructor -> constructor.getParameterList().getParameters().length == 1)
.filter(constructor -> constructor.getParameterList().getParameters()[0].isVarArgs())
.filter(constructor -> PsiResolveHelper.SERVICE.getInstance(project).isAccessible(constructor, subClass, subClass))
.limit(2).collect(Collectors.toList());
if (varargConstructors.size() > 1) {
//List<PsiMethod> varargConstructors = Arrays.stream(constructors)
// .map(constructor -> Pair.create(constructor, constructor.getParameterList().getParameters()))
// .filter(p -> p.second.length == 1 && p.second[0].isVarArgs() && PsiResolveHelper.SERVICE.getInstance(project).isAccessible(p.first, subClass, subClass))
// .map(p -> p.first)
// .limit(2).collect(Collectors.toList());
//
if (varargConstructors.size() == 2) {
final String m1 = PsiFormatUtil.formatMethod(varargConstructors.get(0), PsiSubstitutor.EMPTY,
PsiFormatUtilBase.SHOW_CONTAINING_CLASS |
PsiFormatUtilBase.SHOW_NAME |