Skip to content

Commit

Permalink
Use src/main/java when generating TemplateExtensions.java
Browse files Browse the repository at this point in the history
Hard code the folder that `TemplateExtensions.java` is generated in
to `./src/main/java`,
and throw an exception if that path isn't on the classpath to indicate
that the quick fix failed.

We will need to improve this in the future,
since the location of the default package can be configured
in Maven and Gradle.

Fixes redhat-developer#831

Signed-off-by: David Thompson <davthomp@redhat.com>
  • Loading branch information
datho7561 committed Mar 28, 2023
1 parent e6114a1 commit a57101d
Showing 1 changed file with 23 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,22 @@

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
Expand Down Expand Up @@ -378,9 +384,25 @@ private static WorkspaceEdit createNewTemplateExtensionFile(GenerateMissingJavaM

IPackageFragment destPackage = null;
try {
IPath sourceFilesPath = project.getResource().getProjectRelativePath().append("src/main/java");
Optional<IPackageFragmentRoot> sourceFragmentRootOptional = Stream.of(project.getPackageFragmentRoots()) //
.filter(pfr -> {
try {
if (pfr.getKind() == IPackageFragmentRoot.K_BINARY || pfr.getResource() == null) {
return false;
}
return pfr.getResource().getProjectRelativePath().equals(sourceFilesPath);
} catch (JavaModelException e) {
return false;
}
}) //
.findFirst();
if (sourceFragmentRootOptional.isEmpty()) {
throw new UnsupportedOperationException("This quick fix only works for projects where the code is stored in src/main/java");
}
IPackageFragmentRoot fragmentRoot = sourceFragmentRootOptional.get();
// TODO: longest substring match of package of original class
// OR: figure out the "correct" one from the groupId?
IPackageFragmentRoot fragmentRoot = project.getPackageFragmentRoots()[0];
destPackage = fragmentRoot.getPackageFragment("");
} catch (JavaModelException e) {
}
Expand Down

0 comments on commit a57101d

Please sign in to comment.