Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,7 @@ public Completion createThisOrSuperConstructorItem(CompilationInfo info, Executa
@Override
public Completion createOverrideMethodItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean implement) {
Completion item = createExecutableItem(info, elem, type, substitutionOffset, null, false, false, false, false, false, -1, false);
ElementHandle<ExecutableElement> elemHandle = ElementHandle.create(elem);
CompletionCollector.Builder builder = CompletionCollector.newBuilder(item.getLabel())
.kind(elementKind2CompletionItemKind(elem.getKind()))
.labelDetail(String.format("%s - %s", item.getLabelDetail(), implement ? "implement" : "override"))
Expand All @@ -558,16 +559,21 @@ public Completion createOverrideMethodItem(CompilationInfo info, ExecutableEleme
.textEdit(new TextEdit(substitutionOffset, substitutionOffset, EMPTY))
.additionalTextEdits(() -> modify2TextEdits(JavaSource.forFileObject(info.getFileObject()), wc -> {
wc.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
ExecutableElement currentElem = elemHandle.resolve(wc);
if (currentElem == null) {
//cannot resolve?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit - maybe remove this comment, as other places don't have it either. (Or add logging to this and other places.)

return ;
}
TreePath tp = wc.getTreeUtilities().pathFor(substitutionOffset);
if (implement) {
GeneratorUtils.generateAbstractMethodImplementation(wc, tp, elem, substitutionOffset);
GeneratorUtils.generateAbstractMethodImplementation(wc, tp, currentElem, substitutionOffset);
} else {
GeneratorUtils.generateMethodOverride(wc, tp, elem, substitutionOffset);
GeneratorUtils.generateMethodOverride(wc, tp, currentElem, substitutionOffset);
}
}));
ElementHandle<ExecutableElement> handle = SUPPORTED_ELEMENT_KINDS.contains(elem.getKind().name()) ? ElementHandle.create(elem) : null;
if (handle != null) {
builder.documentation(getDocumentation(doc, offset, handle));

if (SUPPORTED_ELEMENT_KINDS.contains(elem.getKind().name())) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the SUPPORTED_ELEMENT_KINDS check here does not serve any function anymore. I believe the point here was to not call ElementHandle.create with an unsupported ElementKind, but: a) I think all kinds that can occur here are supported; b) we have already created the ElementHandle by this point, so if that would not work, it would have failed already. I think I would suggest to simply delete the condition here.

builder.documentation(getDocumentation(doc, offset, elemHandle));
}
return builder.build();
}
Expand All @@ -593,6 +599,7 @@ public Completion createGetterSetterMethodItem(CompilationInfo info, VariableEle
sortParams.append(typeName);
}
labelDetail.append(") - generate");
ElementHandle<VariableElement> elemHandle = ElementHandle.create(elem);
Builder builder = CompletionCollector.newBuilder(name)
.kind(Completion.Kind.Method)
.labelDetail(labelDetail.toString())
Expand All @@ -601,6 +608,10 @@ public Completion createGetterSetterMethodItem(CompilationInfo info, VariableEle
.textEdit(new TextEdit(substitutionOffset, substitutionOffset, EMPTY))
.additionalTextEdits(() -> modify2TextEdits(JavaSource.forFileObject(info.getFileObject()), wc -> {
wc.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
VariableElement currentElem = elemHandle.resolve(wc);
if (currentElem == null) {
return;
}
TreePath tp = wc.getTreeUtilities().pathFor(substitutionOffset);
if (TreeUtilities.CLASS_TREE_KINDS.contains(tp.getLeaf().getKind())) {
if (Utilities.inAnonymousOrLocalClass(tp)) {
Expand All @@ -609,7 +620,7 @@ public Completion createGetterSetterMethodItem(CompilationInfo info, VariableEle
TypeElement te = (TypeElement)wc.getTrees().getElement(tp);
if (te != null) {
GeneratorUtilities gu = GeneratorUtilities.get(wc);
MethodTree method = setter ? gu.createSetter(te, elem) : gu.createGetter(te, elem);
MethodTree method = setter ? gu.createSetter(te, currentElem) : gu.createGetter(te, currentElem);
ClassTree decl = GeneratorUtils.insertClassMember(wc, (ClassTree)tp.getLeaf(), method, substitutionOffset);
wc.rewrite(tp.getLeaf(), decl);
}
Expand Down Expand Up @@ -870,7 +881,13 @@ public Completion createInitializeAllConstructorItem(CompilationInfo info, boole
}
labelDetail.append(") - generate");
sortParams.append(')');
ElementHandle<?> parentPath = ElementHandle.create(parent);
ElementHandle<TypeElement> parentHandle = ElementHandle.create(parent);
ElementHandle<ExecutableElement> superConstructorHandle = superConstructor != null ? ElementHandle.create(superConstructor) : null;
List<ElementHandle<VariableElement>> fieldHandles = new ArrayList<>();
for (VariableElement ve : fields) {
fieldHandles.add(ElementHandle.create(ve));
}

return CompletionCollector.newBuilder(simpleName)
.kind(Completion.Kind.Constructor)
.labelDetail(labelDetail.toString())
Expand All @@ -879,23 +896,30 @@ public Completion createInitializeAllConstructorItem(CompilationInfo info, boole
.textEdit(new TextEdit(substitutionOffset, substitutionOffset, EMPTY))
.additionalTextEdits(() -> modify2TextEdits(JavaSource.forFileObject(info.getFileObject()), wc -> {
wc.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
TypeElement currentParent = parentHandle.resolve(wc);
if (currentParent == null) {
return;
}
ExecutableElement currentSuperConstructor = superConstructorHandle != null ? superConstructorHandle.resolve(wc) : null;

TreePath tp = wc.getTreeUtilities().pathFor(substitutionOffset);
if (TreeUtilities.CLASS_TREE_KINDS.contains(tp.getLeaf().getKind())) {
Element currentType = wc.getTrees().getElement(tp);
ElementHandle<?> currentTypePath =
currentType != null ? ElementHandle.create(currentType)
: null;
if (Objects.equals(parentPath, currentTypePath)) {
if (Objects.equals(parentHandle, currentTypePath)) {
ArrayList<VariableElement> fieldElements = new ArrayList<>();
for (VariableElement fieldElement : fields) {
for (ElementHandle<VariableElement> fieldHandle : fieldHandles) {
VariableElement fieldElement = fieldHandle.resolve(wc);
if (fieldElement != null && fieldElement.getKind().isField()) {
fieldElements.add((VariableElement)fieldElement);
}
}
ClassTree clazz = (ClassTree) tp.getLeaf();
GeneratorUtilities gu = GeneratorUtilities.get(wc);
MethodTree ctor = isDefault ? gu.createDefaultConstructor(parent, fieldElements, superConstructor)
: gu.createConstructor(parent, fieldElements, superConstructor);
MethodTree ctor = isDefault ? gu.createDefaultConstructor(currentParent, fieldElements, currentSuperConstructor)
: gu.createConstructor(currentParent, fieldElements, currentSuperConstructor);
ClassTree decl = GeneratorUtils.insertClassMember(wc, clazz, ctor, substitutionOffset);
wc.rewrite(clazz, decl);
}
Expand Down
Loading