|
13 | 13 |
|
14 | 14 | package org.eclipse.jdt.ls.core.internal.corext.template.java;
|
15 | 15 |
|
| 16 | +import org.eclipse.jdt.core.IJavaElement; |
| 17 | +import org.eclipse.jdt.core.IType; |
| 18 | +import org.eclipse.jdt.internal.core.manipulation.JavaElementLabelsCore; |
16 | 19 | import org.eclipse.jdt.internal.corext.template.java.AbstractJavaContextTypeCore;
|
| 20 | +import org.eclipse.jdt.internal.corext.template.java.CompilationUnitContext; |
17 | 21 | import org.eclipse.jdt.internal.corext.template.java.IJavaContext;
|
| 22 | +import org.eclipse.jdt.internal.corext.template.java.JavaTemplateMessages; |
18 | 23 | import org.eclipse.jdt.internal.corext.template.java.VarResolver;
|
| 24 | +import org.eclipse.jface.text.templates.TemplateContext; |
19 | 25 | import org.eclipse.jface.text.templates.TemplateVariableResolver;
|
20 | 26 |
|
21 | 27 | /**
|
@@ -75,10 +81,44 @@ public void initializeContextTypeResolvers() {
|
75 | 81 | // TODO: Some of the resolvers are defined in org.eclipse.jdt.ui/plugin.xml, now we have to add them manually.
|
76 | 82 | // See: https://github.com/eclipse-jdt/eclipse.jdt.ui/blob/dc995e7a0069e1eca58b19a4bc365032c50b0201/org.eclipse.jdt.ui/plugin.xml#L5674-L5752
|
77 | 83 | addResolver("var", new VarResolver());
|
| 84 | + addResolver(new SimpleType()); |
78 | 85 | }
|
79 | 86 |
|
80 | 87 | public synchronized void addResolver(String type, TemplateVariableResolver resolver) {
|
81 | 88 | resolver.setType(type);
|
82 | 89 | addResolver(resolver);
|
83 | 90 | }
|
| 91 | + |
| 92 | + // Copied from org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType.EnclosingJavaElement |
| 93 | + protected static class EnclosingJavaElement extends TemplateVariableResolver { |
| 94 | + protected final int fElementType; |
| 95 | + |
| 96 | + public EnclosingJavaElement(String name, String description, int elementType) { |
| 97 | + super(name, description); |
| 98 | + fElementType = elementType; |
| 99 | + } |
| 100 | + |
| 101 | + @Override |
| 102 | + protected String resolve(TemplateContext context) { |
| 103 | + IJavaElement element = ((CompilationUnitContext) context).findEnclosingElement(fElementType); |
| 104 | + if (element instanceof IType) { |
| 105 | + // Flag was changed to permit non-qualified types |
| 106 | + return JavaElementLabelsCore.getElementLabel(element, 0); |
| 107 | + } |
| 108 | + return (element == null) ? null : element.getElementName(); |
| 109 | + } |
| 110 | + |
| 111 | + @Override |
| 112 | + protected boolean isUnambiguous(TemplateContext context) { |
| 113 | + return resolve(context) != null; |
| 114 | + } |
| 115 | + } |
| 116 | + |
| 117 | + // Copied from org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType.Type |
| 118 | + protected static class SimpleType extends EnclosingJavaElement { |
| 119 | + public SimpleType() { |
| 120 | + super("enclosing_simple_type", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_type, IJavaElement.TYPE); |
| 121 | + } |
| 122 | + } |
84 | 123 | }
|
| 124 | + |
0 commit comments