java-refactoring-extract-method
github/awesome-copilot
Refactor Java methods by extracting complex code blocks into smaller, reusable methods.
What is java-refactoring-extract-method?
This skill applies the Extract Method refactoring pattern to Java code, breaking down complex methods into smaller, focused ones. Use it when methods exceed complexity thresholds (>15 LOC, >10 statements, or >10 cyclomatic complexity) to improve readability, testability, and maintainability.
- Analyzes Java methods for complexity metrics (LOC, statement count, cyclomatic complexity)
- Identifies code blocks suitable for extraction into separate methods
- Generates refactored code with descriptive method names
- Preserves all original functionality while improving structure
- Produces complete, compilable Java 17 code
- Enhances testability, reusability, and code cohesion
How to install java-refactoring-extract-method
npx skills add https://github.com/github/awesome-copilot --skill java-refactoring-extract-methodHow to use java-refactoring-extract-method
- 1.Provide the Java method(s) you want to refactor
- 2.The skill analyzes complexity metrics (LOC, statements, cyclomatic complexity)
- 3.Review the refactored output with extracted methods
- 4.Replace your original code with the refactored version
- 5.Verify the refactored code compiles and maintains original behavior
Use cases
- Simplify builder pattern methods with conditional logic
- Break down data transformation methods with multiple branches
- Extract validation or initialization logic into dedicated methods
- Reduce cyclomatic complexity in methods with nested conditionals
- Improve code reuse by extracting common operation sequences
- Java developers refactoring legacy code
- Teams improving code quality and maintainability
- Developers working with builder patterns or complex business logic
- Code reviewers identifying refactoring opportunities
java-refactoring-extract-method FAQ
Methods exceeding 15 lines of code, 10 statements, or 10 cyclomatic complexity are candidates for extraction.
Yes, Extract Method preserves all original functionality while reorganizing code structure.
The skill produces complete, compilable code for Java 17.
Yes, but it's most beneficial for methods with high complexity, nested conditionals, or repeated code blocks.
Full instructions (SKILL.md)
Source of truth, from github/awesome-copilot.
name: java-refactoring-extract-method description: 'Refactoring using Extract Methods in Java Language'
Refactoring Java Methods with Extract Method
Role
You are an expert in refactoring Java methods.
Below are 2 examples (with titles code before and code after refactoring) that represents Extract Method.
Code Before Refactoring 1:
public FactLineBuilder setC_BPartner_ID_IfValid(final int bpartnerId) {
assertNotBuild();
if (bpartnerId > 0) {
setC_BPartner_ID(bpartnerId);
}
return this;
}
Code After Refactoring 1:
public FactLineBuilder bpartnerIdIfNotNull(final BPartnerId bpartnerId) {
if (bpartnerId != null) {
return bpartnerId(bpartnerId);
} else {
return this;
}
}
public FactLineBuilder setC_BPartner_ID_IfValid(final int bpartnerRepoId) {
return bpartnerIdIfNotNull(BPartnerId.ofRepoIdOrNull(bpartnerRepoId));
}
Code Before Refactoring 2:
public DefaultExpander add(RelationshipType type, Direction direction) {
Direction existingDirection = directions.get(type.name());
final RelationshipType[] newTypes;
if (existingDirection != null) {
if (existingDirection == direction) {
return this;
}
newTypes = types;
} else {
newTypes = new RelationshipType[types.length + 1];
System.arraycopy(types, 0, newTypes, 0, types.length);
newTypes[types.length] = type;
}
Map<String, Direction> newDirections = new HashMap<String, Direction>(directions);
newDirections.put(type.name(), direction);
return new DefaultExpander(newTypes, newDirections);
}
Code After Refactoring 2:
public DefaultExpander add(RelationshipType type, Direction direction) {
Direction existingDirection = directions.get(type.name());
final RelationshipType[] newTypes;
if (existingDirection != null) {
if (existingDirection == direction) {
return this;
}
newTypes = types;
} else {
newTypes = new RelationshipType[types.length + 1];
System.arraycopy(types, 0, newTypes, 0, types.length);
newTypes[types.length] = type;
}
Map<String, Direction> newDirections = new HashMap<String, Direction>(directions);
newDirections.put(type.name(), direction);
return (DefaultExpander) newExpander(newTypes, newDirections);
}
protected RelationshipExpander newExpander(RelationshipType[] types,
Map<String, Direction> directions) {
return new DefaultExpander(types, directions);
}
Task
Apply Extract Method to improve readability, testability, maintainability, reusability, modularity, cohesion, low coupling, and consistency.
Always return a complete and compilable method (Java 17).
Perform intermediate steps internally:
- First, analyze each method and identify those exceeding thresholds:
- LOC (Lines of Code) > 15
- NOM (Number of Statements) > 10
- CC (Cyclomatic Complexity) > 10
- For each qualifying method, identify code blocks that can be extracted into separate methods.
- Extract at least one new method with a descriptive name.
- Output only the refactored code inside a single
javablock. - Do not remove any functionality from the original method.
- Include a one-line comment above each new method describing its purpose.
Code to be Refactored:
Now, assess all methods with high complexity and refactor them using Extract Method
Related skills
More from github/awesome-copilot and the wider catalog.
git-commit
Execute semantic git commits with conventional message analysis and intelligent staging.
excalidraw-diagram-generator
Generate Excalidraw diagrams from natural language descriptions.
documentation-writer
Create structured technical documentation using the Diátaxis framework for tutorials, how-to guides, references, and explanations.
gh-cli
GitHub CLI comprehensive reference for repositories, issues, PRs, Actions, projects, releases, and all GitHub operations from the command line.
prd
Generate comprehensive Product Requirements Documents with executive summaries, user stories, technical specs, and risk analysis.
refactor
Surgical code refactoring to improve maintainability without changing behavior.