woaru
Version:
Universal Project Setup Autopilot - Analyze and automatically configure development tools for ANY programming language
131 lines • 5.17 kB
JavaScript
import { BasePlugin } from './BasePlugin.js';
export class JavaPlugin extends BasePlugin {
name = 'Java';
frameworks = ['java', 'spring', 'springboot'];
canHandle(analysis) {
return (analysis.language === 'Java' ||
analysis.configFiles.some(file => file.includes('pom.xml') ||
file.includes('build.gradle') ||
file.endsWith('.java')));
}
getRecommendations(analysis) {
const recommendations = [];
// Checkstyle for code style
if (!this.hasPackage(analysis, 'checkstyle')) {
recommendations.push({
tool: 'checkstyle',
category: 'code-style',
reason: 'Enforce consistent Java coding standards and catch style violations',
packages: ['checkstyle'],
configFiles: ['checkstyle.xml'],
priority: 'high',
});
}
// SpotBugs for static analysis
if (!this.hasPackage(analysis, 'spotbugs')) {
recommendations.push({
tool: 'spotbugs',
category: 'static-analysis',
reason: 'Find bugs and potential issues in Java bytecode',
packages: ['spotbugs-maven-plugin', 'spotbugs-gradle-plugin'],
configFiles: [],
priority: 'high',
});
}
// JUnit for testing
if (!this.hasPackage(analysis, 'junit')) {
recommendations.push({
tool: 'junit',
category: 'testing',
reason: 'Industry standard testing framework for Java',
packages: ['junit-jupiter', 'junit-jupiter-engine'],
configFiles: [],
priority: 'medium',
});
}
// Jacoco for test coverage
if (!this.hasPackage(analysis, 'jacoco')) {
recommendations.push({
tool: 'jacoco',
category: 'test-coverage',
reason: 'Measure and report test coverage for Java applications',
packages: ['jacoco-maven-plugin'],
configFiles: [],
priority: 'medium',
});
}
// Maven Enforcer or Gradle equivalent
if (analysis.packageManager === 'maven') {
recommendations.push({
tool: 'maven-enforcer',
category: 'dependency-management',
reason: 'Enforce dependency convergence and version consistency',
packages: ['maven-enforcer-plugin'],
configFiles: ['pom.xml'],
priority: 'low',
});
}
return recommendations;
}
getRefactorSuggestions(analysis) {
const suggestions = [];
const javaFiles = analysis.structure.filter(file => file.endsWith('.java'));
javaFiles.forEach(file => {
// Spring specific suggestions
if (analysis.framework.includes('spring') ||
analysis.framework.includes('springboot')) {
if (file.includes('Controller.java')) {
suggestions.push({
filename: file,
suggestion: 'Use @RestController instead of @Controller + @ResponseBody for REST APIs',
type: 'best-practice',
});
}
if (file.includes('Service.java')) {
suggestions.push({
filename: file,
suggestion: 'Consider using @Transactional for methods that modify data',
type: 'best-practice',
});
}
if (file.includes('Repository.java')) {
suggestions.push({
filename: file,
suggestion: 'Extend JpaRepository for better query capabilities',
type: 'performance',
});
}
}
// General Java suggestions
if (file.includes('Test.java') || file.includes('Tests.java')) {
suggestions.push({
filename: file,
suggestion: 'Use @ParameterizedTest for testing multiple inputs efficiently',
type: 'maintainability',
});
}
// Main class suggestions
if (file.includes('Main.java') || file.includes('Application.java')) {
suggestions.push({
filename: file,
suggestion: 'Consider using dependency injection instead of static dependencies',
type: 'maintainability',
});
}
});
return suggestions;
}
getSpecificPackages() {
return [
'checkstyle',
'spotbugs',
'junit-jupiter',
'mockito',
'assertj-core',
'jacoco-maven-plugin',
'maven-surefire-plugin',
'lombok',
];
}
}
//# sourceMappingURL=JavaPlugin.js.map