From 3a7a911142dc2293a8d28078b61e6020e45fbf10 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 14 Mar 2012 14:03:44 +0400 Subject: [PATCH] compile server: jdk versions added to model --- .../compiler/CompileServerManager.java | 9 +- jps/jps-builders/proto/jps_remote_proto.proto | 1 + .../org/jetbrains/jps/api/JpsRemoteProto.java | 94 +++++++++++++++++++ .../src/org/jetbrains/jps/api/ProtoUtil.java | 4 + .../src/org/jetbrains/jps/api/SdkLibrary.java | 15 +-- .../jps/server/ServerMessageHandler.java | 2 +- .../org/jetbrains/jps/server/ServerState.java | 2 +- .../jetbrains/ether/IncrementalTestCase.java | 2 +- .../artifacts/ArtifactBuilderTestCase.java | 2 +- .../src/org/jetbrains/jps/JavaSdkImpl.groovy | 6 +- .../src/org/jetbrains/jps/Project.groovy | 6 +- .../org/jetbrains/jps/idea/JavaSdkType.groovy | 4 +- .../org/jetbrains/jps/idea/SdkLoader.groovy | 4 +- .../jetbrains/jps/idea/SdkTypeService.groovy | 2 +- .../jps/android/AndroidSdkType.groovy | 2 +- 15 files changed, 134 insertions(+), 21 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java index 968132b3fab7..19257fdc6b68 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java @@ -530,7 +530,14 @@ public class CompileServerManager implements ApplicationComponent{ additionalDataXml = JDOMUtil.writeElement(element, "\n"); } final List paths = convertToLocalPaths(sdk.getRootProvider().getFiles(OrderRootType.CLASSES)); - globals.add(new SdkLibrary(name, sdkType.getName(), homePath, paths, additionalDataXml)); + String versionString = sdk.getVersionString(); + if (versionString != null && sdkType instanceof JavaSdk) { + final JavaSdkVersion version = ((JavaSdk)sdkType).getVersion(versionString); + if (version != null) { + versionString = version.getDescription(); + } + } + globals.add(new SdkLibrary(name, sdkType.getName(), versionString, homePath, paths, additionalDataXml)); } } diff --git a/jps/jps-builders/proto/jps_remote_proto.proto b/jps/jps-builders/proto/jps_remote_proto.proto index 99cabdce4711..c37fb7819db0 100644 --- a/jps/jps-builders/proto/jps_remote_proto.proto +++ b/jps/jps-builders/proto/jps_remote_proto.proto @@ -69,6 +69,7 @@ message Message { optional string type_name = 3; optional string additional_data_xml = 4; repeated string path = 5; + optional string version = 6; } repeated KeyValuePair path_variable = 1; diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/JpsRemoteProto.java b/jps/jps-builders/src/org/jetbrains/jps/api/JpsRemoteProto.java index 285dfcaa0726..b71f3b983457 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/api/JpsRemoteProto.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/JpsRemoteProto.java @@ -2789,6 +2789,10 @@ public final class JpsRemoteProto { java.util.List getPathList(); int getPathCount(); String getPath(int index); + + // optional string version = 6; + boolean hasVersion(); + String getVersion(); } public static final class GlobalLibrary extends com.google.protobuf.GeneratedMessageLite @@ -2951,12 +2955,45 @@ public final class JpsRemoteProto { return path_.get(index); } + // optional string version = 6; + public static final int VERSION_FIELD_NUMBER = 6; + private java.lang.Object version_; + public boolean hasVersion() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public String getVersion() { + java.lang.Object ref = version_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + version_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getVersionBytes() { + java.lang.Object ref = version_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + version_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private void initFields() { name_ = ""; homePath_ = ""; typeName_ = ""; additionalDataXml_ = ""; path_ = com.google.protobuf.LazyStringArrayList.EMPTY; + version_ = ""; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -2989,6 +3026,9 @@ public final class JpsRemoteProto { for (int i = 0; i < path_.size(); i++) { output.writeBytes(5, path_.getByteString(i)); } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(6, getVersionBytes()); + } } private int memoizedSerializedSize = -1; @@ -3022,6 +3062,10 @@ public final class JpsRemoteProto { size += dataSize; size += 1 * getPathList().size(); } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(6, getVersionBytes()); + } memoizedSerializedSize = size; return size; } @@ -3134,6 +3178,8 @@ public final class JpsRemoteProto { bitField0_ = (bitField0_ & ~0x00000008); path_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00000010); + version_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); return this; } @@ -3189,6 +3235,10 @@ public final class JpsRemoteProto { bitField0_ = (bitField0_ & ~0x00000010); } result.path_ = path_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000010; + } + result.version_ = version_; result.bitField0_ = to_bitField0_; return result; } @@ -3217,6 +3267,9 @@ public final class JpsRemoteProto { } } + if (other.hasVersion()) { + setVersion(other.getVersion()); + } return this; } @@ -3270,6 +3323,11 @@ public final class JpsRemoteProto { path_.add(input.readBytes()); break; } + case 50: { + bitField0_ |= 0x00000020; + version_ = input.readBytes(); + break; + } } } } @@ -3476,6 +3534,42 @@ public final class JpsRemoteProto { } + // optional string version = 6; + private java.lang.Object version_ = ""; + public boolean hasVersion() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public String getVersion() { + java.lang.Object ref = version_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + version_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setVersion(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + version_ = value; + + return this; + } + public Builder clearVersion() { + bitField0_ = (bitField0_ & ~0x00000020); + version_ = getDefaultInstance().getVersion(); + + return this; + } + void setVersion(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000020; + version_ = value; + + } + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.Request.SetupCommand.GlobalLibrary) } diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/ProtoUtil.java b/jps/jps-builders/src/org/jetbrains/jps/api/ProtoUtil.java index b5904b80c44e..25f3a6fa4df7 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/api/ProtoUtil.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/ProtoUtil.java @@ -149,6 +149,10 @@ public class ProtoUtil { if (additional != null) { libBuilder.setAdditionalDataXml(additional); } + final String version = sdk.getVersion(); + if (version != null) { + libBuilder.setVersion(version); + } } cmdBuilder.addGlobalLibrary(libBuilder.build()); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/SdkLibrary.java b/jps/jps-builders/src/org/jetbrains/jps/api/SdkLibrary.java index 8fc12ba8cd10..3f30c109b4f5 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/api/SdkLibrary.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/SdkLibrary.java @@ -9,23 +9,26 @@ import java.util.List; * Date: 10/4/11 */ public class SdkLibrary extends GlobalLibrary { - private final String myTypeName; + @Nullable private final String myVersion; private final String myHomePath; @Nullable private final String myAdditionalDataXml; - public SdkLibrary(String name, final String typeName, String homePath, List paths) { - this(name, typeName, homePath, paths, null); - } - - public SdkLibrary(String name, String typeName, String homePath, List paths, @Nullable String additionalDataXml) { + public SdkLibrary(String name, String typeName, @Nullable String version, String homePath, List paths, + @Nullable String additionalDataXml) { super(name, paths); myTypeName = typeName; + myVersion = version; myHomePath = homePath; myAdditionalDataXml = additionalDataXml; } + @Nullable + public String getVersion() { + return myVersion; + } + public String getTypeName() { return myTypeName; } diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/ServerMessageHandler.java b/jps/jps-builders/src/org/jetbrains/jps/server/ServerMessageHandler.java index 5aa8bda9a4fc..49fbfc7dcb26 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/ServerMessageHandler.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/ServerMessageHandler.java @@ -76,7 +76,7 @@ class ServerMessageHandler extends SimpleChannelHandler { for (JpsRemoteProto.Message.Request.SetupCommand.GlobalLibrary library : setupCommand.getGlobalLibraryList()) { libs.add( library.hasHomePath()? - new SdkLibrary(library.getName(), library.getTypeName(), library.getHomePath(), library.getPathList(), library.hasAdditionalDataXml()? library.getAdditionalDataXml() : null) : + new SdkLibrary(library.getName(), library.getTypeName(), library.hasVersion() ? library.getVersion() : null, library.getHomePath(), library.getPathList(), library.hasAdditionalDataXml()? library.getAdditionalDataXml() : null) : new GlobalLibrary(library.getName(), library.getPathList()) ); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java b/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java index 781eba65d146..cff5e3eda9f3 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java @@ -301,7 +301,7 @@ class ServerState { LOG.info(e); } } - final Sdk jdk = project.createSdk(/*"JavaSDK"*/sdk.getTypeName(), sdk.getName(), sdk.getHomePath(), additionalData); + final Sdk jdk = project.createSdk(sdk.getTypeName(), sdk.getName(), sdk.getVersion(), sdk.getHomePath(), additionalData); if (jdk != null) { jdk.setClasspath(sdk.getPaths()); } diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java index f1fdb2d06033..405ab57fe607 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java @@ -192,7 +192,7 @@ public abstract class IncrementalTestCase extends TestCase { final String projectPath = getWorkDir() + File.separator + ".idea"; final Project project = new Project(); - final Sdk jdk = project.createSdk("JavaSDK", "IDEA jdk", System.getProperty("java.home"), null); + final Sdk jdk = project.createSdk("JavaSDK", "IDEA jdk", "1.6", System.getProperty("java.home"), null); final List paths = new LinkedList(); paths.add(FileUtil.toSystemIndependentName(ClasspathBootstrap.getResourcePath(Object.class).getCanonicalPath())); diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java index 20927bd768bb..081ed67ee76f 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java @@ -114,7 +114,7 @@ public abstract class ArtifactBuilderTestCase extends UsefulTestCase { protected Module addModule(String moduleName, @Nullable String srcPath) { if (myJdk == null) { try { - myJdk = myProject.createSdk("JavaSDK", "jdk", System.getProperty("java.home"), null); + myJdk = myProject.createSdk("JavaSDK", "jdk", "1.6", System.getProperty("java.home"), null); final List paths = new LinkedList(); paths.add(FileUtil.toSystemIndependentName(ClasspathBootstrap.getResourcePath(Object.class).getCanonicalPath())); myJdk.setClasspath(paths); diff --git a/jps/model/src/org/jetbrains/jps/JavaSdkImpl.groovy b/jps/model/src/org/jetbrains/jps/JavaSdkImpl.groovy index d1a20ceb9f21..0f220220bfc4 100644 --- a/jps/model/src/org/jetbrains/jps/JavaSdkImpl.groovy +++ b/jps/model/src/org/jetbrains/jps/JavaSdkImpl.groovy @@ -1,13 +1,17 @@ package org.jetbrains.jps +import org.jetbrains.annotations.Nullable + /** * @author nik */ class JavaSdkImpl extends JavaSdk { String jdkPath + @Nullable String version - def JavaSdkImpl(Project project, String name, String jdkPath, Closure initializer) { + def JavaSdkImpl(Project project, String name, String version, String jdkPath, Closure initializer) { super(project, name, initializer) + this.version = version this.jdkPath = jdkPath } diff --git a/jps/model/src/org/jetbrains/jps/Project.groovy b/jps/model/src/org/jetbrains/jps/Project.groovy index d0c7f07f83ad..8596d7153831 100644 --- a/jps/model/src/org/jetbrains/jps/Project.groovy +++ b/jps/model/src/org/jetbrains/jps/Project.groovy @@ -46,13 +46,13 @@ class Project { } def JavaSdk createJavaSdk(String name, String path, Closure initializer) { - def sdk = new JavaSdkImpl(this, name, path, initializer) + def sdk = new JavaSdkImpl(this, name, null, path, initializer) sdks[name] = sdk return sdk } - def Sdk createSdk(String typeName, String sdkName, String path, Node additionalData) { - def sdk = SdkLoader.createSdk(this, typeName, sdkName, path, additionalData) + def Sdk createSdk(String typeName, String sdkName, String version, String path, Node additionalData) { + def sdk = SdkLoader.createSdk(this, typeName, sdkName, version, path, additionalData) sdks[sdkName] = sdk return sdk } diff --git a/jps/model/src/org/jetbrains/jps/idea/JavaSdkType.groovy b/jps/model/src/org/jetbrains/jps/idea/JavaSdkType.groovy index c300e9235363..891f1dd54272 100644 --- a/jps/model/src/org/jetbrains/jps/idea/JavaSdkType.groovy +++ b/jps/model/src/org/jetbrains/jps/idea/JavaSdkType.groovy @@ -13,7 +13,7 @@ class JavaSdkType extends SdkTypeService { } @Override - Sdk createSdk(Project project, String name, String homePath, Node additionalData) { - return new JavaSdkImpl(project, name, homePath, {}) + Sdk createSdk(Project project, String name, String version, String homePath, Node additionalData) { + return new JavaSdkImpl(project, name, version, homePath, {}) } } diff --git a/jps/model/src/org/jetbrains/jps/idea/SdkLoader.groovy b/jps/model/src/org/jetbrains/jps/idea/SdkLoader.groovy index 4ce0cbab337a..a713ca5d15d5 100644 --- a/jps/model/src/org/jetbrains/jps/idea/SdkLoader.groovy +++ b/jps/model/src/org/jetbrains/jps/idea/SdkLoader.groovy @@ -10,12 +10,12 @@ public class SdkLoader { private static final OwnServiceLoader sdkTypeLoader = OwnServiceLoader.load(SdkTypeService.class) private static Map sdkTypes - public static Sdk createSdk(Project project, String typeName, String sdkName, String homePath, Node additionalData) { + public static Sdk createSdk(Project project, String typeName, String sdkName, String version, String homePath, Node additionalData) { def type = findSdkType(typeName) if (type == null) { return null } - return type.createSdk(project, sdkName, homePath, additionalData) + return type.createSdk(project, sdkName, version, homePath, additionalData) } private static SdkTypeService findSdkType(String typeName) { diff --git a/jps/model/src/org/jetbrains/jps/idea/SdkTypeService.groovy b/jps/model/src/org/jetbrains/jps/idea/SdkTypeService.groovy index e1e35bcdd3ab..78b9478b54ab 100644 --- a/jps/model/src/org/jetbrains/jps/idea/SdkTypeService.groovy +++ b/jps/model/src/org/jetbrains/jps/idea/SdkTypeService.groovy @@ -13,5 +13,5 @@ public abstract class SdkTypeService { this.typeName = typeName } - public abstract Sdk createSdk(Project project, String name, String homePath, Node additionalData) + public abstract Sdk createSdk(Project project, String name, String version, String homePath, Node additionalData) } diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidSdkType.groovy b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidSdkType.groovy index 90d47d29c07c..0e18685fac87 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidSdkType.groovy +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidSdkType.groovy @@ -13,7 +13,7 @@ class AndroidSdkType extends SdkTypeService { } @Override - Sdk createSdk(Project project, String name, String homePath, Node additionalData) { + Sdk createSdk(Project project, String name, String version, String homePath, Node additionalData) { def attributes = additionalData.attributes() if (attributes == null) { return null;