Skip to content
Open
Show file tree
Hide file tree
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 @@ -123,6 +123,16 @@ public List<Completion> getCompletionsAt(JTextComponent tc, Point p) {
}


/**
* Returns the source completion provider used internally.
*
* @return The source completion provider.
*/
SourceCompletionProvider getSourceProvider() {
return sourceProvider;
}


/**
* Returns the jars on the "build path".
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,11 @@ public class JavaLanguageSupport extends AbstractLanguageSupport {
*/
private JarManager jarManager;

/**
* Whether to hide compiler-generated synthetic fields from completions.
*/
private boolean hideSyntheticFields = true;

/**
* Client property installed on text areas that points to a listener.
*/
Expand Down Expand Up @@ -109,6 +114,33 @@ public JarManager getJarManager() {
}


/**
* Returns whether compiler-generated synthetic fields (e.g.
* {@code class$0}) are hidden from completion results. The default
* value is {@code true}.
*
* @return Whether synthetic fields are hidden.
* @see #setHideSyntheticFields(boolean)
*/
public boolean getHideSyntheticFields() {
return hideSyntheticFields;
}


/**
* Sets whether compiler-generated synthetic fields (e.g. {@code class$0},
* {@code class$1}) should be hidden from completion results. These
* fields are generated by compilers for {@code .class} literal
* expressions when targeting pre-Java 5 bytecode.
*
* @param hide Whether to hide synthetic fields.
* @see #getHideSyntheticFields()
*/
public void setHideSyntheticFields(boolean hide) {
this.hideSyntheticFields = hide;
}


/**
* Returns the Java parser running on a text area with this Java language
* support installed.
Expand All @@ -134,6 +166,7 @@ public JavaParser getParser(RSyntaxTextArea textArea) {
public void install(RSyntaxTextArea textArea) {

JavaCompletionProvider p = new JavaCompletionProvider(jarManager);
p.getSourceProvider().setHideSyntheticFields(hideSyntheticFields);
// Can't use createAutoCompletion(), as Java's is "special."
AutoCompletion ac = new JavaAutoCompletion(p, textArea);
ac.setListCellRenderer(new JavaCellRenderer());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,15 @@ class SourceCompletionProvider extends DefaultCompletionProvider {

//Shorthand completions (templates and comments)
private ShorthandCompletionCache shorthandCache;

/**
* Whether to hide compiler-generated synthetic members (e.g.
* {@code class$0} fields, {@code access$0} methods) from completion
* results. These are generated by compilers for {@code .class} literal
* expressions and inner class private member access. Defaults to
* {@code true}.
*/
private boolean hideSyntheticFields = true;
/**
* Constructor.
*/
Expand All @@ -113,6 +122,30 @@ class SourceCompletionProvider extends DefaultCompletionProvider {
}


/**
* Returns whether compiler-generated synthetic fields are hidden from
* completion results.
*
* @return Whether synthetic fields are hidden.
* @see #setHideSyntheticFields(boolean)
*/
boolean isHideSyntheticFields() {
return hideSyntheticFields;
}


/**
* Sets whether compiler-generated synthetic fields (e.g. {@code class$0})
* should be hidden from completion results.
*
* @param hide Whether to hide synthetic fields.
* @see #isHideSyntheticFields()
*/
void setHideSyntheticFields(boolean hide) {
this.hideSyntheticFields = hide;
}


private void addCompletionsForStaticMembers(Set<Completion> set,
CompilationUnit cu, ClassFile cf, String pkg) {

Expand Down Expand Up @@ -614,6 +647,16 @@ public SourceLocation getSourceLocForClass(String className) {
*/
private boolean isAccessible(MemberInfo info, String pkg) {

// Filter compiler-generated synthetic members from completion results:
// - class$N fields: generated for .class literal expressions (pre-Java 5)
// - access$N methods: generated for inner class private member access
if (hideSyntheticFields) {
String name = info.getName();
if (name != null && (name.startsWith("class$") || name.startsWith("access$"))) {
return false;
}
}

boolean accessible = false;
int access = info.getAccessFlags();

Expand Down