Skip to content
Merged
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
1 change: 1 addition & 0 deletions org.eclipse.jdt.ls.core/build.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ bin.includes = META-INF/,\
gradle/init/init.gradle,\
gradle/android/init.gradle,\
gradle/apt/init.gradle,\
gradle/aspectj/init.gradle,\
about.html
src.includes = about.html
73 changes: 73 additions & 0 deletions org.eclipse.jdt.ls.core/gradle/aspectj/init.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import org.gradle.plugins.ide.eclipse.model.EclipseModel

gradle.projectsEvaluated { g ->
if (System.getProperty("eclipse.application") == null) return
def weavingPluginId = "io.freefair.aspectj.post-compile-weaving"
def allprojects = g.rootProject.allprojects
boolean hasWeaving = allprojects.any { it.plugins.hasPlugin(weavingPluginId) }
allprojects.each { p ->
if (p.plugins.hasPlugin("eclipse")) {
EclipseModel eclipseModel = (EclipseModel) p.property("eclipse")
if (hasWeaving) {
if (GradleVersion.version(p.getGradle().getGradleVersion()) >= GradleVersion.version("5.4")) {
try {
try {
Task task = p.getTasks().getByName("classes")
eclipseModel.synchronizationTasks "classes"
} catch (UnknownTaskException e) {
// ignore
}
} catch (Exception e) {
// ignore
}
}
}
if (p.plugins.hasPlugin("io.freefair.aspectj")) {
String[] taskNames = [ "compileAspectj", "compileTestAspectj" ]
if (GradleVersion.version(p.getGradle().getGradleVersion()) >= GradleVersion.version("5.4")) {
for (final String taskName : taskNames) {
try {
Task task = p.getTasks().getByName(taskName)
eclipseModel.synchronizationTasks taskName
} catch (Exception e) {
// ignore
}
}
}
eclipseModel.classpath.file.whenMerged { cp ->
File projectDir = p.getProjectDir()
for (final String taskName : taskNames) {
Task task
try {
task = p.getTasks().getByName(taskName)
} catch (UnknownTaskException e) {
task = null;
}
if (task == null) {
continue
}
if (task.hasProperty("destinationDirectory")) {
def prop = task.destinationDirectory;
Object outputDir = null
if (prop instanceof org.gradle.api.file.DirectoryProperty) {
outputDir = prop.asFile.getOrNull()
} else if (prop instanceof File) {
outputDir = prop
}
if (outputDir != null && outputDir.exists()) {
cp.entries.removeAll { it instanceof org.gradle.plugins.ide.eclipse.model.Library && it.path.equals(outputDir.toString()) }
Object entry = new org.gradle.plugins.ide.eclipse.model.Library(fileReference(outputDir))
entry.exported = true
entry.entryAttributes.put("aspectj_generated", "true")
entry.entryAttributes.put("optional", "true")
entry.entryAttributes.put("ignore_optional_problems", "true")
cp.entries.add(entry)
}
}
}
}
}
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,12 @@ private static List<String> getGradleInitScriptArgs() {
addInitScriptToArgs(androidInitScript, args);
}

// Add init script of aspectj support
if (preferencesManager.getPreferences().isAspectjSupportEnabled()) {
File aspectjInitScript = GradleUtils.getGradleInitScript("/gradle/aspectj/init.gradle");
addInitScriptToArgs(aspectjInitScript, args);
}

return args;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,7 @@ public class Preferences {

public static final String JAVA_JDT_LS_PROTOBUF_SUPPORT_ENABLED = "java.jdt.ls.protobufSupport.enabled";
public static final String JAVA_JDT_LS_ANDROID_SUPPORT_ENABLED = "java.jdt.ls.androidSupport.enabled";
public static final String JAVA_JDT_LS_ASPECTJ_SUPPORT_ENABLED = "java.jdt.ls.aspectjSupport.enabled";
public static final String JAVA_JDT_LS_JAVAC_ENABLED = "java.jdt.ls.javac.enabled";

public static final String JAVA_COMPILE_NULLANALYSIS_NONNULL = "java.compile.nullAnalysis.nonnull";
Expand Down Expand Up @@ -709,6 +710,7 @@ public class Preferences {
private ProjectEncodingMode projectEncoding;
private boolean avoidVolatileChanges;
private boolean protobufSupportEnabled;
private boolean aspectjSupportEnabled;
private boolean javacEnabled;
private boolean androidSupportEnabled;
private List<String> nonnullTypes;
Expand Down Expand Up @@ -1137,6 +1139,7 @@ public Preferences clone() {
prefs.projectEncoding = this.projectEncoding;
prefs.avoidVolatileChanges = this.avoidVolatileChanges;
prefs.protobufSupportEnabled = this.protobufSupportEnabled;
prefs.aspectjSupportEnabled = this.aspectjSupportEnabled;
prefs.javacEnabled = this.javacEnabled;
prefs.androidSupportEnabled = this.androidSupportEnabled;
prefs.nullAnalysisMode = this.nullAnalysisMode;
Expand Down Expand Up @@ -1753,6 +1756,11 @@ public static Preferences updateFrom(Preferences existing, Map<String, Object> c
prefs.setProtobufSupportEnabled(protobufSupported);
}

if (getValue(configuration, JAVA_JDT_LS_ASPECTJ_SUPPORT_ENABLED) != null) {
boolean aspectjSupported = getBoolean(configuration, JAVA_JDT_LS_ASPECTJ_SUPPORT_ENABLED, existing.aspectjSupportEnabled);
prefs.setAspectjSupportEnabled(aspectjSupported);
}

if (getValue(configuration, JAVA_JDT_LS_JAVAC_ENABLED) != null) {
boolean javacEnabled = getBoolean(configuration, JAVA_JDT_LS_JAVAC_ENABLED, existing.javacEnabled);
prefs.setJavacEnabled(javacEnabled);
Expand Down Expand Up @@ -2863,6 +2871,14 @@ public void setProtobufSupportEnabled(boolean protobufSupportEnabled) {
this.protobufSupportEnabled = protobufSupportEnabled;
}

public boolean isAspectjSupportEnabled() {
return aspectjSupportEnabled;
}

public void setAspectjSupportEnabled(boolean aspectjSupportEnabled) {
this.aspectjSupportEnabled = aspectjSupportEnabled;
}

public boolean isAndroidSupportEnabled() {
return this.androidSupportEnabled;
}
Expand Down
55 changes: 55 additions & 0 deletions org.eclipse.jdt.ls.tests/projects/gradle/aspect/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
plugins {
id("io.freefair.aspectj") version "8.10.2"
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: "io.freefair.aspectj"

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

repositories {
jcenter()
}

dependencies {
implementation "org.aspectj:aspectjrt:1.9.25"
}

compileAspectj {
sourceCompatibility "17"
targetCompatibility "17"
}
compileTestAspectj {
sourceCompatibility "17"
targetCompatibility "17"
}

compileAspectj {
ajcOptions {
outxml = true
outxmlfile = "bar.xml"
}
}

compileAspectj.ajcOptions.outxml = true
compileAspectj.ajcOptions.outxmlfile = "bar.xml"

eclipse {
classpath {
defaultOutputDir = file('target')
file {
whenMerged {
cp -> cp.getEntries().forEach{
cpEntry -> if(cpEntry.kind=='src') {
cpEntry.output = cpEntry.output.replace('bin/', 'target/')
}
}
}
}
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
183 changes: 183 additions & 0 deletions org.eclipse.jdt.ls.tests/projects/gradle/aspect/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading